架构样式定义了应用程序编程接口(API)的不同组件如何相互交互。因此,它们通过提供设计和构建API的标准方法,确保了效率、可靠性和与其他系统的轻松集成。
以下是最常用的样式:
当涉及到API设计时,REST和GraphQL都有自己的优点和缺点。下图显示了REST和GraphQL之间的快速比较。
❝REST和GraphQL之间的最佳选择取决于应用程序和开发团队的具体要求。GraphQL非常适合复杂或频繁变化的前端需求,而REST适合那些首选简单和一致的合同的应用程序。
这两种API方法都不是银弹。仔细评估需求和权衡对于选择正确的风格很重要。REST和GraphQL都是公开数据和支持现代应用程序的有效选择。
RPC(Remote Procedure Call)被称为“远程”,因为它在微服务架构下,当服务部署到不同的服务器时,可以实现远程服务之间的通信。从用户的角度来看,它就像一个本地函数调用。
上图说明了gRPC的总体数据流
下图显示了轮询和Webhook之间的比较
假设我们运行一个电子商务网站。客户端通过API网关将订单发送到订单服务,订单服务转到支付服务进行支付交易。然后,支付服务与外部支付服务提供商(PSP)进行通信以完成交易。
❝有两种方法可以处理与外部PSP的通信。
在向PSP发送支付请求之后,支付服务继续询问PSP关于支付状态。经过几轮之后,PSP最终返回状态。
短轮询有两个缺点
我们可以使用外部服务注册一个webhook。这意味着:当你有关于请求的更新时,请在某个URL上给我回电话。当PSP完成处理后,它将调用HTTP请求来更新支付状态。
通过这种方式,改变了编程范例,并且支付服务不再需要浪费资源来轮询支付状态。
如果PSP不回电话怎么办?我们可以设置一个清洁工,每小时检查一次付款情况。
❝Webhook通常被称为反向API或推送API,因为服务器向客户端发送HTTP请求。使用Webhook时需要注意三点:
下图显示了提高API性能的5个常用技巧
当结果的大小很大时,这是一种常见的优化。结果流回客户端,以提高服务响应能力。
同步日志记录处理每次调用的磁盘,可能会降低系统的速度。异步日志记录首先将日志发送到无锁缓冲区,然后立即返回。日志将定期刷新到磁盘。这大大降低了I/O开销。
我们可以将频繁访问的数据存储到缓存中。客户端可以先查询该高速缓存,而不是直接访问数据库。如果存在缓存未命中,则客户端可以从数据库查询。像Redis这样的缓存将数据存储在内存中,因此数据访问比数据库快得多。
可以使用gzip等压缩请求和响应,以便传输的数据大小要小得多。这加快了上传和下载的速度。
在访问资源时,我们经常需要从数据库中加载数据。打开正在关闭的数据库连接会增加大量开销。所以我们应该通过一个开放连接池连接到数据库。连接池负责管理连接生命周期。
❝下图以购物车为例展示了典型的API设计
请注意,API设计不仅仅是URL路径设计。大多数时候,我们需要选择适当的资源名称、标识符和路径模式。在API网关中设计适当的HTTP头字段或设计有效的速率限制规则同样重要。