本文介绍如何使用 Java 语言开发 HTTP API。
操作步骤如下:
引入网关 SDK
API 网关的客户端依赖 gateway-sdk
。对服务端而言主要是配置 spring 拦截器,对请求进行验签以及对响应进行加签。您需要在本地工程 pom.xml
中添加如下 SDK。
说明
如网关和服务端之间不需要双向认证,则无需引入
gateway-sdk
,直接编写 HTTP API 服务即可。网关 SDK 新增了数据加密的功能,请参见 数据加密。
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>gateway-sdk</artifactId>
<version>2.4.0</version>
</dependency>
配置密钥
如果 API 服务发布的系统集群配置了 密钥 的认证方式,您还需要在工程中配置相应的 Access Key 和 Secret Key。您可以在 API 网关控制台系统集群详情页获取。具体获取方法,参见 获取服务端信息 > API 系统集群密钥。
# 服务发布方的ak、sk
pub.app.accessKey=<yourAccessKeyId>
pub.app.secretKey=<yourAccessKeySecret>
配置 Filter
您需要为服务添加验签 filter。HTTP API 服务支持 REST 及 Spring MVC 框架。
Spring MVC 服务
@Bean
publicFilterRegistrationBean filterRegistrationBean(@Value("${pub.app.accessKey}")String keyId,
@Value("${pub.app.secretKey}")String secretKey){
FilterRegistrationBean registration =newFilterRegistrationBean();
registration.setFilter(apiServletSignFilter(keyId, secretKey));
registration.addUrlPatterns("/sign");// filter生效的uri路径,表示对所有路径生效
registration.setName("apiServletSignFilter");
registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
return registration;
}
@Bean
publicApiServletSignFilter apiServletSignFilter(@Value("${pub.app.accessKey}")String keyId,
@Value("${pub.app.secretKey}")String secretKey
){
ApiSecretKey apiSecretKey =newApiSecretKey(keyId, secretKey);
ApiServletSignFilter filter =newApiServletSignFilter();
List<ApiSecretKey> secretKeys =newArrayList<>();
secretKeys.add(apiSecretKey);
filter.setApiSecretKeys(secretKeys);
filter.setCheckSign(true);
filter.setSignUriRegex("/sign");// 开启验签加签的uri路径,表示对 /j 开头的路径做加签验签,其他路径则不验签
return filter;
}
REST 服务
@Bean
publicFilterRegistrationBean filterRegistrationBean(@Value("${pub.app.accessKey}")String keyId,
@Value("${pub.app.secretKey}")String secretKey){
FilterRegistrationBean registration =newFilterRegistrationBean();
registration.setFilter(apiRestSignFilter(keyId, secretKey));
registration.addUrlPatterns("/sign");// filter生效的uri路径,表示对所有路径生效
registration.setName("apiServletSignFilter");
registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
return registration;
}
// 给 rest 服务添加filter
@Bean
publicApiRestSignFilter apiRestSignFilter(@Value("${pub.app.accessKey}")String keyId,
@Value("${pub.app.secretKey}")String secretKey){
ApiSecretKey apiSecretKey =newApiSecretKey(keyId, secretKey);
List<ApiSecretKey> secretKeys =newArrayList<>();
secretKeys.add(apiSecretKey);
ApiRestSignFilter filter =newApiRestSignFilter();
filter.setApiSecretKeys(secretKeys);
// 支持sofa-rpc提供的http rest服务的验签加签,gateway-sdk版本在2.1.0及其以上版本
JAXRSProviderManager.registerCustomProviderInstance(filter);
return filter;
}
在文档使用中是否遇到以下问题
更多建议
匿名提交