最流行的 API 类型指南:REST、SOAP、GraphQL 和 gRPC
API 是现代软件开发过程中最重要的组成部分,可帮助应用程序和服务通信和传输关键信息。
然而,随着该领域的进步,现在有各种各样的选择:REST、SOAP、GraphQL 或 gRPC。这意味着无论您是应用程序架构师还是后端开发人员,了解哪些 API 最适合特定应用程序都至关重要。
每种 API 类型都有其独特的架构,这些架构会随着时代的需求而不断演变。而且,随着技术的发展以及我们与技术关系的改变,我们看到各种 API 应运而生,它们填补了新的空白,并服务于新的用途。
在本文中,我们将比较 SOAP、REST、GraphQL 和 gRPC API,让您了解它们的优缺点、常见用例以及在选择最适合您需求的 API 时需要考虑的其他事项。
REST API
表述性状态转移 (REST) 是一种软件架构风格,用于开发 API 以提供简单、统一的接口。REST 可用于通过 Web URL 访问数据、内容、算法、媒体和其他数字资源,从而允许通过 Web、移动和设备应用程序使用它们。REST 允许以 JSON 和 XML 等简单格式进行数据交换。
REST API 遵循以下六个特定的架构约束:
- 统一的界面
- 完全无国籍
- 本机缓存
- 客户端-服务器架构
- 分层系统
- 向客户端提供可执行代码的能力
以下是 REST API 消息的示例:
{
"car": {
"vin": "KNDJT2A23A7703818",
"make": "kia",
"model": "soul",
"year": 2010,
"links": {
"service": "/cars/KNDJT2A23A7703818/service",
"sell": "/cars/KNDJT2A23A7703818/sell",
"clean": "/cars/KNDJT2A23A7703818/sell"
}
}
}
优点
-
REST API 基于 HTTP 协议,这意味着它们与格式无关,允许您使用 XML、JSON、HTML 和其他格式。这使得 REST API 快速且轻量,这对于移动应用程序开发、物联网设备和其他应用程序至关重要。
-
REST API 可以从 URL 轻松发现,因此开发人员可以非常轻松地测试它们并将其与他们的应用程序集成。
-
REST API 是无状态的,因此,它们使用起来非常灵活,并且根据用例具有高度的可扩展性。
-
这些 API 可以用 Python、JavaScript(Node.js)、Ruby、C# 和其他多种语言开发,从而使大多数开发人员更容易访问它们。
缺点
-
RESTful API 的一个缺点是失去了维护状态(例如会话内的状态)的能力。对于新手开发者来说,使用起来可能更具挑战性。
-
REST 确实施加了任何安全性,因此它适用于公共 URL,但不适合客户端和服务器之间的机密数据交换。
-
在沟通架构上缺乏具有约束力的合同。因此,在执行过程中,需要反复沟通,这可能会导致不必要的挫败感和瓶颈。
您可以使用 API Tester创建并发送您的第一个 REST API 请求并亲自了解其工作原理。
SOAP API
简单对象访问协议 (SOAP) 是一种用于在客户端和基于互联网的操作或服务之间共享以可扩展标记语言 (XML) 编码的信息的协议。它可以与各种传输协议(例如 HTTP、FTP、SMTP 等)一起使用。
SOAP 通常与 Web 服务描述语言 (WSDL) 结合使用。WSDL 的重要性在于,它允许开发人员和机器分析支持 SOAP 的 Web 服务,从而了解网络上信息交换的细微差别。此外,WSDL 还解释了如何格式化所提供服务支持的 SOAP 请求和应答消息。
SOAP 用于需要高安全性和复杂交易的企业级 Web 服务。SOAP 常用于金融服务、支付网关、CRM 软件、身份管理和电话服务的 API。
SOAP 消息具有层次结构,以<soap:Envelope>
为根元素。可以向根元素添加三个子元素。它们是<soap:Header>
、<soap:Body>
和<soap:Fault>
。
以下是 SOAP 消息的示例:
POST /Quotation HTTP/1.0
Host: www.xyz.org
Content-Type: text/xml; charset = utf-8
Content-Length: nnn
<?xml version = "1.0"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
<SOAP-ENV:Body xmlns:m = "http://www.xyz.org/quotations">
<m:GetQuotation>
<m:QuotationsName>MiscroSoft</m:QuotationsName>
</m:GetQuotation>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
优点
- 由于格式标准化,SOAP 完全与编程语言和处理平台无关。
- SOAP API 带有内置的本机错误处理,可帮助开发人员快速识别和解决问题。
- SOAP API 最适合传输敏感数据(例如财务数据),因为它的标准化允许在所有 API 中以代码形式实施特定的合同。
- SOAP 支持有状态操作,并且可以使用建立在基本 XML 和 SOAP 标准之上的 WS-*(Web 服务)规范来实现。
缺点
- 由于 SOAP 只能以 XML 文件的形式发送消息,因此您的 SOAP API 的性能会较低,因为 XML 是一种比 JSON 更冗长的格式。
- 对服务器的 SOAP API 请求会消耗更多带宽,并且需要更长的时间来处理请求并将结果返回给客户端。
- SOAP 客户端-服务器通信基于 WSDL(Web 服务描述语言)契约,这意味着紧密连接。因此,它不适用于松散连接的应用程序,因为客户端和服务器之间不可避免地存在契约。
- SOAP 的学习曲线更陡峭,开发难度更高,并且无法在 Web 浏览器中进行测试(与 REST 不同)。SOAP 要求您使用 WSDL 构建契约、建立客户端存根、遵守严格的要求等等。因此,作为程序员,您的选择灵活性会降低。
API Tester 支持向 SOAP API 发送请求,让您能够以快速简便的方式轻松测试您的 API。
GraphQL API
Facebook 在创建GraphQL时,需要一个强大的数据获取 API,该 API 必须能够执行 Facebook 的所有任务,同时又要简单易用,方便产品开发者学习和使用。GraphQL 的创建是为了重建 Facebook 的原生移动应用。
GraphQL 是一种查询语言。它以字符串的形式返回查询,然后将其提交到服务器。服务器处理查询并以 JSON 格式将响应传递给客户端。
GraphQL 是一种强类型语言,其中 GraphQL 查询的每个级别都对应不同的类型,并且每种类型代表一组不同的可访问字段。因此,它与 SQL 类似,会在执行查询之前提供信息丰富的错误警告,因此得名。
GraphQL 具有层次结构,其中对象之间的关系以图形方式定义。在此上下文中,每种对象类型都代表一个组件,并且从一个对象类型到另一个对象类型的每个相关字段都代表一个组件对另一个组件的包装。
一个简单的 GraphQL 请求如下所示:
{
me {
name
friends {
name
}
}
}
从单体后端应用程序迁移到微服务设计时,GraphQL API 可以通过将众多微服务集成到单个 GraphQL 模式中来帮助我们管理它们之间的通信。
优点
-
GraphQL 比其他通信 API 速度快得多,因为它允许你通过仅选择要查询的数据来缩小请求查询的范围。因此,它解决了所有过度获取和获取不足的问题。
-
使用 GraphQL 的 API,我们可以集成众多平台。它不仅整合了各个平台,还降低了平台的复杂性。GraphQL 服务器还用于从现有系统中检索数据,并将其打包为 GraphQL 响应格式。这对于规模庞大且难以管理的遗留基础设施或第三方 API 尤其有用。
-
当我们向服务器发送 GraphQL 查询时,服务器会以简单、安全且可预测的格式进行响应。因此,您可以更轻松地根据需求构建自定义查询。这使得 GraphQL 的学习和使用变得极其简单。
-
在更高的组件级别,我们可以共享多个查询中使用的 GraphQL 字段以供重用。此功能称为片段 (fragments),它允许您在维护相同架构字段的同时获取不同的数据。
-
由于 GraphQL 中的结果集或返回数据高度特定于客户端的查询,因此服务器可以非常直接轻松地对其进行泛化。当我们向服务器添加新的产品功能或字段时,不会对旧客户端产生任何影响。您可以继续使用旧服务器,因为服务器字段即使被弃用,仍然可以运行。这种兼容过程并不需要使用不断增加的版本号。如您所见,Facebook 在其所有应用程序中都使用相同版本的 GraphQL API。
缺点
- 一个缺点是,无论查询是否成功,它总是返回 HTTP 状态码 200。如果查询失败,返回的 JSON 将包含一个顶级的“errors”键,其中包含错误消息和堆栈跟踪。这会使错误处理变得更加困难,并增加监控等工作的复杂性。
- 使用 GraphQL 实现简化的缓存比在 REST 中实现更复杂。
- 速率限制是 GraphQL 的另一个问题。在 REST API 中,你可以轻松地写出“我们一天只接受这么多的请求”,但在 GraphQL 中,这种说法很难表达。
- 如果没有大量的培训和经验,GraphQL 很难掌握。
GitHub 的 GraphQL API是最常用的免费开发者 API。只需几分钟,即可在 API Tester 中创建并运行 GraphQL 请求,并开始探索更多功能!
gRPC
gRPC 远程过程调用(gRPC) 是一种跨平台、开源、基于契约的通信协议,它通过向外部客户端提供一组功能来简化和控制服务间通信。
开头的“g”表示这是谷歌在 2015 年创建的最先进的版本。一方面,用户选择一个要运行的远程进程,序列化所需参数,然后将任何附加信息附加到消息中。然后,消息被传输到服务器,服务器与其他应用程序通信,解码消息并执行操作。最后,原始用户将收到结果。
优点
- 它简单直接,GET 用于获取信息,POST 用于获取其他所有信息。
- 函数添加简单,对于轻量级负载来说,整体性能非常出色。因此,由于可以灵活地定义任何类型的函数,因此可以进行无限的自定义。
缺点
- gRPC 与底层系统强关联,在很多情况下限制了其可复用性,这也是其不足之处。此外,API 与实际系统功能之间缺乏抽象层,这带来了安全问题。
如何选择适合您使用的 API?
从以上讨论中您可能已经猜到,没有“最佳”的 API 类型,每种 API 类型都有其独特的特性,使其非常适合特定的应用。然而,问题仍然存在——如何找到最适合您的 API?
以下问题可以帮助您确定:
- 您想使用哪种编程语言?
- 您将在哪个环境中进行开发?
- 此 API 最重要的功能是什么?
- 你的员工有哪些技能?你还能学到哪些技能?
- 您为这个项目预留了哪些资源?
请记住,您始终可以针对一两种类型运行简单的概念验证,以测试它们的工作原理。您还可以使用API Tester,这是一款易于使用的移动应用,可帮助您在手机上测试任何 API。
结论
我们希望这篇博文能够帮助您区分最流行的 API 类型。每种 API 都有其用途,如果您事先经过深思熟虑地进行选择,那么您就能设计出不仅高效而且节省资源的 API。
文章来源:https://dev.to/pragativerma18/a-guide-to-the-most-popular-types-of-apis-rest-soap-graphql-and-grpc-4ail