使用 Java 和 Spring Framework 构建 RESTful API — 第 1 部分
作者:互联网
如今,在所有环境中都有在线应用程序更受欢迎。这些应用程序旨在通过具有一系列例程和标准的接口来消费信息。我们将这些类型的应用程序命名为 API。
API 首字母缩略词来自应用程序编程接口。它是一组记录在案的标准和规则,以便应用程序 X 可以使用另一个应用程序 Y 功能,而无需知道应用程序 X 实现细节。
还令人困惑吗?为了更好地理解,让我们想象一家拥有电子商务网站的公司的一天。开发人员正在根据商店的动态开发解决方案,例如在内部创建、更新、删除产品以及在线向客户展示产品。这些资源可以在服务器端应用程序中开发,就像它是 API 一样。然后,电子商务网站和公司的其他应用程序可以使用此信息。
现在我们已经知道 API 是什么以及它可以在哪里使用,我们需要了解一切是如何工作的。下一节将介绍用于应用程序之间通信的协议以及如何表示数据。
API 中的 HTTP、REST 和数据表示形式
HTTP和REST是一回事吗?
Web 上的主要通信协议是 HTTP。它的工作方式类似于我们称为客户端-服务器的模型中的请求-响应协议。在我们的电子商务示例中,用于访问网站的浏览器将是客户端 - 服务器托管API的某些云服务中的计算机或虚拟机。客户端向服务器发送 HTTP 请求,服务器及其资源和内容向客户端返回响应消息。
Example of how the HTTP protocol worksThe HTTP protocol has been used since 1990, and your current version is described in this draft is the HTTP/3. Eight methods are defined that determine actions to be performed when requesting a resource from the server. Of these eight, the four most used are:
- GET: the method used to read and retrieve data. Request a representation of the specified resource and return that representation.
- POST: the method used to create a new resource and sends data to the server. The in the header indicates the type of the request body.
Content-Type
- PUT:创建新资源或用最新数据替换目标资源的表示形式。PUT和POST,区别在于它是幂等的。当重复调用一次或多次时,效果是相同的,而获得 POST 可能会产生额外的后果。例如,如果我们使用 POST 创建一个产品,如果 API 中定义的 URL 被调用 20 次,我们将创建 20 个项目,每个项目将具有不同的 ID。在 PUT 方法中,如果执行 API 中定义的 URL 的 20 倍,则结果必须相同:同一项更新 20 次。
- 删除:删除资源。
基于这些方法,服务器必须处理每个请求并返回相应的响应。响应格式可以是XML,JSON,YAML,文本等。此外,这些响应分为五组:
- 1XX — 一般信息
- 2XX — 成功
- 3XX — 重定向
- 4XX — 客户端错误
- 5XX — 服务器错误
但这不是休息吗?不,不是。REST是具象状态转移的首字母缩写,是对上述体系结构细节的抽象。它是一种软件架构风格,定义了创建 Web 服务的一系列限制。也就是说,它限制了其组件的交互方式。罗伊·菲尔丁(Roy Fielding)在90年代末和2000年代初的博士论文中介绍并解释了这个术语。
在论文中,Fielding定义了称为HTTP对象模型的REST原则。它开始用于设计HTTP 1.1和URI(统一资源标识符)标准。因此,我们可以说,在其语义中,REST使用HTTP方法。此外,还值得记住的是,REST服务必须是无状态的:每个请求都必须是自给自足的。也就是说,每个请求都是一个不同的独立请求。请求中一定无法保存信息的状态。
那么,休息意味着什么?如果我们保证实现遵循此 REST 架构,则 API 是 RESTful 的。从概念上讲,在 RESTful 中,数据和功能都被视为客户 URI 可访问的资源。这些 URI 通常是用于标识托管应用程序的服务器的 Web 地址。此外,它表示应用程序本身以及正在请求哪些资源。
这样,在 RESTful 中公开您的 API(或您的 API 服务,如果您愿意)意味着 REST 原则及其限制适用于您。把牌放在桌子上后,让我们弄脏我们的手!除了使用Java(版本11)和Spring框架作为API基础之外,我们还将用作工具:
- Apache Maven(用于依赖关系管理)
- 邮递员(用于执行一般的API测试和请求)
- JUnit5(用于单元测试和集成测试)
- 龙目岛(减少样板代码)
- Log4j(用于应用程序日志记录)
- TravisCI(用于持续集成)
本文中生成的所有代码(简化的 API 版本)都可以在此处访问: