了解 REST API - 不耐烦者指南
我的文章在这里交叉发布
REST(Re演示 State T传输)API 是现代 Web 开发的支柱。本文将详细介绍如何创建和使用现代 REST API、制作 API 时要考虑哪些设计决策以及作为 REST 基础的理论。
实用指南
本节深入探讨如何将 REST API 与 HTTP 结合使用,涵盖端点、方法、请求和响应。您将找到开始进行 API 调用和在项目中应用 REST 所需的一切。
如何构建 URI
一般来说,处理 URI 有两种主要方法:
- 作为动作
- 作为资源
考虑以下两个 URI:
- https://example.com/getUserData?id=1(操作)
- https://example.com/users/1(资源)
两个示例都显示我们检索 id 为 1 的用户的用户数据。区别在于,在第一个示例中,路由 /getUserData 正在执行操作,而在第二个示例中,路由 /users/1 是资产,它并不表明正在执行什么操作。我们可以说这种类型的 URI 充当名词(因为它是一个事物而不是一个动作,即动词)。
REST 模式要求我们严格使用 URI,如第二个示例。我们希望我们的 URI 是名词,这样我们就可以使用 HTTP 方法作为动词来对这些名词执行操作。例如,我们可以使用 HTTP 方法 GET 检索有关 /users/1 的信息,但我们可以使用 PUT 更新相应用户的信息,或使用 DELETE 完全删除用户。
关于 URI 需要注意的最后一件事是,与上面的示例一样,当引用单个资源(例如本例中的单个用户)时,URI 应以该资源的唯一标识符结尾。引用给定类别中的所有资源时,应省略唯一标识符。
- https://example.com/users/1 - 引用 id 为 1 的特定用户
- https://example.com/users - 引用所有用户,无论 id 为何
支持哪些行动
REST 支持 4 个主要操作,我们使用缩写 CRUD 来记住它们:Create、Read、U 更新,D删除。这些操作中的每一个都映射到一个我们可以用来执行该操作的 HTTP 方法。映射如下:
Action | HTTP Method |
---|---|
Create | POST |
Read | GET |
Update | PUT / PATCH |
Delete | DELETE |
支持的所有操作 URI 组合
每个 REST API 实际上只是(至少)5-6 个路由。在我们的示例中,基本端点将是 /users,我们将假装将其托管在 https://example.com 上。
-
获取 https://example.com/users
- Action:返回所有用户资产(每个资产为一个用户)
- 请求正文:空
- 响应正文:用户资产列表(作为 JSON 数组)
-
GET https://example.com/users/[id] ([id] 是一个变量)
- 操作:仅返回单个请求的用户资产
- 请求正文:空
- 响应正文:仅具有匹配ID的用户资产(作为JSON)
-
发布 https://example.com/users
- 操作:将一项用户资产添加到集合
- 请求正文:创建新用户资产所需的所有数据(不需要特定格式,建议使用JSON)
- 响应正文:插入唯一 ID (作为 JSON) 的新创建的资产
-
PUT https://example.com/users/[id] ([id] 是一个变量)
- 操作:用给定数据完全替换一个现有用户的数据
- 请求正文:替换现有用户数据所需的所有数据,无论是否已更改(减去 id - 不需要特定格式,推荐 JSON)
- 响应正文:具有匹配ID 的新更新资产(作为JSON)
-
(可选) PATCH https://example.com/users/[id] ([id] 是一个变量)
- 操作:用给定数据部分替换一个现有用户的数据
- Request Body:仅需要更新的数据(减去 id - 不需要特定格式,推荐 JSON)
- 响应正文:具有匹配ID 的新更新资产(作为JSON)
-
删除 https://example.com/users/[id] ([id] 是一个变量)
- 操作:仅从用户表中删除一条记录
- 请求正文:无
- 响应正文:无(仅 HTTP 响应代码)或刚刚删除的具有匹配 ID 的资产中的数据(作为 JSON)
设计考虑因素
除了定义端点是否使用 REST 模式之外,在开始构建端点之前还有很多事情需要考虑。您将来是否有可能想要更新您的端点?您的输出是否应该向用户提供有用的提示? REST 是否适合您的情况使用?让我们回答其中一些问题。
对您的端点进行版本控制
从一开始就开始考虑 API 的版本控制可能是个好主意,以便将来更容易进行更改。有几种不同的方法可以确定用户选择使用的 API 版本:
- URI 版本控制
- 版本号被合并到 URL 路径中,通常位于底部
- 示例:
- https://example.com/v1/users/1
- https://example.com/v2/users/1
- 查询参数
- 版本号作为查询参数附加在 API 端点
- 示例:
- https://example.com/users/1?apiVersion=1
- https://example.com/users/1?apiVersion=2
- 基于标题
- 版本号是一个特定且唯一的标头字段
- 示例(请求标头):
- x-api-版本:1
- x-api-版本:2
- 内容协商
- 版本是根据表征状态或媒体类型确定的。
- 在下面的示例中,服务器代码会知道firstName是第一个版本的名称,并且在下一个版本中它被更改为givenName。
- 示例(请求正文):
- { 名字: '亨利' }
- {给定名称:'亨利'}
模拟快速 REST API
有时,尝试一下是了解它们如何工作的最佳工具。我最喜欢的演示 REST 的库之一是 json-server。设置非常简单 - 只需几个步骤。
安装 JSON 服务器
npm install json-server
创建一个简单的数据存储
{ "users": [ { "id": "1", "username": "gorwell", "email": "gorwell@gmail.com" }, { "id": "2", "username": "cdickens", "email": "cdickens@gmail.com" }, { "id": "3", "username": "jausten", "email": "jausten@gmail.com" }, { "id": "4", "username": "vwoolf", "email": "vwoolf@gmail.com" }, { "id": "5", "username": "sking", "email": "sking@gmail.com" } ] }
启动服务器
npx json-server db.json
向本地服务器发出 HTTP 请求
curl -X GET http://localhost:3000/users/1
简单的 CRUD 数据网格
功能齐全的 REST 端点可以使用 ZingGrid 轻松连接到数据网格,只需将基本 REST URI 指向
<zing-grid src="http://localhost:3000/users" editor-controls ></zing-grid>
最后的想法
REST API 在网络上有多种形状和大小,每种都是为了满足特定需求而定制的。通过深思熟虑地构造 URI、选择正确的操作并牢记版本控制,您可以创建一个简单、灵活的 API,开发人员会乐于使用它。通过这些基本步骤,即使是快速原型也可以演变成健壮、可靠、经得起时间考验的 API。
以上是了解 REST API - 不耐烦者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

学习JavaScript不难,但有挑战。1)理解基础概念如变量、数据类型、函数等。2)掌握异步编程,通过事件循环实现。3)使用DOM操作和Promise处理异步请求。4)避免常见错误,使用调试技巧。5)优化性能,遵循最佳实践。

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

深入探讨console.log输出差异的根源本文将分析一段代码中console.log函数输出结果的差异,并解释其背后的原因。�...
