×

初识REST和RESTful API并带您学会编写API

作者:Terry2020.06.27来源:Web前端之家浏览:6601评论:0

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体系结构,概述如下。

  1. 统一接口:组件的接口必须相同。这意味着使用URI标准来标识资源,即可以输入到浏览器位置栏中的路径。

  2. 客户端服务器:存储和处理数据的服务器与请求和显示响应的客户端之间存在关注点分离。

  3. 无状态交互:有关每个请求的所有信息都包含在每个单独的请求中,并且不依赖于会话状态。

  4. 可缓存的:客户端和服务器可以缓存资源。

  5. 分层系统:客户端可以连接到最终服务器,也可以连接到中间层(例如负载平衡器)。

  6. 按需提供代码(可选):客户端可以下载代码,从而减少了外部可见性。

请求和回应

您已经熟悉以下事实:所有网站都有以http(或https安全版本)开头的URL 。超文本传输协议或HTTP是Internet上客户端与服务器之间进行通信的方法。

我们在浏览器的URL栏中最明显地看到了它,但是HTTP不仅可以用于从服务器请求网站,还可以用于其他用途。当您访问Web上的URL时,您实际上是GET在对该特定资源进行请求,并且您看到的网站是响应的主体。我们将GET很快处理其他类型的请求。

HTTP的工作方式是打开与服务器端口的TCP(传输控制协议)连接(80for http443for 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 Found4044xx状态代码类的一部分,它指示客户端错误。有五类状态代码,每类包含一系列响应。

  • 1xx:信息

  • 2xx:成功

  • 3xx:重定向

  • 4xx:客户端错误

  • 5xx: 服务器错误

您可能熟悉的其他常见响应是  301 Moved Permanently,用于将网站重定向到新的URL,以及  500 Internal Server Error,这是错误消息,如果服务器上发生意外事件导致无法满足预期的请求,该错误就会经常发生。

关于RESTful API及其对应的HTTP动词,所有响应都应在2xx范围内。

请求响应
GET200 (好)
POST201 (已创建)
PUT200 (好)
DELETE200 (确定),  202 (接受)或  204 (无内容)

200 OK是指示请求成功的响应。发送GETPUT请求时用作响应。POST将返回201 Created,表示已创建新资源,并且DELETE有一些可接受的响应,表明该请求已被接受(202),或者由于该资源不再存在而没有返回内容(204)。

我们可以使用cURL测试资源请求的状态代码,cURL是用于通过URL传输数据的命令行工具。使用curl,后跟-i 或--include标志,将向GETURL 发送请求并显示标题和正文。我们可以通过打开命令行程序并使用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.comwww.google.com,并使用301响应指示应重定向资源。

REST API端点

在服务器上创建API后,可以通过端点访问其中包含的数据。一个端点是可以接受和处理请求的URL GETPOSTPUT,或DELETE请求。

API URL将由root,路径和可选查询字符串组成。

  • root,例如https://api.example.comhttps://api.example.com/v2:API的root,可以由协议,域和版本组成。

  • 路径,例如/users//users/5:特定资源的唯一位置。

  • 查询参数(可选),例如?location=chicago&age=29:用于排序,过滤和分页的可选键值对。
    我们可以将它们放在一起以实现诸如下面的示例之类的示例,该示例将返回所有用户的列表,并使用查询参数of limit过滤响应以仅包含十个结果。

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中不应出现的词,例如adddelete不应出现在REST URL中。为了添加新用户,您只需向发送POST请求/users,而不是/users/add。应该开发API以处理对同一URL的多种类型的请求。

  • 路径区分大小写,并且应使用小写字母加连字符(而不是下划线)。

所有这些约定都是指南,因为没有严格的REST标准可遵循。但是,使用这些准则将使您的API一致,熟悉并且易于阅读和理解。

总结

在本文中,我们了解了什么是REST和RESTful API,HTTP请求方法和响应代码如何工作,API URL的结构以及常见的RESTful API约定。在下一个教程中,我们将通过使用Node.js设置Express服务器并构建我们自己的API,学习如何使用所有这些理论。

您的支持是我们创作的动力!
温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://jiangweishan.com/article/js20200627a3.html

网友评论文明上网理性发言 已有0人参与

发表评论: