跳到主要内容
版本:3.10.x

管理 API 产品

API 产品是通过开发者门户向开发者公开 API 的主要方式。本指南介绍如何使用提供商门户管理员 API 创建、配置和发布 API 产品。

先决条件

按照管理 Token创建 Token 并导出:

export API_KEY="a7ee-xxxxxxxxxxxxx"

创建网关 API 产品

网关 API 产品链接到 API7 网关中的服务,根据其 OpenAPI 规范自动生成 API 文档。

使用管理员 API

发送创建网关 API 产品的请求:

curl -k "https://localhost:7443/api/api_products?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "Payments API",
"desc": "Payment processing APIs for 开发者",
"type": "gateway",
"visibility": "public",
"subscription_auto_approval": false,
"auth": {
"key-auth": {}
},
"linked_gateway_services": [
{
"gateway_group_id": "<gateway-group-id>",
"service_id": "<service-id>",
"linked_hosts": ["payments.example.com"]
}
]
}'

如果你不在本地运行,请将 localhost 替换为你的仪表板主机。如果仪表板使用自签名 TLS 证书,则需要 -k 标志。

name 是开发者门户中向开发者显示的名称。

type: "gateway" 创建网关管理的API 产品。对于不受 API7 网关管理的 API,请使用 external

visibility 控制谁可以看到 API 产品。对所有开发者使用 public,或仅对经过身份验证的开发者使用 logged_in

subscription_auto_approval: false 需要管理员批准订阅请求。

auth 定义了 API 产品启用的认证类型,例如 key-authbasic-authdcr

linked_gateway_services 列出了 API 产品中包含的服务。

网关产品的先决条件

在将服务链接到 API 产品之前:

  1. 该服务必须配置在网关组中。
  2. 服务应上传 OpenAPI 规范。这提供了向开发者显示的 API 文档。
  3. 不要直接在服务上启用身份验证插件(例如key-authbasic-auth)。 API 产品认证配置处理此问题。混合两者可能会导致身份验证冲突。

创建外部 API 产品

外部 API 产品代表不受 API7 网关管理的 API。你提供 OpenAPI 规范和服务器 URL。

curl -k "https://localhost:7443/api/api_products?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "Legacy Billing API",
"desc": "Documentation for the legacy billing system",
"type": "external",
"visibility": "public",
"raw_openapi": "<openapi-spec-as-string>",
"server_urls": ["https://billing.internal.example.com"]
}'

外部产品不支持订阅、凭证或身份验证,因为 API7 网关不代理其流量。

配置身份验证

网关 API 产品支持以下认证类型:

密钥认证

{
"auth": {
"key-auth": {}
}
}

开发者在其应用程序中创建 API 密钥并将其包含在 API 请求中。

基本身份验证

{
"auth": {
"basic-auth": {}
}
}

开发者创建用户名/密码凭证并使用 HTTP 基本身份验证。

DCR(动态客户端注册)

{
"auth": {
"dcr": {
"dcr_provider_id": "<dcr-provider-id>"
}
}
}

开发者通过门户注册 OAuth 2.0 客户端。需要配置的 DCR 提供程序

你可以同时启用多种身份验证类型:

{
"auth": {
"key-auth": {},
"basic-auth": {},
"dcr": {
"dcr_provider_id": "<dcr-provider-id>"
}
}
}
备注

认证配置在产品发布后被锁定。要更改身份验证类型,请先取消发布产品。取消发布会取消所有活动订阅。

链接网关服务

创建或更新网关 API 产品时添加链接服务。每个链接服务指定一个网关组、服务和可选的特定主机:

curl -k -X PATCH "https://localhost:7443/api/api_products/{product_id}?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '[
{
"op": "replace",
"path": "/linked_gateway_services",
"value": [
{
"gateway_group_id": "<gateway-group-id>",
"service_id": "<service-id>",
"linked_hosts": ["api.example.com"]
},
{
"gateway_group_id": "<gateway-group-id>",
"service_id": "<another-service-id>"
}
]
}
]'

一项服务只能链接到一个 API 产品。尝试链接已与其他产品关联的服务会导致错误。

发布和取消发布

发布

发布使 API 产品在开发者门户上可见,并将身份验证配置推送到链接的网关服务:

curl -k -X PATCH "https://localhost:7443/api/api_products/{product_id}?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '[
{
"op": "replace",
"path": "/status",
"value": "published"
}
]'

取消发布(恢复为草稿)

恢复到草稿将从开发者门户中删除产品,从网关中删除身份验证规则,并删除所有活动订阅:

curl -k -X PATCH "https://localhost:7443/api/api_products/{product_id}?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '[
{
"op": "replace",
"path": "/status",
"value": "draft"
}
]'

配置通知

API 产品支持订阅生命周期事件的通知。配置接触点和事件:

curl -k -X PATCH "https://localhost:7443/api/api_products/{product_id}?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '[
{
"op": "replace",
"path": "/notifications",
"value": [
{
"event": "subscription_approval_created",
"type": "email",
"contact_point_ids": ["<contact-point-id>"]
},
{
"event": "subscription_approval_accepted",
"type": "webhook",
"contact_point_ids": ["<webhook-contact-point-id>"]
}
]
}
]'

支持的通知事件:

活动触发
subscription_approval_created开发者提交订阅请求。
subscription_approval_accepted管理员批准订阅。
subscription_approval_rejected管理员拒绝订阅。
subscription_approval_cancelled订阅被取消。

删除 API 产品

删除 API 产品还会删除所有关联的订阅、待审批,并从链接的网关服务中删除身份验证规则:

curl -k -X DELETE "https://localhost:7443/api/api_products/{product_id}?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}"

其他资源