REST API与RESTful API的区别

2024年10月5日 | 阅读 6 分钟

本文将讨论 Node.js 中 REST API 和 RESTful API 之间的区别。在讨论它们的区别之前,我们必须了解 REST API 和 RESTful API。

什么是 REST API?

Representational State Transfer Application Programming Interface (表述性状态转移应用程序编程接口) 被称为 REST API。 它是一种用于设计网络应用程序的架构风格,尤其适用于那些使用 HTTP 与基于 Web 的服务进行通信的应用程序。客户端和服务器使用 GET、POST、PUT 和 DELETE 等常见的 HTTP 方法与 REST API 进行交互。

现代微服务设计经常使用 REST API,因为它们可以将功能划分为小的、独立的单元。因此,整个系统更加灵活和易于维护,因为每个服务都可以独立开发、实现和扩展。

REST 的关键原则是面向资源的 URL,其中使用 URI 来标识资源;无状态性,客户端到服务器的每个请求都必须包含理解和处理请求所需的所有信息;以及使用 JSON 或 XML 等标准格式来表示资源数据。

REST 已成为开发 API 的公认标准,因为它提供了一种易于使用、可扩展且有效的方法来与服务器端服务进行交互,而无需依赖任何特定的服务器技术。

REST API 的主要组成部分

REST API 的几个主要组成部分如下:

  1. 面向资源: 它围绕资源(如个人或产品)进行工作,这些资源通过特定的 URI 端点检索,例如 https://javatpoint.com//。
  2. 无状态: 服务器不存储任何会话数据;每个请求都是独立的。客户端使用令牌或 cookie 来管理其会话。
  3. 可缓存: 标头指定响应是否以及可以缓存多长时间,这有助于提高性能。
  4. 统一接口: 标准 HTTP 方法(GET、POST、PUT、DELETE)一致地用于对资源执行 CRUD 操作。
    1. GET: 检索资源。
    2. POST: 创建新资源。
    3. PUT: 更新现有资源。
    4. DELETE: 删除资源。
  5. 分层系统: 分层系统提高了可扩展性,因为客户端与 API 通信时不知道它是直接连接到服务器还是通过中间服务器。
  6. 按需代码(可选): 此功能允许通过允许服务器将可执行代码交付给客户端来实现动态功能;但是,很少使用。

什么是 RESTful API?

“RESTful API” 这个术语描述了一个 API (应用程序编程接口),它严格遵循表述性状态转移 (REST) 的架构原则。它定义了一组用于创建 Web 服务的约定,这些服务通过 Internet 与资源(数据)通信,并使用 GET、POST、PUT 和 DELETE 等常见的 HTTP 方法。

通过 RESTful API,应用程序可以无需了解它们正在使用的服务的内部工作原理,即可通过 HTTP 请求和响应进行通信。定义的端点(URL)是交互的基础,它遵循 REST 原则,包括无状态性、通过 URI 进行资源标识以及使用 XML 或 JSON 等标准格式表示数据。

RESTful API 常用于访问和修改各种联网应用程序、数据库和服务中的数据。通过利用 HTTP 协议的易执行性和高效性,它们适用于开发可扩展、灵活且易于维护的独特软件应用程序。

RESTful API 的主要组成部分

