aws apigateway get-sdk 命令详解:为 REST API 阶段生成 Android / iOS / JavaScript 客户端 SDK
2026/9/15 0:43:59 网站建设 项目流程

aws apigateway get-sdk 命令详解:为 REST API 阶段生成 Android / iOS / JavaScript 客户端 SDK

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

导读

aws apigateway get-sdk是 AWS CLI 中用于从 API Gateway 的 REST API 生成客户端 SDK 的核心命令。本文以官方示例文档 awscli/examples/apigateway/get-sdk.rst 为骨架,完整讲解 Android、iOS(Objective-C)与 JavaScript 三种 SDK 的生成命令、参数含义与输出格式,并结合仓库中的服务模型源码 awscli/botocore/data/apigateway/2015-07-09/service-2.json 深挖底层 HTTP 行为与响应结构,帮助你直接复现命令、排查参数问题。

一、命令概览:get-sdk 能做什么

在 API Gateway 中,一个 REST API 由若干资源(Resource)与方法(Method)组成,并通过 Stage(如devprod)对外发布。get-sdk的作用就是针对某个 REST API 的某个 Stage,自动生成该阶段当前定义对应的客户端 SDK 压缩包,供移动端或 Web 端开发者直接集成。

从当前仓库的服务模型定义来看,GetSdk操作的底层 HTTP 形态为:

GET /restapis/{restapi_id}/stages/{stage_name}/sdks/{sdk_type}

对应源码位于 awscli/botocore/data/apigateway/2015-07-09/service-2.json 的GetSdk节点。也就是说,命令中的三个核心参数最终会拼接到 URL 路径中,而不是查询字符串。

CLI 命令的基本形式为:

aws apigateway get-sdk --rest-api-id <id> --stage-name <stage> --sdk-type <type> --parameters <key=value,...> <输出zip文件路径>

其中最后一个位置参数是 SDK 压缩包的本地保存路径,输出文件可直接解压使用。

二、核心参数说明

根据服务模型中的GetSdkRequest结构体(见 service-2.json),get-sdk共有四个参数:

参数是否必填位置说明
--rest-api-idURI 路径REST API 的字符串标识符,对应 URL 中的restapi_id
--stage-nameURI 路径生成 SDK 所基于的 Stage 名称,对应 URL 中的stage_name
--sdk-typeURI 路径生成 SDK 的语言类型,对应 URL 中的sdk_type
--parameters查询字符串与 SDK 类型相关的键值对配置,以逗号分隔的key=value形式传入

其中--sdk-type目前支持javajavascriptandroidobjectivec(用于 iOS)、swift(用于 iOS)和ruby六种语言。这是服务模型官方文档的明确声明,实际可用类型还可通过aws apigateway get-sdk-types命令查询(详见下文第五节)。

--parameters是各类 SDK 的关键差异化配置,服务模型给出了明确的必填项要求:

  • objectivec/swift(iOS):必须提供classPrefix,用于指定生成类的前缀,避免与已有代码类名冲突;
  • android:必须提供groupIdartifactIdartifactVersioninvokerPackage四个参数,用于定义 Maven/Gradle 坐标与包名;
  • java:必须提供serviceNamejavaPackageName

三、官方示例:三种语言的完整实战

以下命令与输出均直接来自仓库官方示例文档 awscli/examples/apigateway/get-sdk.rst,可直接复制替换为自己的 REST API ID 与 Stage 名称运行。

3.1 生成 Android SDK

Android SDK 需要通过--parameters指定完整的 Maven 坐标信息:

aws apigateway get-sdk --rest-api-id 1234123412 --stage-name dev --sdk-type android --parameters groupId='com.mycompany',invokerPackage='com.mycompany.clientsdk',artifactId='Mycompany-client',artifactVersion='1.0.0' /path/to/android_sdk.zip

各参数含义:

  • groupId:Maven 组织标识,如com.mycompany
  • artifactId:构件名称,如Mycompany-client
  • artifactVersion:构件版本号,如1.0.0
  • invokerPackage:生成的客户端代码包名,如com.mycompany.clientsdk

生成的压缩包保存到/path/to/android_sdk.zip。命令输出如下:

{ "contentType": "application/octet-stream", "contentDisposition": "attachment; filename=\"android_2016-02-22_23-52Z.zip\"" }

contentDisposition中给出了服务端建议的文件名,格式为<sdk-type>_<时间戳>.zip,时间戳为 UTC 时间,可以据此核对生成时间。

3.2 生成 iOS(Objective-C)SDK

iOS 端 SDK 使用objectivec类型,并通过classPrefix指定类前缀:

