REST和API有什么区别?

时间:2016-12-16 17:50:13

标签: rest api

我想知道REST和API之间的主要区别。有时我在编程文档中看到REST API,那么REST或API是否与REST API相同?我想更多地了解REST,API和REST API之间的关系。

感谢。

6 个答案:

答案 0 :(得分:37)

REST是一种API。并非所有API都是REST,但所有REST服务都是API。

API是一个非常广泛的术语。通常,它是一段代码与另一段代码交谈的方式。在Web开发中,API通常指的是我们从在线服务检索信息的方式。 API文档将为您提供URL列表,查询参数以及有关如何从API发出请求的其他信息,并告知您将为每个查询提供何种响应。

REST是一套关于如何构建Web API的规则/标准/指南。由于有很多方法可以做到这一点,因此建立一个结构化API的协议系统可以节省构建API时的决策时间,并节省了解如何使用API​​的时间。

答案 1 :(得分:13)

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

REST只是如何使用URL和HTTP协议来构建API的指导原则。它没有提到返回格式,也可能是JSON。

这与例如将二进制或XML消息发送到指定端口的API相反,而不是使用HTTP方法或URL中的差异。

答案 2 :(得分:3)

在REST和API中没有比较,REST是一种API类型。

一般来说,API是一组通过应用软件部署的协议,用于与其他软件组件通信(如与服务器交互的浏览器),并为应用软件提供服务接口 提供给几个现场消费者。

And Rest是API遵循的一种原则形式,其中服务器提供客户希望与服务交互的任何信息。

答案 3 :(得分:1)

API 基本上是一组函数和过程,允许一个应用程序访问另一个应用程序的功能

REST 是一组用于构建 Web API 的规则或指南。 它基本上是一种网络应用程序的架构风格,仅限于基于客户端-服务器的应用程序。

阅读更多信息:https://www.freelancinggig.com/blog/2018/11/02/what-is-the-difference-between-api-and-rest-api/

答案 4 :(得分:1)

API 是 Application Programming Interface 的首字母缩写词,它定义了一组必须实现的结构(即类),以便与公开 API 的服务进行交互。 API 通常公开可以调用的操作,包括任何必需或支持的参数以及预期的响应。此处的经典示例包括 Java 生态系统中的 Corba IDL、SOAP 或 RMI,以及 Swagger 或 OpenAPI 等文档中指定的 Web 系统的类似 RPC 用法。

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

然而,不幸的是事情并没有那么容易。不幸的是,大多数人对 RESTREST API 的理解非常不同。虽然 URI 本身不应该传达任何语义,毕竟它们只是指向资源的指针,但许多程序员认为 URI 的重要性比他们应有的要高。一些客户端,即会尝试从 URI 中提取一些知识或考虑 URI 为 return responses that represent a certain type。 IE。考虑像 https://api.acme.org/users/1 这样的 URI 来返回描述该特定系统的特定用户的表示似乎很自然。外部文档可能会指定返回遵循给定模板的 JSON 结构,例如

{
  "id": 1,
  "firstName": "Roman",
  "lastName": "Vottner",
  "role": "Admin",
  ...
}

可以预料,然而,这样的东西更接近于 RPC 而不是 REST。响应既不是 REST 所要求的自描述性的,也不是遵循明确定义的媒体类型的表示格式,该媒体类型定义了语法和可能形成消息的每个元素。因此,客户端通常是为一个特定系统(或 REST API,如果您愿意)量身定制的,并且不能在没有进一步手动集成/更新的情况下用于与开箱即用的不同系统进行交互。 OpenAPI 或 Swagger 等外部文档用于描述可用的端点、服务器将能够处理的有效负载模板以及预期的响应,具体取决于输入。因此,这些文档是真实的,因此定义了客户端可以查找甚至用于自动生成存根类以与服务器端交互的 API,类似于 SOAP。

因此我不同意 dave 给出的答案。虽然对于 RPC 系统或 REST API 的常见理解术语,他的定义可能是合适的,但对于实际的 REST 架构,他的解释根本不合适,因此,至少 IMO 也不正确。 REST 不是规则、标准和/或指南的集合。这是一组少数约束条件,可确保此类架构中的对等方避免耦合、支持未来演进并变得更健壮以应对变化。

答案 5 :(得分:0)

REST基本上是一种Web架构样式,用于控制客户端和服务器的行为。虽然API是一组更通用的协议,并且已部署在该软件上,以帮助其与某些其他软件进行交互。 REST仅适用于Web应用程序。并且主要处理HTTP请求和响应。这使得它几乎可以在任何编程语言中使用,并且易于测试。