亚马逊 spapi — 生成 Java SDK

selling-partner-api-models

Github - amzn/selling-partner-api-models 下载SPAPI源码。selling-partner-api-models/clients/ 目录下有API SDK(Application Programming Interface,Software Development Kit)共用的依赖,重点关注 sellingpartner-api-aa-java(认证授权模块)sellingpartner-api-documents-helper-java(API文档助手模块)。认证授权模块负责鉴权,现成的代码,只需要提供必要的参数;API文档助手模块提供了文档上传下载的代码,文档安全传输相关的加解密操作也是现成的,我们只需要使用里面现成的工具类即可,调用一些API的时候会用到。

selling-partner-api-models/models/ 目录下是各模块的API配置文件(.json),这个在官网的开发文档也可以看到,比如 Sellers API v1 model。打开 Swagger Editor,将配置文件中的内容贴到左边的编辑框里可视化API定义的内容。

使用 Swagger Codegen 生成代码

我们下载 Swagger 代码生成器(Swagger Codegen),用于根据API配置文件生成SDK代码。

echo "下载 swagger-codegen-cli-2.4.13.jar 到 ~/IdeaProjects 目录下" > /dev/null
wget https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.13/swagger-codegen-cli-2.4.13.jar -O ~/IdeaProjects/swagger-codegen-cli.jar 
复制代码

以上面图中卖家账户接口的API配置(sellers.json)为例,我们使用Swagger Codegen Cli生成卖家账户接口的API SDK代码。

echo "使用 swagger-codegen-cli.jar 根据 Sellers.json 和 templates 目录中的代码模板生成 Java SDK 代码到 ~/IdeaProjects/spapi/sellers 目录下" > /dev/null
java -jar ~/IdeaProjects/swagger-codegen-cli.jar \
generate -i ~/IdeaProjects/selling-partner-api-models-main/models/sellers-api-model/Sellers.json \
-l java \
-t ~/IdeaProjects/selling-partner-api-models-main/clients/sellingpartner-api-aa-java/resources/swagger-codegen/templates/ \
-o ~/IdeaProjects/spapi/sellers
复制代码

API SDK代码结构

使用IDEA打开这个项目看下代码结构,可以按自己需求选择作为Maven或者Gradle项目打开,里面两种类型的配置文件都有。

/docs 目录下是接口相关的文档,内容比较简陋,不如直接看官网的文档,比如 Sellers API v1 reference

io.swagger.client.api 包下是API的入口类,里面定义了各个接口的调用方法,直接用就行。每个接口会定义多种方式,比如:以 Async 结尾的异步调用,需要实现回调接口;以 WithHttpInfo 结尾的方法会返回统一响应体 ApiResponse 等等。

io.swagger.client.model 是这个模块的API特有的一些实体类,比如请求响应体。

io.swagger.client.auth 和下图红框中的对象是通用的,每个模块生成代码的时候都会有,我们将多个模块的代码合到一起的时候可以共用。

添加API SDK需要的依赖

我们再回头看看 io.swagger.client.api 中的 SellerApi 会发现有依赖的类(比如:AWSAuthenticationCredentials)找不到,导致编译报错了,报错代码是生成的建造者模式(Builder)代码,设置鉴权相关的属性的。如果生成代码的时候,不通过下面这段脚本指定使用的模板,那就不会生成 Builder 代码,没有依赖报错。不过还是用模板比较好,因为最终调用接口的时候还是要设置鉴权相关属性的,用生成的 Builder 代码比较方便。

-t ~/IdeaProjects/selling-partner-api-models-main/clients/sellingpartner-api-aa-java/resources/swagger-codegen/templates/
复制代码

报错的依赖都在 selling-partner-api-models/clients/sellingpartner-api-aa-java/src/com/amazon/SellingPartnerAPIAA/ 中。

通过打包配置依赖的方式解决

开发文档的例子 是将 sellingpartner-api-aa-java 模块打包生成依赖给API SDK使用,在IDEA的 Maven 窗口中,找到对应的 sellingpartnerapi-aa-java 模块,双击 install 安装这个依赖。

然后在API SDK配置这个依赖,重新加载下报错就消失了。如果公司有自己的 Maven 仓库,还可以将这个发布到仓库中,这样就不需要每个人都在本地安装一遍了。

将依赖代码复制到API SDK中

我们也可以将里面的类直接复制到API SDK中,因为都是一些简单的对象。

sellingpartner-api-aa-java 将 src 下连包带代码整个复制到API SDK中,并添加 sellingpartnerapi-aa-java 中需要的而这边没有的依赖,Maven 重新加载即可。

最佳实践

以上是SDK生成的全部过程,这里我们再看下较为合理的实践方式。

先创建个项目,将 sellingpartnerapi-aa-javasellingpartner-api-documents-helper-java 两个模块整个复制到项目中。

然后创建子模块(比如:fruitbasket-amazon-spapi-models)用于存放生成的代码。

我们将复制过来的 sellingpartnerapi-aa-javasellingpartner-api-documents-helper-java 作为依赖配置到子模块中(如下图红框)。

然后将我们生成的代码复制到子模块中。黄色框外是通用的代码,复制一份进来就可以了;黄色框中是根据不同模块的API配置文件(.json)生成的,我们适当的分下包。

最后只需要将生成的代码中的依赖配置文件指定的依赖添加到这个子模块的配置文件中,有很多依赖其实已经在 sellingpartnerapi-aa-javasellingpartner-api-documents-helper-java 中有配置,可以省略。

另外生成的代码都在 io.swagger.client 包下,可以根据自己的需求改这个包名,复制代码进来的时候跟着改下即可。

到此本文的内容都已分享完毕,祝大家顺利。

作者:我有八千部下
链接:https://juejin.cn/post/7218417913094848571
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值