首页 web前端 js教程 了解 REST API - 不耐烦者指南

了解 REST API - 不耐烦者指南

Nov 11, 2024 am 01:17 AM

我的文章在这里交叉发布

REST(Re演示 State T传输)API 是现代 Web 开发的支柱。本文将详细介绍如何创建和使用现代 REST API、制作 API 时要考虑哪些设计决策以及作为 REST 基础的理论。

实用指南

本节深入探讨如何将 REST API 与 HTTP 结合使用,涵盖端点、方法、请求和响应。您将找到开始进行 API 调用和在项目中应用 REST 所需的一切。

如何构建 URI

一般来说,处理 URI 有两种主要方法:

  1. 作为动作
  2. 作为资源

考虑以下两个 URI:

  1. https://example.com/getUserData?id=1(操作)
  2. https://example.com/users/1(资源)

两个示例都显示我们检索 id 为 1 的用户的用户数据。区别在于,在第一个示例中,路由 /getUserData 正在执行操作,而在第二个示例中,路由 /users/1 是资产,它并不表明正在执行什么操作。我们可以说这种类型的 URI 充当名词(因为它是一个事物而不是一个动作,即动词)。

REST 模式要求我们严格使用 URI,如第二个示例。我们希望我们的 URI 是名词,这样我们就可以使用 HTTP 方法作为动词来对这些名词执行操作。例如,我们可以使用 HTTP 方法 GET 检索有关 /users/1 的信息,但我们可以使用 PUT 更新相应用户的信息,或使用 DELETE 完全删除用户。

关于 URI 需要注意的最后一件事是,与上面的示例一样,当引用单个资源(例如本例中的单个用户)时,URI 应以该资源的唯一标识符结尾。引用给定类别中的所有资源时,应省略唯一标识符。

  1. https://example.com/users/1 - 引用 id 为 1 的特定用户
  2. 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 指向 即可。元素的 src 属性如下

<zing-grid
  src="http://localhost:3000/users"
  editor-controls
></zing-grid>
登录后复制

Understanding REST APIs - A Guide for the Impatient

最后的想法

REST API 在网络上有多种形状和大小,每种都是为了满足特定需求而定制的。通过深思熟虑地构造 URI、选择正确的操作并牢记版本控制,您可以创建一个简单、灵活的 API,开发人员会乐于使用它。通过这些基本步骤,即使是快速原型也可以演变成健壮、可靠、经得起时间考验的 API。

以上是了解 REST API - 不耐烦者指南的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

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

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

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

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

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

JavaScript难以学习吗? JavaScript难以学习吗? Apr 03, 2025 am 12:20 AM

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

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

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

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

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

console.log输出结果差异:两次调用为何不同? console.log输出结果差异:两次调用为何不同? Apr 04, 2025 pm 05:12 PM

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

See all articles