什么是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的类名,方法名等信息,那么网关系统就需要提供一个入口,把这些信息传入进去,然后再调用泛化逻辑。