API 或应用程序编程接口提供允许不同应用程序之间交互和通信的功能和规则。这些接口有助于应用程序集成,使开发人员能够创建功能强大的数字产品。
API 通过请求和响应在应用程序之间进行调解。例如,通过用户现有的 Twitter 帐户在应用程序中注册是通过开发人员集成到应用程序中的 Twitter API 进行的。 API 使用各种协议和架构来发送请求和响应:
- XML-RPC — 允许网络之间的功能交换。 XML-RPC 使用 XML 来描述从客户端到服务器的信息传输的响应/请求和 HTTP 协议。
- JSON-RPC 是一种类似于 XML 的轻量级 RPC。这里协议是用 JSON 编码的;它允许使用异步响应接收对服务器的调用。
- SOAP — 一种简单的对象访问协议,用于在计算机网络中实现 Web 服务时交换结构化信息。 SOAP 使用 XML 在操作系统上进行身份验证、授权和进程通信。它允许客户端调用 Web 服务并接收响应,而不管平台和语言如何。
- REST API(代表性状态传输)——一种独立使用客户端-服务器实现的架构风格。 REST 使用 HTTP 协议进行通信。
在这篇文章中,我们专注于 REST API,对其进行定义,并分析它与其他 API 的不同之处。
定义 REST API
REST 是一种通过 HTTP 协议设计 API 的架构风格。它的主要优点是其极大的灵活性。
只要需要直接从服务器向 Web 应用程序或站点的用户提供数据,开发人员就会使用 REST API。 REST API 的主要组件:
- 客户 — 在用户端(在他的设备上)启动的客户端或程序启动通信。
- 服务器 — 使用 API 访问其功能和数据的服务器。
- 资源 — 服务器传输给客户端的任何内容(视频、文本、图片)。
REST API 的工作原理
REST API 通过 HTTP 请求进行通信,完成以下功能——创建、读取、更新和删除数据。它们也称为 CRUD 操作。 REST 提供有关请求资源的信息,并使用四种方法来描述如何处理资源:
POST — 创建资源;
GET——获取资源;
PUT — 更新资源;
DELETE — 删除资源。
资源
资源是 REST API 中的一个关键概念,一种信息抽象。它可以是任何信息:文档、图像、临时服务。
资源在任何给定时刻的状态称为资源表示,它由数据、描述数据的元数据和超媒体链接组成,以帮助客户进入下一个状态。
信息可以多种格式传送给客户端:JSON、HTML、XLT、Python 或纯文本。最流行和最常用的一种是 JSON,因为它是人类和机器可读的,并且与语言无关。
要访问资源,客户端需要发出请求。接收到它后,服务器将生成一个包含有关资源的编码数据的响应。
请求结构包括四个主要组件:HTTP 方法(我们前面提到的 CRUD)、端点、标头和正文。
HTTP 方法描述了应该对资源做什么。就在上面,我们提到了四种可用的方法:POST、GET、PUT、DELETE。
端点包含一个 URI — 统一资源标识符,它指示可以找到资源的方式和位置。 URL 或统一资源位置是最常见的 URI 类型,表示完整的 Web 地址。
标头包含与客户端和服务器相关的数据。标头包括身份验证数据:API 密钥、名称、属于安装服务器的计算机的 IP 地址,以及有关响应格式的信息。
正文用于向服务器发送附加信息,例如要添加的数据。
REST API 原则
REST 不依赖于任何特定的技术或平台。它与语言无关。它也没有具体说明如何构建 API。但它使用六个架构约束。通过遵循这些约束,可以将该接口称为有效的 REST API。它们描述了服务器如何处理请求并响应它们。
客户端服务器
REST API 实现了客户端-服务器架构风格。客户端正在发送资源请求,并且与数据存储无关。数据存储保留在服务器内部。服务器不参与与用户界面的通信。客户端和服务器相互依赖地发展。这个因素使 REST 更加灵活和可扩展。
统一的界面
统一的接口是区分 REST API 的重要因素。它指出有一种与服务器通信的方式,而不是暗示应用程序和设备的类型。
统一接口有四个原则:
- 资源识别。每个资源都必须有一个独立于资源状态的标识。 URL 充当标识符。
- 通过表示来操纵资源。资源表示(客户端拥有)包含删除或修改资源所需的数据。客户端发送服务器(JSON 对象)需要修改、删除或添加的表示。
- 自我描述的消息。此类消息具有供收件人理解的所有信息。在单独的文档或消息中不需要额外的信息。每条消息都有足够的信息供服务器解析请求。
- 超媒体作为应用程序状态的引擎。超媒体需要为每个响应使用链接,以便客户端可以找到其他资源。在 REST 中,超媒体用于所有交互。
无状态
这意味着服务器不包含有关客户端的任何数据。请求处理所需的所有信息都包含在请求中。客户端存储所有会话信息。
可缓存
每个响应都必须包含说明它是否可缓存以及响应可以缓存的时间段的信息。如果它是可缓存的,那么在类似的请求中,客户端可以使用相同的数据,而无需重复向服务器发送请求。它有助于提高性能和可用性。
分层系统
REST 实现了层层次结构,这对组件的行为产生了一定的限制。在分层系统中,组件只能看到位于最近级别的组件以及与之交互的组件。
按需编码
它是一项可选功能,允许客户端下载和执行代码。
REST API 有何不同?
REST API 的六大原则可以认为是该接口与其他类型的主要区别。此外,有几个参数可以区分 REST。
首先,REST 的本质决定了它与其他类型的不兼容。它是一种架构风格,其中架构代表了提供 RESTful Web 服务所需遵循的一组要求。例如,SOAP 和 RPC 是描述消息的消息传递协议。与仅指定消息必须满足的要求(约束)的架构风格不同。
结构
通常,API 遵循应用到应用的格式,而 REST 遵循不同的结构——客户端-服务器。客户端和服务器独立发展,工作更加灵活。
消息交换格式
API 通常使用特定的消息格式;例如,SOAP 使用 XML。 REST 不遵循如此严格的原则。它可以使用几乎任何格式来交换数据。然而,JSON 现在是最流行的一种。
JSON 的流行背后有明显的原因——它是人类可读的并且易于分析数据交换格式。 JSON 与语言无关,您可以将它与 JavaScript 之外的任何语言一起使用。
灵活性
REST 是一种灵活的架构风格,因此开发人员广泛使用它。与 SOAP(一种更复杂的协议,具有需要更多带宽的高级安全功能)相比,REST 包含简单的指南,允许开发人员以他们的格式使用这些要求。该架构提供了高性能,使其特别适用于下载速度很重要的移动设备。
正如我们所见,REST 与其他已知 API 相比具有某些优势。这就是为什么所有领先的公司,如 Twitter 和 Google 都在他们的产品中实施了它。毕竟,这是将数据传输给全球开发人员的理想且简单的方法,并且是一种经过验证的机制,可以为软件开发创建高效且可扩展的界面。