aws apigateway get-sdk --rest-api-id 1234123412 --stage-name dev --sdk-type objectivec --parameters classPrefix='myprefix' /path/to/iOS_sdk.zip

该命令生成的 SDK 文件名同样会体现在响应中:

{ "contentType": "application/octet-stream", "contentDisposition": "attachment; filename=\"objectivec_2016-02-22_23-52Z.zip\"" }

如需改用 Swift,将--sdk-type换成swift并同样提供classPrefix即可。

3.3 生成 JavaScript SDK

JavaScript SDK 无需额外参数,直接指定类型即可:

aws apigateway get-sdk --rest-api-id 1234123412 --stage-name dev --sdk-type javascript /path/to/javascript_sdk.zip

输出:

{ "contentType": "application/octet-stream", "contentDisposition": "attachment; filename=\"javascript_2016-02-22_23-52Z.zip\"" }

生成的 JS SDK 通常包含 API 网关调用逻辑的封装,可直接在前端项目中引入使用。

四、底层原理:从源码看响应结构

4.1 响应体是一个二进制 Blob

在服务模型 service-2.json 的SdkResponse结构体中,响应由三个成员组成:

  • contentType:HTTP 响应头Content-Type的值,对应示例中的application/octet-stream
  • contentDisposition:HTTP 响应头Content-Disposition的值,对应示例中的attachment; filename="xxx.zip"
  • body:标记为payload的二进制 Blob,即 SDK 压缩包本身的字节内容。

正因如此,CLI 会把前两个响应头以 JSON 形式输出到终端,而把body部分直接落盘到命令末尾指定的 zip 文件路径。这也是为什么示例命令总是以一个路径作为结尾参数——它对应 API 的二进制主体,而非普通参数。

4.2 参数如何到达服务端

GetSdkRequest结构体可以确认:

  • restApiIdstageNamesdkType三者均为location: "uri",即拼入请求 URL 路径;
  • parameterslocationquerystring,以查询字符串形式传递,所以示例中才会出现groupId='com.mycompany',invokerPackage=...这样逗号分隔的键值对写法。

4.3 错误场景

服务模型声明GetSdk可能抛出以下异常:BadRequestExceptionConflictExceptionLimitExceededExceptionNotFoundExceptionUnauthorizedExceptionTooManyRequestsException。实际使用中最常见的两类:

  • 缺少必填参数:例如 Android 类型未提供invokerPackage,或 iOS 类型未提供classPrefix,会触发BadRequestException
  • REST API / Stage 不存在:会触发NotFoundException,此时应先通过aws apigateway get-rest-apisaws apigateway get-stages --rest-api-id <id>确认 ID 与 Stage 名称正确。

五、关联命令与进一步探索

  • aws apigateway get-sdk-types:分页查询当前账户/区域可用的 SDK 类型列表。模型定义见GetSdkTypesRequest,支持--position--limit参数(limit默认 25、最大 500),返回的SdkType对象包含idfriendlyNamedescriptionconfigurationProperties,其中configurationProperties可以帮你确认每个 SDK 类型实际需要的配置项;
  • aws apigateway get-export:与get-sdk并列的导出类命令,用于导出 Stage 的 OpenAPI/Swagger 定义而非客户端代码,参考 awscli/examples/apigateway/get-export.rst;
  • 完整命令集合:仓库提供了 APIGateway 全部 90 余个命令的官方示例,位于 awscli/examples/apigateway 目录,可按需查阅create-rest-apicreate-deploymentcreate-stageupdate-stage等配套命令,串联起"创建 API → 部署 → 生成 SDK"的完整工作流。

六、实操提示

  1. 先确认 API 与 Stage 存在get-sdk的三个必填参数均严格匹配已有资源,建议先运行aws apigateway get-rest-apisaws apigateway get-stages核对 ID 和名称。
  2. 按 SDK 类型补齐--parameters:Android 需要 4 个 Maven 坐标参数,iOS 需要classPrefix,Java 需要serviceNamejavaPackageName,JavaScript 与 Ruby 通常无需额外参数;不确定时用aws apigateway get-sdk-types查询配置属性。
  3. 输出文件落盘在命令末尾:命令的最后一个位置参数是 zip 文件保存路径,SDK 二进制内容不会显示在终端 JSON 中,请留意contentDisposition中返回的服务端推荐文件名。
  4. SDK 与 Stage 快照绑定:SDK 生成于指定 Stage 的当前部署定义,Stage 更新或重新部署后,如需同步客户端代码,应重新执行get-sdk拉取最新版本。

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询