网站首页 > 技术文章 正文
这篇我们参考亚马逊提供的开发文档 Generating a Java SDK with LWA token exchange and authentication 来生成SPAPI(Amazon Selling Partner API)的 Java SKD,使用SDK可以调用SPAPI的相关接口,开发自己的应用对接亚马逊平台,实现订单、履约、支付等待功能。
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-java 和
sellingpartner-api-documents-helper-java 两个模块整个复制到项目中。
然后创建子模块(比如:
fruitbasket-amazon-spapi-models)用于存放生成的代码。
我们将复制过来的 sellingpartnerapi-aa-java 和
sellingpartner-api-documents-helper-java 作为依赖配置到子模块中(如下图红框)。
然后将我们生成的代码复制到子模块中。黄色框外是通用的代码,复制一份进来就可以了;黄色框中是根据不同模块的API配置文件(.json)生成的,我们适当的分下包。
最后只需要将生成的代码中的依赖配置文件指定的依赖添加到这个子模块的配置文件中,有很多依赖其实已经在 sellingpartnerapi-aa-java 和
sellingpartner-api-documents-helper-java 中有配置,可以省略。
另外生成的代码都在 io.swagger.client 包下,可以根据自己的需求改这个包名,复制代码进来的时候跟着改下即可。
到此本文的内容都已分享完毕,祝大家顺利。
原文链接:
https://juejin.cn/post/7218417913094848571
猜你喜欢
- 2025-07-14 pig:基于 Spring Cloud的微服务框架,微服务认证授权脚手架
- 2025-07-14 Go 自动生成 Swagger API 文档的详细步骤
- 2025-07-14 swagger自动化测试(swagger 测试)
- 2025-07-14 揭秘!电商API开发为何离不开Postman和Swagger?
- 2024-08-04 Java微服务前后端分离技术开发的微信快速框架-教程
- 2024-08-04 增强您的 API 文档:2024 年 Stoplight 的 6 大替代方案
- 2024-08-04 MyBatisFlex自动生成代码(mybatis plus自动生成表)
- 2024-08-04 API声明文件Swagger Injection攻击
- 2024-08-04 研究人员发现 Swagger 相关漏洞(网络安全领域,把已经发现,但相关软件厂商还没有修复的漏洞叫)
- 2024-08-04 Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 480℃启用MySQL查询缓存(mysql8.0查询缓存)
- 460℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 440℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)