Coursera 笔记

Module 03 · Express Web Application FrameworkExpress Web 应用框架

HTTP Methods and REST APIsHTTP 方法与 REST API

Coursera ↗

预计所需时间:30 分钟

目标

阅读本文档后,您应该能够:

  • 定义与HTTP方法相关的术语
  • 解释编写REST APIs的指南和最佳实践

互联网依赖于客户端-服务器架构。最终用户与客户端进行交互,而服务器则存储操作应用程序、业务逻辑和数据的服务1。客户端与服务器进行通信,以实现最终用户所需的功能。数据通过超文本传输协议进行客户端和服务器之间的传输,更常见的称为HTTP2。这种通信通常通过API3进行。在2000年,开发了一套用于为客户端-服务器架构编写这些API的指南,称为REST4 API。

“REST”的缩写代表表述性状态转移。在更详细地解释这个术语之前,让我们先讨论HTTP方法和一些术语。

在客户端/服务器架构中,应用程序由一个或多个驻留在服务器上的服务组成。这些服务包含资源5。客户端通过使用具有服务内端点9的路由8的请求对象7向资源发出请求6。应用程序向客户端发送响应对象10,以响应11该请求。

请求对象包含三个部分:URL12、请求头13和请求体14。服务器使用URL来识别被操作的服务及其内的端点。URL包含四个部分:协议15、主机名16、路径17和查询字符串18。请求头包含有关请求客户端资源的元数据,例如用户代理19、主机20、内容类型21、内容长度22以及客户端在响应中应期待的数据类型。

服务器以包含头部23、主体24和状态码25的响应对象进行响应。响应对象的主体通常包含一个JSON26 有效负载27,以将数据返回给客户端。

在REST API中,可以使用多种HTTP方法来允许客户端与服务之间的交互。最常用的方法是GET28、POST29、PUT30、DELETE31和PATCH32。

方法的名称描述了当应用该方法时资源会发生什么。如果多次调用相同的API方法,PUT和DELETE方法将产生幂等33的数据。

HTTP有三种传递参数的方式:URL路径参数34、URL查询参数35和头部参数36。路径和查询参数作为URL的一部分传递,而头部参数则由浏览器直接传递给服务。

当服务完成请求时,它会返回响应。HTTP状态码应成为该响应的一部分。HTTP状态码指示响应是否已完成。响应代码类别如下表所示。

状态码范围 含义
200-299 一切正常
300-399 资源已移动
400-499 客户端错误
500-599 服务器错误

如前所述,REST是一组指南。要使API被视为RESTful,必须满足五个要求,以及一个可选标准:

  1. API利用由通过HTTP管理和交付的资源组成的客户端-服务器架构。
  2. 客户端与服务器之间的通信是无状态37的。
  3. 数据是可缓存38的,以提高客户端的性能。
  4. 接口以标准格式传输,以便存储在服务器上的请求资源与发送给客户端的表示分开。发送给客户端的表示包含足够的数据,以便客户端可以操作该表示。
  5. 请求和响应通过不同的层进行通信,例如中间件39。客户端和服务器通常不会直接相互通信。
  6. (可选)资源通常是静态的,但也可以包含可执行代码。代码应仅在客户端请求时执行。

当客户端发出请求时,它还必须将其状态信息传递给服务器。客户端与服务器之间的每次通信都应包含执行请求所需的所有信息。客户端而不是服务维护状态。每个请求必须包含必要的信息,以便服务器理解请求。因此,例如,如果用户正在查看数据库记录并且该记录需要更新,客户端还必须发送需要更新的记录。服务器不知道当前正在查看哪条记录。

在定义RESTful服务时使用@app.route()方法。该方法接受两个参数:从URL到被操作服务的路由,以及一个可选的HTTP方法参数,例如POST、GET等。路由参数可以包括变量,例如<username>。路由的根由/表示。例如,如果您希望路由为www.mywebsite.com/accounts,则只需在@app.route()函数中指定/accounts作为路由参数。

REST API具有以下特征:

  • 基于资源;也就是说,它们描述一组资源
  • 仅包含名词,而不包含动词
  • 当提到单个资源时使用单数名词,提到资源集合时使用复数名词
  • 始终通过URL进行标识

URL格式指南

  • 应使用斜杠/表示目录结构中的层次关系
  • 应避免使用尾随斜杠,例如/resource/
  • 应使用连字符,而不是驼峰式,例如/my-resource,而不是/myResource
  • 应不在URL中使用下划线_,例如/my-resource,而不是/my_resource
  • 应使用小写字母
  • 应不在URL中使用句点.
  • URL中可以包含多个从属资源和ID,例如GET /resource/{id}/subordinate/{id}

术语和定义

