API 网关使用指南
API 网关分成前后端服务,前端主要为接收客户端请求,并对其进行有效性校验及请求参数格式化后,再交给后端进行处理。
详细的控制台配置流程参考:点我直达
后端服务暂只支持云函数
云函数
云函数在被 API 网关作为后端服务时,其可以使用的传入参数及返回数据都与普通的云函数不一样。
需要注意,如 API 网关中 API 对应的云函数没有返回正确的数据格式时,该 API 则会响应失败。
云函数传入参数
传入参数在数据结构上没有改变,与云函数代码格式 中描述的一样。
其中变化的主要有以下几点:
eventType 的取值为
api_gateway
request.meta
中新增 API 网关请求相关的信息由于 API 网关会配置自定义的认证、鉴权逻辑,所以
request.user
不再提供,如需在云函数中识别请求的用户,可从 request 携带的 headers 等参数,如 cookie、token 等获取相关信息后进行。
event.request.meta 对象数据结构说明
request_method
String
请求方法(始终为大写字母, 如 GET/POST 等)
query_string
Object
请求中包含的 Query string
headers
Object
请求中提交的自定义 Headers(预先在 API 的参数设置后才可以使用)
request_path
String
请求路径(详细信息参见下文)
nested_arguments
Array
请求路径中配置的位置参数(详细信息参见下文)
named_arguments
Object
请求路径中配置的命名参数(详细信息参见下文)
ip_address
String
调用客户端地址
user_agent
String
调用客户端 User-Agent
示例:
请求路径
API 网关在定义 API 路径时,支持使用符合正则表达式语法来定义请求路径及其参数,以便更好地构造成动态路径。
比如,在控制台设置路径(位置表达式):
或者,在控制台设置路径(命名表达式):
客户端在请求时,云函数即可对路径及其参数进行获取,在客户端请求路径为:/article/123/
时,event.request.meta
中通过 nested_arguments
或者 named_arguments
获取参数。
示例:
位置参数
命名参数
更详细的说明及语法介绍,请查看API 网关定义 API 路径指南
event.data 对象说明
目前知晓云 API 网关支持接收以下格式的内容:
JSON(Content-Type:
application/json
)XML(Content-Type:
application/xml
)
API 网关会将 JSON/XML 内容转为 JavaScript 合法类型,使得云函数内部中无需再次解析,提升使用效率。
其中 XML 内容的会从字符串转为对象,如用户的请求内容为:
转换后可使用的内容则为:
云函数返回结果
在 API 网关调用的云函数中,需要指定返回结果为以下对象结构,如:
对象说明
content
String
响应内容
content_type
String
响应内容的类型
status_code
Integer
响应状态码
响应内容类型支持以下几种:
text/plain
text/html
application/json
application/xml
状态码使用可阅读资料:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
示例代码
返回内容为 text/plain
类型
返回内容为 text/html
类型
返回内容为 application/json
类型
返回内容为 application/xml
类型
认证方式
API 网关支持开发者选择以下几种认证方式:
免鉴权
JWT
若开发者选择免鉴权的认证方式,则 API 网关在收到匿名请求时,也可以通过认证。
推荐开发者对信息较为敏感的网关请求采用 JWT 的认证方式。
JWT 认证
当开发者在控制台为网关 API 成功绑定所使用的 JWT 后,开发者即可使用该 JWT 完成接口认证。
在 API 请求中,传递如下 http headers -- Authorization: Bearer <token>
,其中 token
通过当前路由绑定的 JWT 密钥生成。
token 生成方式如下:
首先指定使用算法 HS256;
不特别指定 JWT 签名所使用的 payload ,开发者可选择对一个空的 {} 进行签名,也可选择设置 JWT 提供的官方字段 exp(过期时间)/nbf(生效时间) 等规定 token 有效期;
使用 HS256 算法、JWT 签名所需 payload 以及路由绑定的 JWT 密钥,即可生成认证所需的 token。
服务器在收到 Authorization header 中的 token 之后,将校验其有效性,若 token 校验不通过则将返回 401 错误码。
自有域名
API 网关支持开发者使用自有域名作为网关请求域名。
使用自有域名时,需要先为您的二级域名在知晓云接入 API 域名备案[点我直达](https://cloud.minapp.com/dashboard/#/app/[[app_id | addSlashPostfixIfNotEmpty]]settings/domain/)。
由于一个域名只能绑定一个 API 网关,建议在绑定网关时使用三级域名。
即,若开发者已在知晓云接入 example.com
的 API 域名备案,则开发者可使用形如 example.example.com
的域名进行 API 网关自有域名绑定。
在绑定 API 网关自有域名后,开发者需要在域名服务商处解析 CNAME。
CORS 启用
跨源资源共享(CORS) 是一项浏览器安全功能,该功能限制从在浏览器中运行的脚本启动的跨源 HTTP 请求。若开发者需要跨源访问 API 网关中添加的路由,则需要在控制台中为 API 网关路由手动启用 CORS 功能。
info 勾选支持 CORS 以后需要填写正确的安全域名,只有在指定域名下,才能正常请求该 API 网关路由。假设开发者将从 http://localhost:8080/ 发起请求,则在安全域名配置框中输入 http://localhost:8080 即可。
代码示例
返回示例
Last updated
Was this helpful?