RESTful API 的几个主要组成部分如下:

  1. 资源: 这些是 API 提供的可供使用的主要对象或实体。例如,“客户”或“订单”等每个资源都代表数据。客户端可以理解和操作资源,因为它们通常根据其表示的数据进行组织。
  2. URI(统一资源标识符): URI,或统一资源标识符,类似于地址,它们作为唯一标识每个给定资源的方式。例如,ID 为 **1234** 的单个客户使用 **URI https://api.example.com/customers/1234** 进行识别。由于 URI 结构允许客户端识别和访问特定资源,因此它至关重要。
  3. HTTP 方法: RESTful API 使用标准的 HTTP 方法来操作资源。这些包括:
    1. GET: 获取资源列表或直接获取单个资源。
    2. POST: 创建新资源。
    3. PUT: 完全更新现有资源。
    4. PATCH: 使用补丁部分更新资源。
    5. DELETE: 删除资源。
  4. 表示: RESTful API 的资源可以采用 XML 或 JSON 等格式。由于这些格式,客户端可以读取和使用数据。通过在其请求中使用 Accept 标头,客户端可以告知服务器他们希望接收的数据格式,服务器将做出相应响应。
  5. HTTP 状态码: 这些代码向客户端提供有关其请求如何被接收的信息。常见状态码包括:
    1. 200 OK: 用户请求的数据已成功发送到服务器。
    2. 201 Created: 服务器成功创建了一个资源。
    3. 400 Bad Request: 请求无效或服务器无法处理。
    4. 404 Not Found: 服务器找不到请求的资源。
  6. 标头: 请求和响应中的 HTTP 标头承载重要元数据。例如:
    1. Authorization: 包含客户端的身份验证凭据。
    2. Content-Type: 指示正在发送的资源的媒体类型,例如 application/json。
    3. Cache-Control: 为缓存机制提供指令。
  7. 超媒体: 在 RESTful API 的响应中,客户端可以通过点击超媒体链接来查找相关信息或可执行的操作。例如,在提供客户列表后,响应可能会提供获取特定客户信息、更新客户数据或删除客户的链接。“超媒体作为应用状态引擎”(Hypermedia As The Engine Of Application State),即 HATEOAS,是 RESTful 功能的一个术语。
  8. 无状态性: RESTful API 被设计为无状态的,这意味着客户端向服务器发出的每个请求都必须包含服务器理解和处理该请求所需的所有数据。为了确保每个请求都可以单独处理并简化服务器设计,服务器在请求之间不存储任何客户端会话数据。客户端必须维护会话状态。

REST API 与 RESTful API 之间的主要区别

Difference between REST API and RESTful API

REST API 和 RESTful API 之间存在一些关键区别。一些主要区别如下:

属性REST APIRESTful API
定义一套用于开发 Web 服务的原则或指南,这些服务通过 HTTP 请求执行 CRUD 操作。一个符合 REST 架构风格的所有原则并充分实现它的 Web 服务。
遵守 REST 原则它可能完全遵守 REST 原则,也可能不完全遵守。它严格遵循客户端-服务器架构、统一接口、无状态性和 REST 原则。
重点一个通用的术语,可用于表示使用 GET、POST、PUT 或 DELETE HTTP 方法的任何 API。一个专门用来强调完全实现 REST 架构的术语。
复杂度它可能不具备所有 REST 约束,但可能更简单。更复杂,因为需要严格遵守 REST 指南和标准。
状态性根据实现方式,它可以是有状态的或无状态的。无状态要求在请求之间不将在服务器上存储客户端上下文。
可缓存性可能实现缓存,也可能不实现。REST 约束之一,需要实现缓存。
统一接口它可能缺乏统一的接口。它要求所有客户端-服务器交互都使用相同的接口。
客户端-服务器架构在某些情况下,当 REST API 将客户端和服务器代码结合起来时,寻求资源的客户端与提供资源的服务器之间的区别可能会变得模糊。RESTful API 通过严格遵循客户端-服务器模型,确保了客户端和服务器的唯一分离。服务器处理逻辑和数据,而客户端管理用户界面和交互。
分层系统在某些实现中,REST API 可能直接连接到服务器,绕过代理或负载均衡器等中间服务器。负载均衡器、代理或网关等中间服务器可以在客户端和服务器之间作为中介,形成明确的分层架构,这是它的基础。
按需代码(可选)许多 REST API 已移除在客户端获取和执行代码的能力。RESTful API 可能提供代码的下载和客户端执行,尽管这是可选的。

结论

总之,用于开发 Web 应用程序的 API(无论是 RESTful 还是 Restful)都使用 HTTP Restful 服务来为用户提供对其功能和数据的访问。超媒体作为应用状态引擎的概念是这些服务的核心设计理念,其特点是 REST。换句话说,客户端可以通过使用 HTTP GET 方法以及 PUT、POST、DELETE 等常规 HTTP 方法来使用 RESTful API 访问资源。因此,Web 开发人员在使用第三方网站的 REST API 在他们的应用程序中访问数据时,无需编写任何代码。


下一个主题3G与4G技术区别