网关最基本的功能是转发请求, 常见的方式是根据配置中的路由规则将请求转发给内部服务, 如:
将/order/*的请求转发给内部的订单系统、/user/*的请求转发给内部的用户系统, 这种做法常用于对整个业务系统负责的基础网关.
而本文所设计的是服务于第三方的开放API网关, 并未使用上述做法, 而是将请求的资源作为参数放到请求体中, 其原因如下:
开放API服务于第三方, 屏蔽内部路径, 有利于提供命名统一且规范的接口.
请求接口的映射由网关的路由表维护, 内部接口升级甚至切换到新服务对外接口不变.
能够更细粒度地针对接口进行权限控制、限流、统计等.
地址
开放API网关对外提供唯一入口, 具体请求的资源作为参数传入.
公共参数
为了简化签名和验签的操作, 同时也提高灵活度, 唯一入口的约定了固定的公共参数和返回值, 如下:
公共请求参数
app_id: 应用ID, 应用ID是授权的主体, 是调用方的身份标识
method: 请求方法, 与内部URL对应, 由网关的路由表维护.
timestamp和nonce用来防重放攻击.
biz_content: 业务参数, 这个参数将转发给内部业务系统.