欢迎使用API网关开发者工具套件(SDK)。API网关SDK是根据您自定义的所有API接口,自动生成的Java调用代码,让您无需复杂编程即可访问阿里云的API网关服务。这里向您介绍如何使用API网关SDK。
需要注意的一点是,所有API和文档都会按照RegionId
、Group
分组。下文中所有出现的{{group}}
都是指API所属Group的名称,{{regionId}}
都是指Group所在的地域(可用区)。
代码文件的层级结构如下:
JavaSDK文件夹,包含每个Group的所有API的接口调用代码
包含对应Group所有HTTP通道的API方法
包含对应Group所有HTTPS通道API方法
包含对应Group所有WebSocket通道的API法
包含对应Group所有API调用示例
对应Group的API接口文档
sdk的core包,为本sdk的依赖包
上述依赖包的源码
core包的文档
本SDK使用指南
版权许可
JDK 1.6
及以上版本重要提示:AppKey
和AppSecret
是网关认证用户请求的密钥,这两个配置如果保存在客户端,请妥善加密。
3. 在pom.xml中添加如下依赖:
<dependency>
<groupId>com.aliyun.api.gateway</groupId>
<artifactId>sdk-core-java</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.52</version>
</dependency>
HttpApiClient*.java
、HttpsApiClient*.java
和WebSocketApiClient*.java
文件复制到您的项目文件夹中;要提交请求至阿里云API网关,您首选要将所有的通道类初始化。您可以参考Demo*.java
中的示例代码,使用对应的ClientBuilderParams
类来初始化所有通道:
HttpClientBuilderParams httpParam = new HttpClientBuilderParams();
httpParam.setAppKey("");
httpParam.setAppSecret("");
HttpApiClientchuxiang.getInstance().init(httpParam);
####注意####
HttpClientBuilderParams
里面有很多构造参数,主要是对ApacheHttpClient开源组件的包装,具体参数含义可以自行搜索这个开源组件的参数说明(官方文档:https://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/index.html)。HttpClientBuilderParams httpsParam = new HttpClientBuilderParams();
httpsParam.setAppKey("");
httpsParam.setAppSecret("");
//忽略证书代码
//httpsParam.setRegistry(getNoVerifyRegistry());
HttpsClientUnitTest.getInstance().init(httpsParam);
####注意####
WebSocketClientBuilderParams clientParam = new WebSocketClientBuilderParams();
clientParam.setAppKey("");
clientParam.setAppSecret("");
clientParam.setApiWebSocketListner(new ApiWebSocketListner() {
@Override
public void onNotify(String message) {
System.out.println("receive notice :" + message);
notifyReturnMessage = message;
notifyCountDown.countDown();
}
@Override
public void onFailure(Throwable t, ApiResponse response) {
t.printStackTrace();
notifyCountDown.countDown();
}
});
WebSocketClientUnitTest.getInstance().init(clientParam);
####注意####
SDK是根据您在API网关自定义的参数进行生成的,每个API都被封装成了method,您可以参照Demo中的示例代码进行调用。
另外,SDK为您封装了单例模式的调用方法,您可以使用HttpClient{{group}}.getInstance()
方法来获得通道类对象。
每个API同时提供同步和异步的调用方法,下面是调用示例:
//异步调用示例
public void test06HttpCommon() throws Exception {
HttpClientUnitTest.getInstance().getUser(userId , new ApiCallback() {
@Override
public void onFailure(ApiRequest request, Exception e) {
e.printStackTrace();
}
@Override
public void onResponse(ApiRequest request, ApiResponse response) {
try {
System.out.println(response.getCode());
System.out.println(response.getMessage());
System.out.println(response.getFirstHeaderValue("x-ca-request-id"));
}catch (Exception ex){
ex.printStackTrace();
}
}
});
}
//同步调用示例
public void test06HttpGetUser(int userId) throws Exception {
ApiResponse response = HttpClientUnitTest.getInstance().getUserSyncMode(userId);
System.out.println(response.getCode());
System.out.println(response.getMessage());
System.out.println(response.getFirstHeaderValue("x-ca-request-id"));
}
####注意####
init()
初始化后,才可以调用getInstance()
方法,否则会抛出异常。Java的SDK允许开发者设置请求HTTP连接池的细节来适配高并发场景,比如下面是一个常见的配置:
HttpClientBuilderParams httpsParam = new HttpClientBuilderParams();
httpsParam.setAppKey("");
httpsParam.setAppSecret("");
//连接池中的线程池
httpsParam.setExecutorService(Executors.newFixedThreadPool(100));
//最大并发连接数
httpsParam.setDispatchMaxRequests(200);
//每个后端域名并发连接数
httpsParam.setDispatchMaxRequestsPerHost(200);
//请求读超时
httpsParam.setReadTimeout(15000L);
HttpsApiClientWithThreadPool.getInstance().init(httpsParam);
其中连接池的线程数个数,最大并发连接数的配置都需要根据实际情况来配置,需要有高并发经验的工程师来配置,并不是越大越好。
注意,如果只是普通的客户端调用场景,没有高并发需求,线程池、并发连接数不需要设置,使用默认设置就是最优配置。
SDK所有默认超时时间都是10秒,如果需要做个性化设置,具体设置方式参见以下代码:
HttpClientBuilderParams httpsParam = new HttpClientBuilderParams();
httpsParam.setAppKey("");
httpsParam.setAppSecret("");
//请求读超时
httpsParam.setReadTimeout(15000L);
//请求写超时
httpsParam.setWriteTimeout(15000L);
//建立连接超时
httpsParam.setConnectionTimeout(15000L);
HttpsApiClientWithThreadPool.getInstance().init(httpsParam);
需要注意一定的是,客户端的超时时间务必设置得比API定义中的后端超时时间要长一点,避免后端还没返回,客户端就认为超时了并且把连接断了。
本SDK设计的是,一个client使用一个长连接和后端一个HOST通信,但有些场景同一个client对象可能需要调用多个HOST,可以如下设置
public void invokeApi(String CaMarketExperiencePlan , byte[] body , ApiCallback callback) {
String path = "/rest/160601/ocr/ocr_vehicle.json";
ApiRequest request = new ApiRequest(HttpMethod.POST_BODY , path, body);
request.addParam("CaMarketExperiencePlan" , CaMarketExperiencePlan , ParamPosition.HEAD , false);
request.setHttpConnectionMode(HttpConnectionModel.MULTIPLE_CONNECTION);
request.setScheme(Scheme.HTTPS);
request.setHost("www.aliyun.com");
sendAsyncRequest(request , callback);
}
如果在使用中遇到棘手的问题,请加入我们官方用户支持群来找我们