Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

通过 AWS Marketplace 销售您的 API Gateway API

构建、测试和部署 API 后,您可以将其打包到 API Gateway 使用计划中,并通过 AWS Marketplace 将该计划作为软件即服务 (SaaS) 产品进行销售。AWS Marketplace 根据向使用计划发出的请求数量,对订阅您的产品/服务的 API 买家进行计费。

要在 AWS Marketplace 上销售 API,您必须设置销售渠道以将 AWS Marketplace 与 API Gateway 集成。一般而言,这涉及在 AWS Marketplace 上列出您的产品,使用适当的策略设置 IAM 角色以允许 API Gateway 向 AWS Marketplace 发送用量指标,将 AWS Marketplace 产品与 API Gateway 使用计划进行关联,以及将 AWS Marketplace 买家与 API Gateway API 密钥进行关联。以下各节讨论了相关详细信息。

为了使客户能够在 AWS Marketplace 上购买您的产品,您必须向 AWS Marketplace 注册自己的开发人员门户(外部应用程序)。该开发人员门户必须处理从 AWS Marketplace 控制台重定向的订阅请求。

有关示例开发人员门户应用程序,请参阅 API Gateway 开发人员门户

有关在 AWS Marketplace 上将您的 API 作为 SaaS 产品进行销售的更多信息,请参阅 AWS Marketplace 用户指南

初始化 AWS Marketplace 与 API Gateway 的集成

以下任务是为了一次性初始化 AWS Marketplace 与 API Gateway 的集成,以便您将 API 作为 SaaS 产品进行销售。

在 AWS Marketplace 上列出产品

要将您的使用计划作为 SaaS 产品列出,请通过 AWS Marketplace 提交产品加载表单。产品必须包含 requests 类型且名为 apigateway 的维度。此维度定义基于请求的定价,并由 API Gateway 用于计量对您的 API 提出的请求。

创建计量角色

使用以下执行策略和信任策略,创建一个名为 ApiGatewayMarketplaceMeteringRole 的 IAM 角色。此角色允许 API Gateway 代表您向 AWS Marketplace 发送用量指标。

计量角色的执行策略

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "aws-marketplace:BatchMeterUsage", "aws-marketplace:ResolveCustomer" ], "Resource": "*", "Effect": "Allow" } ] }

计量角色的可信关系策略

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

将使用计划与 AWS Marketplace 产品关联

在 AWS Marketplace 上列出产品时,您会收到一个 AWS Marketplace 产品代码。要将 API Gateway 与 AWS Marketplace 集成,请将您的使用计划与 AWS Marketplace 产品代码关联。您可以使用 API Gateway 控制台、API Gateway REST API、适用于 API Gateway 的 AWS CLI 或适用于 API Gateway 的 AWS 开发工具包,通过将 API Gateway UsagePlanproductCode 字段设置为您的 AWS Marketplace 产品代码,来启用关联。以下代码示例使用 API Gateway REST API:

PATCH /usageplans/USAGE_PLAN_ID Host: apigateway.region.amazonaws.com Authorization: ... { "patchOperations" : [{ "path" : "/productCode", "value" : "MARKETPLACE_PRODUCT_CODE", "op" : "replace" }] }

处理使用计划的客户订阅

以下任务由您的开发人员门户应用程序处理。

当客户通过 AWS Marketplace 订阅您的产品时,AWS Marketplace 会将 POST 请求转发至 SaaS 订阅 URL,该 URL 是您在 AWS Marketplace 中上架产品时注册的。该 POST 请求附带一个包含买家信息的 x-amzn-marketplace-token 标头参数。按照配置您的 SaaS 应用程序以接受新客户中的说明操作,以在您的开发人员门户应用程序中处理此重定向。

作为对客户订阅请求的响应,AWS Marketplace 会向您可以订阅的 Amazon SNS 主题发送 subscribe-success 通知。(请参阅配置您的 SaaS 产品以接受新客户)。要接受客户订阅请求,您应创建或检索客户的 API Gateway API 密钥,将客户的 AWS Marketplace 预配置 customerId 与 API 密钥进行关联,然后将该 API 密钥添加到您的使用计划中,以此来处理 subscribe-success 通知。

当客户的订阅请求完成后,开发人员门户应用程序应向客户展示关联的 API 密钥,并告知客户该 API 密钥必须包含在对 API 提出的请求的 x-api-key 标头中。

如果客户取消对使用计划的订阅,AWS Marketplace 会向 SNS 主题发送 unsubscribe-success 通知。要完成客户取消订阅的过程,应通过从使用计划中删除客户的 API 密钥来处理 unsubscribe-success 通知。

授权客户访问使用计划

要授权给定客户访问您的使用计划,请使用 API Gateway API 为该客户获取或创建 API 密钥,然后将该 API 密钥添加到使用计划中。

以下示例介绍了如何调用 API Gateway REST API 以创建具有特定 AWS Marketplace customerId 值 (MARKETPLACE_CUSTOMER_ID) 的新 API 密钥。

POST apikeys HTTP/1.1 Host: apigateway.region.amazonaws.com Authorization: ... { "name" : "my_api_key", "description" : "My API key", "enabled" : "false", "stageKeys" : [ { "restApiId" : "uycll6xg9a", "stageName" : "prod" } ], "customerId" : "MARKETPLACE_CUSTOMER_ID" }

以下示例介绍了如何获取具有特定 AWS Marketplace customerId 值 (MARKETPLACE_CUSTOMER_ID) 的 API 密钥。

GET apikeys?customerId=MARKETPLACE_CUSTOMER_ID HTTP/1.1 Host: apigateway.region.amazonaws.com Authorization: ...

要向使用计划添加 API 密钥,请通过相关使用计划的 API 密钥创建一个 UsagePlanKey。以下示例介绍了如何使用 API Gateway REST API 完成此操作,其中 n371pt 是使用计划 ID,q5ugs7qjjh 是从之前的示例返回的示例 API keyId

POST /usageplans/n371pt/keys HTTP/1.1 Host: apigateway.region.amazonaws.com Authorization: ... { "keyId": "q5ugs7qjjh", "keyType": "API_KEY" }

将客户与 API 密钥关联

必须将 ApiKeycustomerId 字段更新为客户的 AWS Marketplace 客户 ID。这可将 API 密钥与 AWS Marketplace 客户关联,从而可对买家进行计量和计费。以下代码示例调用 API Gateway REST API 来执行此操作。

PATCH /apikeys/q5ugs7qjjh Host: apigateway.region.amazonaws.com Authorization: ... { "patchOperations" : [{ "path" : "/customerId", "value" : "MARKETPLACE_CUSTOMER_ID", "op" : "replace" }] }