管理 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-auth、basic-auth、dcr。
❻ linked_gateway_services 列出了 API 产品中包含的服务。
网关产品的先决条件
在将服务链接到 API 产品之前:
- 该服务必须 配置在网关组中。
- 服务应上传 OpenAPI 规范。这提供了向开发者显示的 API 文档。
- 不要直接在服务上启用身份验证插件(例如
key-auth或basic-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 产品。尝试链接已与其他产品关联的服务会导致错误。