网关2 - 网关如何调用API

什么是API

API --> 官方解释:应用编程接口。
首先,它是一个接口,其次它基于应用,并且它是可编程的。

API 的生命周期

1、设计(方法名 + 入参 + 出参)
名字:可以解释接口功能,见文知意;
入参:不要公开不合理的参数;
出参:错误码明确;
2、构建(编写内部逻辑):注意,进入方法先判参;
3、文档:接口的注释和接口文档写清楚;
4、测试:测试接口是否满足功能;
5、分享:即为发布,把接口发布出去;
6、运行:即为监控,监控接口的运行情况,性能监控,可用率监控,调用量监控等,可利用报表等工具进行统计和展示。
7、下线:无用之后,就下掉。

网关调用API的方式

如果采用普通的调用,有N个服务,就会需要依赖N个jar包,显然是不合理的。
所以,采用泛化调用的方式,即用反射的方式去调用服务;大概实现如下:

public JSONObject invokeMethod(){
        // 存放与注册中心以及服务方提供的链接
        ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
        // 弱类型接口名
        String interfaceName = "com.xxx.xxService";
        String version = "1.0.0";
        String methodName = "test";
        reference.setInterface(interfaceName);
        reference.setVersion(version);
        // 声明为泛化接口
        reference.setGeneric(true);

        GenericService genericService = reference.get();
        Object result;

        // 如果是普通类型参数,方法名,参数类型,参数值
        result = genericService.$invoke(methodName,new String[]{"java.lang.String"},new Object[]{"world"});

        // 如果是对象参数,就放在map里
        Map<String,Object> person = new HashMap<>();
        person.put("name","anne");
        person.put("password","123456");
        result = genericService.$invoke(methodName,new String[]{"com.xxx.Person"},new Object[]{person});

        return (JSONObject) result;
    }

这样,网关系统就不用依赖很多jar包了,都通过泛化接口来实现。

如何把API发布到网关系统

将API存储到网关系统能够访问的数据存储中(redis / 数据库),因为泛化调用需要知道API的类名,方法名等信息,那么网关系统就需要提供一个入口,把这些信息传入进去,然后再调用泛化逻辑。

原创文章 88 获赞 21 访问量 3万+

猜你喜欢

转载自blog.csdn.net/cfy1024/article/details/96317224