在WEB前端开发之时,我应该花些时间去关注后台,比如用nodejs搭建后台,去处理api的一些事宜,毕竟一转多长对于我们职业道路优势很大。今天我们来学习下“REST和RESTful API”,带您学会编写API。
在本教程系列中,我们将首先概述REST原理和概念。然后,我们将继续创建自己的完整API,该API在Node.js Express服务器上运行并连接到MySQL数据库。完成本系列后,您应该自信地构建自己的API或研究现有API的文档。
先决条件
为了充分利用本教程,你应该已经有了一些基本的命令行的知识,了解JavaScript的基本面,并有全球的装机量Node.js的。
什么是REST和RESTful API?
代表性状态转移(REST)描述了Web服务的体系结构样式。REST由一组用于在不同系统之间共享数据的标准或约束组成,实现REST的系统称为RESTful。REST是一个抽象概念,而不是语言,框架或软件类型。
REST的一个宽松的类比是保留黑胶唱片和使用流音乐服务的唱片。对于物理黑胶唱片,每条记录都必须完整复制以共享和分发副本。但是,通过流媒体服务,可以通过引用某些数据(例如歌曲标题)来永久共享相同的音乐。在这种情况下,流音乐是RESTful服务,而乙烯唱片收集是非RESTful服务。
一个API是编程接口,它是一个接口,允许软件程序能够与彼此通信的应用。一个REST的API只是一个API,它附着在原则和REST的约束。在Web API中,服务器通过URL端点接收 请求并返回响应,该响应通常是JSON等格式的数据。
REST原则
六个指导性约束定义了REST体系结构,概述如下。
统一接口:组件的接口必须相同。这意味着使用URI标准来标识资源,即可以输入到浏览器位置栏中的路径。
客户端服务器:存储和处理数据的服务器与请求和显示响应的客户端之间存在关注点分离。
无状态交互:有关每个请求的所有信息都包含在每个单独的请求中,并且不依赖于会话状态。
可缓存的:客户端和服务器可以缓存资源。
分层系统:客户端可以连接到最终服务器,也可以连接到中间层(例如负载平衡器)。
按需提供代码(可选):客户端可以下载代码,从而减少了外部可见性。
请求和回应
您已经熟悉以下事实:所有网站都有以http
(或https
安全版本)开头的URL 。超文本传输协议或HTTP是Internet上客户端与服务器之间进行通信的方法。
我们在浏览器的URL栏中最明显地看到了它,但是HTTP不仅可以用于从服务器请求网站,还可以用于其他用途。当您访问Web上的URL时,您实际上是GET
在对该特定资源进行请求,并且您看到的网站是响应的主体。我们将GET
很快处理其他类型的请求。
HTTP的工作方式是打开与服务器端口的TCP(传输控制协议)连接(80
for http
,443
for https
)以发出请求,侦听服务器以状态和正文进行响应。
请求必须包含URL,方法,标头信息和正文。
申请方法
有四种主要的HTTP方法,也称为HTTP动词,通常用于与Web API进行交互。这些方法定义将对任何给定资源执行的操作。
HTTP请求方法大致对应于CRUD的范例,它代表Create,Update,Read,Delete。尽管CRUD指的是数据库操作中使用的功能,但是我们可以将这些设计原理应用于RESTful API中的HTTP动词。
行动 | 申请方法 | 定义 |
---|---|---|
读 | GET | 检索资源 |
创造 | POST | 创建一个新资源 |
更新资料 | PUT | 更新现有资源 |
删除 | DELETE | 删除资源 |
GET
是一种安全的只读操作,不会更改服务器的状态。每次您在浏览器中点击URL时https://www.google.com
,您都GET
将向Google服务器发送请求。
POST
用于创建新资源。一个常见的示例POST
是在网站或应用上以用户身份注册。提交表单后,POST
带有用户数据的请求可能会发送到服务器,服务器将把该信息写入数据库。
PUT
更新现有资源,该资源可用于编辑现有用户的设置。与POST
,不同,PUT
是幂等的,意味着同一呼叫可以多次进行而不会产生不同的结果。例如,如果您POST
多次发送相同的请求以在数据库中创建一个新用户,则它将为您提出的每个请求创建一个具有相同数据的新用户。但是,PUT
对同一用户使用相同的请求将连续产生相同的结果。
DELETE
,顾名思义,只会删除现有资源。
响应码
一旦请求从客户端发送到服务器,服务器将发送回HTTP响应,该响应将包含有关响应的元数据(称为标头)以及正文。响应的第一个也是最重要的部分是状态码,它指示请求是否成功,是否存在错误或是否必须执行其他操作。
您将最熟悉的响应代码是404
,即Not Found
。404
是4xx
状态代码类的一部分,它指示客户端错误。有五类状态代码,每类包含一系列响应。
1xx
:信息2xx
:成功3xx
:重定向4xx
:客户端错误5xx
: 服务器错误
您可能熟悉的其他常见响应是 301 Moved Permanently
,用于将网站重定向到新的URL,以及 500 Internal Server Error
,这是错误消息,如果服务器上发生意外事件导致无法满足预期的请求,该错误就会经常发生。
关于RESTful API及其对应的HTTP动词,所有响应都应在2xx
范围内。
请求 | 响应 |
---|---|
GET | 200 (好) |
POST | 201 (已创建) |
PUT | 200 (好) |
DELETE | 200 (确定), 202 (接受)或 204 (无内容) |
200 OK
是指示请求成功的响应。发送GET
或PUT
请求时用作响应。POST
将返回201 Created
,表示已创建新资源,并且DELETE
有一些可接受的响应,表明该请求已被接受(202
),或者由于该资源不再存在而没有返回内容(204
)。
我们可以使用cURL测试资源请求的状态代码,cURL是用于通过URL传输数据的命令行工具。使用curl
,后跟-i
或--include
标志,将向GET
URL 发送请求并显示标题和正文。我们可以通过打开命令行程序并使用Google测试cURL来进行测试。
curl -i https://www.google.com
Google的服务器将响应以下内容。
HTTP/2 200 date: Tue, 14 Aug 2018 05:15:40 GMT expires: -1 cache-control: private, max-age=0 content-type: text/html; charset=ISO-8859-1 ...
如我们所见,curl
请求返回多个标头和响应的整个HTML正文。由于请求已成功通过,因此响应的第一部分是200
状态代码以及HTTP版本(HTTP / 1.1或HTTP / 2)。
由于此特定请求正在返回网站,因此返回的content-type
(MIME类型)为text/html
。在RESTful API中,您可能会看到application/json
指示响应为JSON。
有趣的是,通过输入略有不同的URL,我们可以看到另一种类型的响应。做一个curl
对谷歌没有www
。
curl -i https://google.com
HTTP/2 301 location: https://www.google.com/ content-type: text/html; charset=UTF-8
Google重定向google.com
到www.google.com
,并使用301
响应指示应重定向资源。
REST API端点
在服务器上创建API后,可以通过端点访问其中包含的数据。一个端点是可以接受和处理请求的URL GET
,POST
,PUT
,或DELETE
请求。
API URL将由root,路径和可选查询字符串组成。
root,例如
https://api.example.com
或https://api.example.com/v2
:API的root,可以由协议,域和版本组成。路径,例如
/users/
或/users/5
:特定资源的唯一位置。查询参数(可选),例如
?location=chicago&age=29
:用于排序,过滤和分页的可选键值对。
我们可以将它们放在一起以实现诸如下面的示例之类的示例,该示例将返回所有用户的列表,并使用查询参数oflimit
过滤响应以仅包含十个结果。
https://api.example.com/users?limit=10
通常,当人们将API称为RESTful API时,他们所指的是建立API URL端点的命名约定。标准RESTful API的一些重要约定如下:
路径应为复数形式:例如,要使用户获得id为
5
,我们可以使用/users/5
,而不是/user/5
。端点不应显示文件扩展名:尽管API很可能会返回JSON,但URL不应以结尾
.json
。端点应使用名词,而不是动词:REST URL中不应出现的词,例如
add
,delete
不应出现在REST URL中。为了添加新用户,您只需向发送POST
请求/users
,而不是/users/add
。应该开发API以处理对同一URL的多种类型的请求。路径区分大小写,并且应使用小写字母加连字符(而不是下划线)。
所有这些约定都是指南,因为没有严格的REST标准可遵循。但是,使用这些准则将使您的API一致,熟悉并且易于阅读和理解。
总结
在本文中,我们了解了什么是REST和RESTful API,HTTP请求方法和响应代码如何工作,API URL的结构以及常见的RESTful API约定。在下一个教程中,我们将通过使用Node.js设置Express服务器并构建我们自己的API,学习如何使用所有这些理论。
网友评论文明上网理性发言 已有0人参与
发表评论: