本文是RESTful Web服务的简介,以及REST和HTTP的概述。
她开始撰写有关开发REST API的一系列文章:
- REST API简介-RESTful Web服务
- REST和SOAP之间的区别
- REST API开发-什么是“合同优先”(合同优先)?
- REST API开发-什么是“代码优先”(代码优先)?
- REST API-什么是HATEOAS?
- REST API建议-Java和Spring中的Web服务设计示例

REST代表代表状态转移(维基百科:“转移描述状态”)。 这是在现代世界中创建API的流行架构方法。
您将学到:
- 什么是REST?
- REST API是基于什么的?
- 创建REST API时如何使用HTTP?
- 什么是资源?
- 您如何定义REST API资源?
- 开发REST API的最佳实践是什么?
什么是REST?
REST代表代表性状态转移。 这个术语最初由Roy Fielding创造,他也是HTTP协议的创建者之一。 REST服务的一个独特功能是它们充分利用HTTP协议。 现在让我们快速看一下HTTP。
HTTP概述
首先打开浏览器,然后转到网页:

然后单击结果页面之一:

接下来,我们可以单击页面所在的链接:

并转到另一页:

这就是我们通常浏览网络的方式。
当我们浏览Internet时,很多事情在幕后发生。 以下是浏览器与它们所访问的网站上运行的服务器之间发生的情况的简化视图:

HTTP协议
在浏览器中输入URL时,例如
www.google.com ,对服务器的请求将发送到该URL所指定的服务器。 然后,该服务器形成并发布答案。 这些请求和响应的格式很重要。 这些格式由
HTTP协议
超文本传输协议定义 。
在浏览器中键入URL时,它会将GET请求发送到指定的服务器。 然后,服务器以包含
HTML数据的HTTP响应
(超文本标记语言)进行响应。 然后,浏览器将接收此HTML代码并将其显示在屏幕上。
假设您在网页上填写一个包含元素列表的表单。 在这种情况下,当您单击
Submit按钮时,HTTP
POST请求将发送到服务器。
HTTP和RESTful Web服务
HTTP提供了用于创建Web服务的基本层。 因此,了解HTTP很重要。 这里是一些关键的抽象。
资源资源
资源是HTTP协议集中的关键抽象。 您想通过应用程序向外界展示的就是资源。 例如,如果我们编写一个任务管理应用程序,则资源实例将如下所示:
资源URI
开发RESTful服务时,您应该专注于应用程序资源。 我们识别要提供的资源的方法是为其分配URI,即通用资源标识符。 例如:
- 创建用户: POST /用户
- 删除用户: DELETE /个用户/ 1
- 获取所有用户: GET /用户
- 获取一个用户: GET / users / 1
REST和资源
需要注意的重要一点是,使用REST,您需要在资源方面考虑应用程序:
确定您想向外界开放哪些资源。
使用HTTP协议已定义的动词对这些资源执行操作。
REST服务通常是这样实现的:
- 数据交换格式 :没有限制。 JSON是一种非常流行的格式,尽管可以使用XML等其他格式。
- 传输 :始终为HTTP。 REST完全基于HTTP。
- 服务定义 :没有为此的标准,并且REST是灵活的。 在某些情况下,这可能是一个缺点,因为使用中的应用程序可能需要了解请求和响应格式。 但是,诸如WADL(Web应用程序定义语言)和Swagger之类的Web应用程序定义语言被广泛使用。
REST专注于资源以及您使用HTTP对资源执行操作的效率。
HTTP组件
HTTP定义了以下请求结构:
- 请求行 ( request line )-定义消息的类型
- 请求标头( 标头字段 )-表征消息正文,传输参数和其他信息
- 邮件正文 ( 正文 )-可选
HTTP为响应消息定义以下结构:
- 状态行,包括状态代码和原因消息
- 响应头字段
- 邮件的附加正文( 正文 )
HTTP请求方法
HTTP请求中使用的方法指示您要对此请求执行的操作。 重要示例:
- GET :获取详细的资源信息
- POST :创建新资源
- PUT :更新现有资源
- 删除 :删除资源
HTTP响应状态码
状态代码始终存在于HTTP响应中。 典型示例:
关于这个问题,有一个作者的
视频 。
总结
本文提供了REST体系结构样式的顶级概述。 强调了HTTP是REST服务的主要构建块这一事实。 HTTP是用于确定浏览器请求和响应的结构的协议。 我们已经看到HTTP主要处理Web服务器上可用的资源。 使用URI标识资源,并使用HTTP协议定义的动词执行对这些资源的操作。
最后,我们研究了REST服务如何充分利用HTTP提供的功能来向外界提供资源。 REST不会对资源的表示格式或服务的定义施加任何限制。
补充阅读
RESTful体系结构的基础开发REST API