前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >标准化API设计流程!

标准化API设计流程!

作者头像
Tinywan
发布2024-05-20 14:50:10
770
发布2024-05-20 14:50:10
举报
文章被收录于专栏:开源技术小栈开源技术小栈

通信协议

架构样式定义了应用程序编程接口(API)的不同组件如何相互交互。因此,它们通过提供设计和构建API的标准方法,确保了效率、可靠性和与其他系统的轻松集成。

以下是最常用的样式:

SOAP
  • 成熟、全面、基于XML
  • 最适合企业应用
RESTful
  • 流行的、易于实现的HTTP方法
  • Web服务的理想选择
GraphQL
  • 查询语言,请求特定数据
  • 减少网络开销,加快响应速度
gRPC
  • 现代化的高性能协议缓冲器
  • 适用于微服务架构
WebSocket
  • 实时、双向、持久连接
  • 非常适合低延迟数据交换
Webhook
  • 事件驱动、HTTP回调、异步
  • 事件发生时通知系统

REST API vs GraphQL

当涉及到API设计时,REST和GraphQL都有自己的优点和缺点。下图显示了REST和GraphQL之间的快速比较。

REST
  • 使用标准的HTTP方法,如GET,POST,PUT,CRUD操作。
  • 当您需要在独立的服务/应用程序之间使用简单、统一的接口时,可以很好地工作。
  • 缓存策略很容易实现。
  • 缺点是它可能需要多次往返才能从不同的端点收集相关数据。
GraphQL
  • 为客户端提供一个端点,以便精确查询所需的数据。
  • 客户端指定嵌套查询中所需的确切字段,服务器返回仅包含这些字段的优化有效负载。
  • 支持用于修改数据的Mutations和用于实时通知的Subscriptions。
  • 非常适合聚合来自多个来源的数据,并能很好地满足快速发展的前端需求。
  • 但是,它将复杂性转移到客户端,如果没有适当的保护,可能会允许滥用查询
  • 缓存策略可能比REST更复杂

REST和GraphQL之间的最佳选择取决于应用程序和开发团队的具体要求。GraphQL非常适合复杂或频繁变化的前端需求,而REST适合那些首选简单和一致的合同的应用程序。

这两种API方法都不是银弹。仔细评估需求和权衡对于选择正确的风格很重要。REST和GraphQL都是公开数据和支持现代应用程序的有效选择。

gRPC是如何工作的?

RPC(Remote Procedure Call)被称为“远程”,因为它在微服务架构下,当服务部署到不同的服务器时,可以实现远程服务之间的通信。从用户的角度来看,它就像一个本地函数调用。

上图说明了gRPC的总体数据流

  • 步骤1:从客户端进行REST调用。请求体通常是JSON格式。
  • 步骤2 ~ 4:订单服务(gRPC客户端)接收REST调用,对其进行转换,并对支付服务进行RPC调用。gRPC将客户端存根编码为二进制格式,并将其发送到低级传输层。
  • 步骤5:gRPC通过HTTP 2在网络上发送数据包。由于二进制编码和网络优化,gRPC据说比JSON快5倍。
  • 步骤6 - 8:支付服务(gRPC服务器)从网络接收数据包,对其进行解码,并调用服务器应用程序。
  • 步骤9 - 11:结果从服务器应用程序返回,并进行编码并发送到传输层。
  • 步骤12 - 14:订单服务接收数据包,对它们进行解码,并将结果发送到客户端应用程序。

什么是Webhook?

下图显示了轮询和Webhook之间的比较

假设我们运行一个电子商务网站。客户端通过API网关将订单发送到订单服务,订单服务转到支付服务进行支付交易。然后,支付服务与外部支付服务提供商(PSP)进行通信以完成交易。

有两种方法可以处理与外部PSP的通信。

1.短轮询

在向PSP发送支付请求之后,支付服务继续询问PSP关于支付状态。经过几轮之后,PSP最终返回状态。

短轮询有两个缺点

  • 续的状态轮询需要来自支付服务的资源。
  • 外部服务直接与支付服务通信,从而产生安全漏洞。
2.Webhook

我们可以使用外部服务注册一个webhook。这意味着:当你有关于请求的更新时,请在某个URL上给我回电话。当PSP完成处理后,它将调用HTTP请求来更新支付状态。

通过这种方式,改变了编程范例,并且支付服务不再需要浪费资源来轮询支付状态。

如果PSP不回电话怎么办?我们可以设置一个清洁工,每小时检查一次付款情况。

Webhook通常被称为反向API或推送API,因为服务器向客户端发送HTTP请求。使用Webhook时需要注意三点:

  • 我们需要设计一个合适的API供外部服务调用。
  • 出于安全原因,我们需要在API网关中设置适当的规则。
  • 我们需要在外部服务注册正确的URL。

如何提高API性能?

下图显示了提高API性能的5个常用技巧

分页

当结果的大小很大时,这是一种常见的优化。结果流回客户端,以提高服务响应能力。

异步日志记录

同步日志记录处理每次调用的磁盘,可能会降低系统的速度。异步日志记录首先将日志发送到无锁缓冲区,然后立即返回。日志将定期刷新到磁盘。这大大降低了I/O开销。

缓存

我们可以将频繁访问的数据存储到缓存中。客户端可以先查询该高速缓存,而不是直接访问数据库。如果存在缓存未命中,则客户端可以从数据库查询。像Redis这样的缓存将数据存储在内存中,因此数据访问比数据库快得多。

有效载荷压缩

可以使用gzip等压缩请求和响应,以便传输的数据大小要小得多。这加快了上传和下载的速度。

连接池

在访问资源时,我们经常需要从数据库中加载数据。打开正在关闭的数据库连接会增加大量开销。所以我们应该通过一个开放连接池连接到数据库。连接池负责管理连接生命周期。

如何设计安全有效的API?

下图以购物车为例展示了典型的API设计

请注意,API设计不仅仅是URL路径设计。大多数时候,我们需要选择适当的资源名称、标识符和路径模式。在API网关中设计适当的HTTP头字段或设计有效的速率限制规则同样重要。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 通信协议
    • SOAP
      • RESTful
        • GraphQL
          • gRPC
            • WebSocket
              • Webhook
                • REST API vs GraphQL
                  • REST
                  • GraphQL
                • gRPC是如何工作的?
                  • 什么是Webhook?
                    • 1.短轮询
                    • 2.Webhook
                  • 如何提高API性能?
                    • 分页
                    • 异步日志记录
                    • 缓存
                    • 有效载荷压缩
                    • 连接池
                  • 如何设计安全有效的API?
                  相关产品与服务
                  数据保险箱
                  数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档