REST和API有什么区别?

82
我想了解REST和API的主要区别。有时在编程文档中看到REST API,那么REST或API与REST API是相同的吗?我希望了解REST、API和REST API之间的关系。

也许我写的这篇文章会对你有兴趣。什么是 REST API,如何设计它。https://hersengarage.nl/rest-api-design-as-a-craft-not-an-art-a3fd97ed3ef4干杯。 - Patrick Savalle
7个回答

132

REST是API的一种类型。不是所有的API都是REST,但所有的REST服务都是API。

API是一个非常广泛的术语。通常是指一个代码片段如何与另一个代码片段交互。在Web开发中,API通常是指我们从在线服务中检索信息的方式。API文档会提供一个URL列表、查询参数和其他信息,告诉您如何从API发出请求,并告知每个查询将返回什么样的响应。

REST是一组规则/标准/指南,用于构建Web API。由于有许多方法可以构建API,因此拥有一套约定好的API结构系统可以节省在构建API时做出决策的时间,同时也节省了理解如何使用API的时间。

其他流行的API范例包括SOAP和GraphQL。

请注意,上述内容试图回答关于如何在Web开发中常见使用这些术语的问题。Roman Vottner在下面提供了一个不同的答案,其中提供了比我在此处提供的更加技术精细的原始REST术语定义方面的深入洞见。


2
你好,能否请您详细解释一下?谢谢。 - Nomura Nori
3
我已经编辑了我的答案并添加了一些细节,但这是一个非常广泛的话题,在此我无法详尽阐述。如果你想要更多详情,我建议你搜索 REST 和 API 这些术语。此外,关于你在API方面所试图实现的一些细节可能会让我们更容易地回答你的问题。 - dave
2
有没有一个不是REST的API的例子? - AskYous
@AskYous SOAP API曾经非常受欢迎。这些天,很多人正在使用GraphQL https://en.wikipedia.org/wiki/GraphQL。 - dave

39

REST主要是指按照HTTP协议的本意使用它。使用GET HTTP方法从URL检索信息,根据HTTP Accept标头以可能不同的格式进行返回。使用POST HTTP方法在服务器上创建新项,使用PUT编辑现有项,使用DELETE删除项。使API具有幂等性,即使用相同信息重复查询应产生相同的结果。以分层方式结构化您的URL等。

REST仅是一种指导原则,说明如何使用URL和HTTP协议来构建API。它并没有关于返回格式的规定,可以选择JSON作为返回格式。

这与那些向指定端口发送二进制或XML消息而不使用HTTP方法或URL差异的API形成对比。


11

REST 和 API 没有可比性,REST 是一种 API 类型。

API 通常是一组协议,部署在应用软件上,与其他软件组件进行通信(例如浏览器与服务器交互),并提供一个接口,以向多个实时消费者提供应用软件提供的服务。

而 REST 是一种原则形式,API 遵循这种原则,即服务器提供任何客户端想要与服务交互的信息。


11
API是应用程序编程接口的缩写,它定义了一组结构(即类),必须实现这些结构才能与API提供的服务进行交互。API通常公开可调用的操作,包括任何必需或支持的参数以及预期的响应。经典的例子包括Java生态系统中的Corba IDL、SOAP或RMI,还有在Swagger或OpenAPI等文档中指定的Web系统的类似RPC的用法。保留HTML标签。

相比之下,REST(REpresentational State Transfer)是由Fielding在他的博士论文中规定的,他在其中分析了整个用户在Web上的交互方式。他意识到,在Web上只需要传输协议、命名方案和定义良好的交换格式来交换消息或文档。因此,这三个部分定义了在这种生态系统中与对等体进行交互的接口。传输层由HTTP覆盖,而命名方案由URI / IRI定义。与通常仅支持一种语法的传统RPC协议不同,REST实际上独立于特定的语法。为了维护互操作性,客户端和服务器都需要就此进行协商,而HTTP本身通过 Accept 请求和 Content-Type 响应头来支持。只要客户端和服务器支持HTTP,URI / IRI和一组由支持超媒体功能的媒体类型定义的协商表示格式,它们就能够相互交互。从更狭义的角度来看,REST除了HTTP,URI / IRI和相应的媒体类型外没有API。

然而,事情并不那么简单。很多人对于REST或REST API的理解存在误区。虽然URI本身不应该传达任何语义,毕竟它们只是指向资源的指针,但许多程序员给予URI比它们应该得到的更多重视。例如,一些客户端会尝试从URI中提取某些知识,或者认为URI代表某种类型的响应。例如,人们可能自然而然地认为,像https://api.acme.org/users/1这样的URI会返回描述特定系统用户的表示形式。外部文档可能会指定返回遵循给定模板的JSON结构。(参见此处)
{
  "id": 1,
  "firstName": "Roman",
  "lastName": "Vottner",
  "role": "Admin",
  ...
}

然而,可以预见到这种方法更接近于RPC而不是REST。响应也不是符合REST所要求的自我描述性,也不遵循定义语法和可能形成消息的每个元素的媒体类型的表示格式。因此,客户端通常是专门为特定系统(或REST API)定制的,不能在没有进一步手动集成/更新的情况下与不同系统交互。外部文档,如OpenAPI或Swagger,用于描述可用的端点、服务器将能够处理的有效负载模板以及根据输入预期的响应。因此,这些文档是真相,从而定义了客户端可以查找甚至用于自动生成存根类与服务器端进行交互类似于SOAP的API。
因此,我不同意戴夫所给出的答案。虽然对于RPC系统或公认的“REST API”术语,他的定义可能适用,但对于实际的REST架构,他的解释根本不合适,因此,在我看来,也不正确。 REST不是规则、标准和/或指导方针的集合。它只是一组少量的约束,确保这种架构中的对等体避免耦合,支持未来演变并变得更加强大。

9

REST基本上是一种Web架构风格,它控制客户端和服务器的行为。而API是一组更通用的协议,部署在软件上,帮助其与其他软件交互。

REST仅适用于Web应用程序。并且主要处理HTTP请求和响应。这使得它可以被任何编程语言实际使用,并且易于测试。


4

0
简而言之
API - 2个或更多的计算机/计算机程序/库/系统/应用程序/软件之间进行通信的方式。
REST - 它代表表现层状态转移,是一种软件架构模型。REST是API的一种类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接