全部产品

HTTP API 服务开发

更新时间:2020-11-03 17:51:57

本文介绍如何使用 Java 语言开发 HTTP API。操作步骤如下:

  1. 引入网关 SDK
  2. 配置 API 服务密钥
  3. 配置 Filter

引入网关 SDK

API 网关的客户端依赖 gateway-sdk。对服务端而言主要是配置 spring 拦截器,对请求进行验签以及对响应进行加签。您需要在本地工程 pom.xml 中添加如下 SDK。

说明
  • 如网关和服务端之间不需要双向认证,则无需引入 gateway-sdk,直接编写 HTTP API 服务即可。
  • 网关 SDK 新增了数据加密的功能,请参见 数据加密
  1. <dependency>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>gateway-sdk</artifactId>
  4. <version>2.4.0</version>
  5. </dependency>

配置密钥

如果 API 服务发布的系统集群配置了 密钥 的认证方式,您还需要在工程中配置相应的 Access Key 和 Secret Key。您可以在 API 网关控制台系统集群详情页获取。具体获取方法,参见 获取服务端信息 > API 系统集群密钥

  1. # 服务发布方的ak、sk
  2. pub.app.accessKey=zf6cDToPJoJofrog
  3. pub.app.secretKey=nIbrk8G9C11Oy6JWvYp7wJdx2kPBCuX2

配置 Filter

您需要为服务添加验签 filter。HTTP API 服务支持 REST 及 Spring MVC 框架。

Spring MVC 服务

  1. @Bean
  2. public FilterRegistrationBean filterRegistrationBean(@Value("${pub.app.accessKey}") String keyId,
  3. @Value("${pub.app.secretKey}") String secretKey) {
  4. FilterRegistrationBean registration = new FilterRegistrationBean();
  5. registration.setFilter(apiServletSignFilter(keyId, secretKey));
  6. registration.addUrlPatterns("/sign"); // filter生效的uri路径,表示对所有路径生效
  7. registration.setName("apiServletSignFilter");
  8. registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
  9. return registration;
  10. }
  11. @Bean
  12. public ApiServletSignFilter apiServletSignFilter(@Value("${pub.app.accessKey}") String keyId,
  13. @Value("${pub.app.secretKey}") String secretKey
  14. ) {
  15. ApiSecretKey apiSecretKey = new ApiSecretKey(keyId, secretKey);
  16. ApiServletSignFilter filter = new ApiServletSignFilter();
  17. List<ApiSecretKey> secretKeys = new ArrayList<>();
  18. secretKeys.add(apiSecretKey);
  19. filter.setApiSecretKeys(secretKeys);
  20. filter.setCheckSign(true);
  21. filter.setSignUriRegex("/sign"); // 开启验签加签的uri路径,表示对 /j 开头的路径做加签验签,其他路径则不验签
  22. return filter;
  23. }

REST 服务

  1. @Bean
  2. public FilterRegistrationBean filterRegistrationBean(@Value("${pub.app.accessKey}") String keyId,
  3. @Value("${pub.app.secretKey}") String secretKey) {
  4. FilterRegistrationBean registration = new FilterRegistrationBean();
  5. registration.setFilter(apiRestSignFilter(keyId, secretKey));
  6. registration.addUrlPatterns("/sign"); // filter生效的uri路径,表示对所有路径生效
  7. registration.setName("apiServletSignFilter");
  8. registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
  9. return registration;
  10. }
  11. // 给 rest 服务添加filter
  12. @Bean
  13. public ApiRestSignFilter apiRestSignFilter(@Value("${pub.app.accessKey}") String keyId,
  14. @Value("${pub.app.secretKey}") String secretKey) {
  15. ApiSecretKey apiSecretKey = new ApiSecretKey(keyId, secretKey);
  16. List<ApiSecretKey> secretKeys = new ArrayList<>();
  17. secretKeys.add(apiSecretKey);
  18. ApiRestSignFilter filter = new ApiRestSignFilter();
  19. filter.setApiSecretKeys(secretKeys);
  20. return filter;
  21. }