术语 描述
1.服务 构成应用程序一部分的软件组件,具有特定目的。通常,服务从客户端或其他服务获取输入并生成输出。
2.HTTP 互联网中用于获取或交换资源数据的客户端-服务器架构所使用的协议。
3.API 应用程序编程接口是一组定义和协议,允许两个服务相互通信。API请求可以在资源之间交换的数据和从该资源返回的结果。
4.REST 一组架构指南,描述如何编写两个组件之间的接口(API),通常是客户端和服务器,描述这些组件如何相互通信。REST代表表现层状态转移。REST描述了一种标准方式来识别和操作资源。REST确保客户端和服务器之间传递的消息是自描述的,并定义客户端如何与服务器交互以访问服务器上的资源。
5.资源 资源是RESTful API的基本概念。它是具有定义类型、相关数据、与其他资源关系以及可以对其操作的一组方法的对象。资源通常以JSON格式定义,但也可以是XML。
6.请求 客户端向服务器上的主机发出的请求,以访问资源。客户端使用URL的一部分来确定从资源中所需的信息。最常见的请求方法包括GET、POST、PUT、PATCH和DELETE,还包括HEAD、CONNECT、OPTIONS、TRACE和PATCH。
7.请求对象 包含HTTP请求数据。它包含三个部分:URL、头部和主体。
8.路由 HTTP方法与从路径根部到资源的路径的组合。
9.端点 由REST API指定的在服务器上访问的资源位置。通常通过API的HTTP方法中的URL来识别。
10.响应对象 包含对请求的HTTP响应数据。它包含头部、主体和状态。
11.响应 由服务器发出并发送给客户端,以提供客户端请求的资源,告知客户端请求的操作已完成,或让客户端知道处理请求时出现错误。
12.URL “统一资源标识符”与URL一词可以互换使用。它们是RESTful API的一部分,用于定位请求资源的端点,并包含关于如何操作该端点的数据。客户端使用URI/URL发出HTTP请求以操作资源。它们应由四个部分组成:主机名、路径、头部和查询字符串。
13.请求头 传递给服务器关于检索到的资源或请求客户端的信息。示例包括:
• 方法与端点:POST /car-reviews
• 用户代理:客户端使用的浏览器类型。
• 主机:网络上与其他主机通信的计算机。
• 内容类型:资源的媒体类型,如文本、音频或图像。
• 内容长度:响应中发送的数据字节数。
• 接受编码:预期返回的数据格式,例如application/json
• 连接信息
14.请求主体 提供传递给服务器的数据。
15.协议 告诉服务数据如何在服务器和客户端之间传输。
16.主机名 网络上设备的名称,通常也称为站点名称。
17.路径 路径标识服务中资源的位置及其端点。例如:https://www.customerservice/customers/{customer_id}
18.查询字符串 URL中包含查询的部分。
19.用户代理 客户端使用的浏览器类型。
20.主机 网络上与其他主机通信的计算机。
21.内容类型 资源的媒体类型,如文本、音频或图像。
22.内容长度 响应中发送的数据字节数。
23.响应头 包含关于响应的元数据,如时间戳、缓存控制、安全信息、内容类型和响应主体中的字节数。
24.响应主体 请求的资源的数据被发送回客户端。
25.响应状态 返回代码,向客户端传达请求的状态结果。
26.JSON “JavaScript对象表示法”是一种存储和传输数据的格式,通常用于将数据从服务器上的服务发送到客户端。它由键值对组成,并且是自描述的。JSON数据的格式与创建JavaScript对象的代码相同,使得将这些数据转换为JavaScript对象变得容易,但可以用任何编程语言编写。JSON有三种数据类型:标量(数字、字符串、布尔值、null)、数组和对象。
27.有效负载 有效负载是由于API请求而从服务器传输到客户端的响应主体中的数据。
28.GET GET方法用于检索资源的表示。GET()不应修改资源,仅返回请求资源的表示。
29.POST 将数据发送到服务器以创建资源的HTTP方法,应返回201_CREATED状态码。
30.PUT 更新资源或替换现有资源的HTTP方法。连续多次调用PUT不会产生副作用,而POST会。如果资源存在并可以更新,应返回200_OK代码;如果资源不存在,应返回404_NOT_FOUND代码。
31.DELETE 删除资源的HTTP方法,如果资源存在并可以被服务器删除,则返回204_NO_CONTENT;如果资源无法找到,意味着它已被删除。
32.PATCH 对资源应用部分修改的HTTP方法。
33.幂等 描述在进行多次相同请求时保持不变的集合元素。如果多次调用相同的API方法,PUT和DELETE方法会产生幂等数据。
34.URL路径参数 作为URL路径中的变量由客户端传递给操作。
35.URL查询参数 包含键值对,通常以JSON格式表示,并通过'?'与路径分隔。如果有多个键值对,应通过'&'分隔。查询可用于传递要应用于操作返回结果的过滤器。
36.头部参数 包含关于查询的附加元数据,例如识别调用操作的客户端。
37.无状态 客户端向服务器请求资源的所有请求都是相互隔离的。服务器对客户端的应用状态一无所知,因此需要在每个请求中传递该信息。
38.可缓存 在客户端存储数据的能力,以便在未来的请求中使用该数据。
39.中间件 位于应用程序、数据库或服务之间的软件,允许这些不同技术进行通信。