什么是 RESTful API?
RESTful API 是两个计算机系统用于通过互联网安全地交换信息的接口。大多数业务应用程序必须与其他内部和第三方应用程序进行通信才能执行各种任务。例如,为了生成月度工资单,您的内部账户系统必须与客户的银行系统共享数据才能自动开具发票并与内部工时单应用程序进行通信。RESTful API 支持此类信息交换,因为它们遵循安全、可靠和高效的软件通信标准。
什么是 API?
应用程序编程接口(API)定义您与其他软件系统进行通信必须遵循的规则。开发人员公开或创建 API,以便他们的应用程序可以以编程方式与其他应用程序进行通信。例如,工时单应用程序公开一个要求提供员工全名和日期范围的 API。当其收到此信息时,其会对员工的工时单进行内部处理,并返回该日期范围内的工作小时数。
您可以将 Web API 想象为客户端和 Web 上资源之间的大门。
客户端
客户端是要访问 Web 上信息的用户。客户端可以是使用 API 的个人或软件系统。例如,开发人员可以编写从天气系统访问天气数据的程序。或者,您可以在浏览器上直接访问天气网站访问相同的数据。
资源
资源是不同的应用程序向其客户端提供的信息。资源可以是图像、视频、文本、数字或任何类型的数据。向客户端提供资源的设备也称为服务器。企业使用 API 分享资源,既能提供 Web 服务,还能确保安全、可控,身份验证。此外,API 帮助企业确定哪些客户端可以访问特定的内部资源。
什么是 REST?
表征状态传输 (REST) 是一种软件架构,决定了 API 的工作条件。REST 最初作为管理复杂网络(例如互联网)上的通信的指南而建立。您可以使用基于 REST 的架构为高性能和可靠的大规模通信提供支持。您可以轻松应用和修改此种架构,为任何 API 系统带来可见性和跨平台可能性。
API 开发人员可以使用多种不同的架构设计 API。遵循 REST 架构风格的 API 称为 REST API。实施 REST 架构的 Web 服务称为 RESTful Web 服务。术语 RESTful API 通常指 RESTful Web API。但是,术语 REST API 和 RESTful API 可以互换使用。
以下是 REST 架构风格的一些原则:
统一接口
统一接口是一切 RESTful Web 服务设计的基础。其表示服务器以标准格式传输信息。格式化的资源在 REST 中称为表征。此格式可以与服务器应用程序上资源的内部表征不同。例如,服务器可以将数据存储为文本,但以 HTML 表征格式发送该数据。
统一接口强制实施四个架构约束:
- 请求应确定资源。它们通过使用统一的资源标识符实现此功能。
- 客户端包含资源表征中的足够信息以修改或删除资源(如需要)。服务器通过发送进一步描述资源的元数据以符合这一条件。
- 客户端接收有关如何进一步处理表征的信息。服务器通过发送自描述信息实现此功能,该信息包含了有关客户端如何以最佳方式使用这些信息的元数据。
- 客户端接收有关其完成任务需要的所有其他相关资源的信息。服务器通过在表征中发送超链接实现此功能,以便客户端可以动态发现更多资源。
无状态
在 REST 架构中,无状态指一种服务器独立于所有之前的请求完成每个客户端请求的通信方法。客户端可以以任意顺序请求资源,每个请求为无状态或与独立于其他请求。此 REST API 设计约束意味着服务器每次可以完全识别和满足请求。
层次化系统
在层次化系统架构中,客户端可以连接到客户端和服务器之间的其他授权中间方,其仍将接收来自服务器的响应。服务器也可以将请求传递到其他服务器。您可以将 RESTful Web 服务设计为在包含多个层级(例如安全、应用程序和业务逻辑)的数个服务器上运行,从而共同满足客户端请求。这些层级对客户端仍不可见。
高速缓存能力
RESTful Web 服务支持缓存,缓存是指将一些响应存储在客户端或中间方上以提高服务器响应时间的流程。例如,假设您访问某个网站,该网站的每个页面都包含通用的页眉和页脚图像。每次您访问新的网站页面时,服务器必须重新发送相同的图像。为了避免出现这种情况,客户端在首次响应后会缓存或存储这些图像,之后直接使用缓存中的图像。RESTful Web 服务通过使用自行定义为可缓存或不可缓存的 API 响应来控制缓存。
按需编码
在 REST 架构风格中,服务器可以通过将软件编程代码传输到客户端暂时扩展或自定义客户端功能。例如,当您在任何网站上填写注册表单时,浏览器会立即高亮您填写内容的任何错误,例如不正确的电话号码。正是由于服务器发送的代码,浏览器才可以实现这个功能。
RESTful API 有哪些优势?
RESTful API 有以下优势:
可扩展性
采用了 REST API 的系统可以高效扩展,因为 REST 优化了客户端-服务器交互。无状态可减轻服务器负载,因为服务器不必保留过去的客户端请求信息。管理良好的缓存可部分或完全消除某些客户端-服务器交互。所有这些功能都支持可扩展性,并且不会导致通信瓶颈进而降低性能。
灵活性
RESTful Web 服务支持客户端-服务器完全分离。该服务简化并分离了多种服务器组件,以便可以独立改进每个部分。平台或技术在服务器应用程序端更改,不会影响客户端应用程序。分层应用程序功能可进一步提升灵活性。例如,开发人员可以更改数据库层,而无需重新编写应用程序逻辑。
独立性
REST API 与所使用的技术相互独立。您可以在不影响 API 设计的情况下以多种编程语言编写客户端和服务器应用程序。您也可以在不影响通信的情况下更改任何一端的基础技术。
RESTful API 如何工作?
RESTful API 的基本功能与浏览互联网一样。客户端在请求资源时使用 API 与服务器建立联系。API 开发人员在服务器应用程序 API 文档中说明了客户端应如何使用 REST API。以下是调用任何 REST API 的通用步骤:
- 客户端向服务器发送请求。客户端遵循 API 文档以服务器可识别的方式设置请求格式。
- 服务器对客户端进行身份验证,并确认客户端有权发送该请求。
- 服务器接收请求并对其进行内部处理。
- 服务器向客户端返回响应。响应包含通知客户端请求是否成功的信息。响应也包括客户端请求的任何信息。
REST API 请求和响应详细信息略有不同,具体取决于 API 开发人员如何设计 API。
RESTful API 客户端请求包含哪些内容?
RESTful API 要求请求包含以下主要组件:
唯一的资源标识符
服务器通过唯一的资源标识符识别每个资源。对于 REST 服务,服务器通常使用统一资源定位符 (URL) 执行资源识别。URL 指定资源的路径。URL 类似于您访问任何网页时在浏览器中输入的网站地址。URL 也称为请求端点,并向服务器清晰指明客户端请求的内容。
方法
开发人员通常使用超文本传输协议 (HTTP) 实施 RESTful API。HTTP 方法通知服务器需要对资源执行什么操作。以下为四种常见的 HTTP 方法:
GET
客户端使用 GET 访问位于服务器上指定 URL 上的资源。它们可以缓存 GET 请求,并在 RESTful API 请求中发送参数以指示服务器在发送之前筛选数据。
POST
客户端使用 POST 向服务器发送数据。它们将数据表征包含到了请求中。多次发送相同的 POST 请求会造成多次创建相同资源的不良影响。
PUT
客户端使用 PUT 更新服务器上的现有资源。与 POST 不同,在 RESTful Web 服务中多次发送相同的 PUT 请求具有相同的效果。
DELETE
客户端使用 DELETE 请求删除资源。DELETE 请求可以更改服务器状态。但是,如果用户没有合适的身份验证,则请求失败。
HTTP 头
请求头是客户端和服务器之间交换的元数据。例如,请求头表示请求和响应的格式,提供有关请求状态的信息等等。
数据
REST API 请求可能包含 POST、PUT 和其他 HTTP 方法成功运行所需的数据。
参数
RESTful API 请求可以包含参数,这些参数向服务器提供更多有关需采取行动的详细信息。以下为一些不同类型的参数:
- 指定 URL 详细信息的路径参数。
- 请求有关资源的更多信息的查询参数。
- 对客户端进行快速身份验证的 Cookie 参数。
什么是 RESTful API 身份验证方法?
RESTful Web 服务必须首先对请求进行身份验证,然后才能发送响应。身份验证是指验证身份的流程。例如,您可以出示身份证或驾驶证证明您的身份。同理,RESTful 服务客户端必须向服务器证明其身份才能确立信任。
RESTful API 包含四种常见身份验证方法:
HTTP 身份验证
HTTP 定义您实施 REST API 时可直接使用的一些身份验证方案。以下为这些方案的其中两种:
基本身份验证
在基本身份验证中,客户端在请求头中发送用户名和密码。其使用 base64 编码,该编码技术将对组转化为一套 64 个字符进行安全传输。
不记名身份验证
术语不记名身份验证指向不记名令牌授予访问控制的流程。不记名令牌通常是服务器在响应登录请求时生成的加密字符串。客户端在请求头中发送令牌以访问资源。
API 密钥
API 密钥是 REST API 身份验证的另一个选项。在此方案中,服务器向首次通信的客户端分配生成的唯一值。无论客户端何时尝试访问资源,其使用唯一的 API 密钥进行验证。API 密钥的安全性较低,因为客户端必须传输密钥,其易受网络盗窃的攻击。
OAuth
OAuth 结合密码和令牌实现对任何系统的高度安全登录访问。服务器首先请求密码,然后再额外请求令牌以完成授权流程。其可以随时查看令牌,也可以在特定范围和长度的一段时间内查看令牌。
RESTful API 服务器响应包含哪些内容?
REST 原则要求服务器响应包含以下主要组件:
状态行
状态行包含三位数字状态代码表示请求成功或请求出现故障。例如,2XX 代码表示成功,但 4XX 和 5XX 代码表示错误。3XX 代码表示 URL 重定向。
以下为一些常见的状态代码:
- 200:通用成功响应
- 201:POST 方法成功响应
- 400:服务器无法处理的不正确请求
- 404:未找到资源
信息正文
响应正文包含资源表征。服务器根据请求头包含的内容选择合适的表征格式。客户端可以以 XML 或 JSON 格式请求信息,这些格式定义如何以纯文本方式编写数据。例如,如果客户端请求名为 John 的人员的姓名和年龄,则服务器返回如下 JSON 表征:
'{"name":"John", "age":30}'
头
响应也包含有关响应的头或元数据。它们提供有关响应的更多背景内容,包含服务器、编码、日期和内容类型等信息。
AWS 如何帮助您进行 RESTful API 管理?
Amazon API Gateway 是一项完全托管式服务,可以帮助开发人员轻松创建、发布、维护、监控和保护任意规模的 API。使用 API Gateway,您可以创建 RESTful API,以便实现实时双向通信应用程序:
使用 API Gateway,您可以:
- 为用户提供适用于 API 请求和响应的高速性能。
- 使用 AWS Identity and Access Management (IAM) 和 Amazon.Cognito(两者都提供原生 OAuth 支持)授予对 API 的访问权限。
- 使用 API Gateway 同时运行同一 API 的多个版本,从而快速迭代、测试和发布新版本。
- 从 API Gateway 监控性能指标和有关 API 调用、数据延迟和错误率的信息。