当前位置:首页 > 技术分析 > 正文内容

REST:API 设计的最佳实践

ruisui883周前 (04-08)技术分析11

设计良好的 API 是构建高效、可扩展且易于使用系统的关键。无论是构建微服务、移动应用后端,还是公共 API,遵循 REST 原则和行业最佳实践都能帮助您避免常见陷阱。本文将探讨 RESTful API 设计中的核心实践。


1.使用合适的 HTTP 方法

REST 的核心原则之一是正确使用 HTTP 方法(动词)来定义操作:

  • GET:检索资源(例如:GET /users 获取用户列表)。
  • POST:创建新资源(例如:POST /users 创建用户)。
  • PUT:替换整个资源(例如:PUT /users/123 更新用户 123 的所有字段)。
  • PATCH:部分更新资源(例如:PATCH /users/123 仅修改用户 123 的某些字段)。
  • DELETE:删除资源(例如:DELETE /users/123 删除用户 123)。

避免将动作(如 /users/123/activate)硬编码到 URL 中,而应通过 HTTP 方法表达意图。


2.设计清晰的资源命名

  • 使用名词而非动词:资源是实体(如 users、orders),而非动作。
  • 正确:GET /users/123
  • 错误:GET /getUser?id=123
  • 保持 URL 层次化:反映资源关系。
  • 例如:GET /users/123/orders 获取用户 123 的所有订单。
  • 使用小写和连字符(kebab-case):提高可读性。
  • 正确:/product-categories
  • 避免:/productCategories 或 /product_categories

3.版本控制

API 变更是不可避免的,版本控制能防止破坏现有客户端:

  • URL 路径:/api/v1/users
  • HTTP 头:通过 Accept 头指定版本(如 Accept: application/vnd.myapi.v1+json)。
  • 约定:无论选择哪种方式,确保一致性并明确记录。

4.过滤、分页与排序

避免返回海量数据,支持客户端按需获取:

  • 过滤:GET /users?role=admin
  • 分页:GET /users?page=2&limit=50
  • 排序:GET /users?sort=-created_at,username(按创建时间降序,用户名升序)

5.响应标准化

  • 结构化响应:使用 JSON 并包含状态码、数据或错误信息。
  • json
  • Copy
  • {"status": 200,"data": { "id": 123, "name": "John" },"error": null}
  • HTTP 状态码:合理使用标准状态码(如 200 OK、201 Created、400 Bad Request、404 Not Found)。
  • 错误处理:提供明确的错误消息和文档链接。
  • json
  • Copy
  • {"error": {"code": "invalid_email","message": "Email format is invalid.","documentation": "https://api.example.com/docs/errors#invalid_email"}}

6.支持 HATEOAS

HATEOAS(超媒体作为应用状态引擎)允许 API 通过响应中的链接引导客户端:

json

Copy

{"id": 123,"name": "John","_links": {"self": { "href": "/users/123" },"orders": { "href": "/users/123/orders" }}}

这使客户端能动态发现可用操作,减少硬编码依赖。


7.安全性

  • HTTPS:始终使用 HTTPS 加密通信。
  • 认证与授权:采用 OAuth 2.0、JWT 等标准协议。
  • 速率限制:防止滥用(如通过 X-RateLimit-Limit 和 X-RateLimit-Remaining 头)。

8.缓存优化

  • 利用 HTTP 缓存头:如 Cache-Control、ETag 和 Last-Modified。
  • 条件请求:通过 If-Modified-Since 或 If-None-Match 减少不必要的数据传输。

9.文档与开发者体验

  • 提供交互式文档:使用 OpenAPI (Swagger) 或 Postman 生成文档。
  • 代码示例:包含常见语言的请求示例(如 cURL、Python、JavaScript)。
  • 沙箱环境:允许开发者在不影响生产环境的情况下测试 API。

10.保持向后兼容

  • 避免破坏性变更:新增字段通常安全,但移除或重命名字段需谨慎。
  • 弃用策略:通过头信息或文档提前通知旧版本的淘汰计划。

总结

遵循 REST 最佳实践不仅能提升 API 的可维护性和扩展性,还能改善开发者体验。始终从客户端角度思考,确保 API 直观、一致且高效。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3345.html

标签: kebab-case
分享给朋友:

“REST:API 设计的最佳实践” 的相关文章

手把手教你Vue之父子组件间通信实践讲解【props、$ref 、$emit】

组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。那么组件间如何通信,也就成为了vue中重点知识了。这篇文章将会通过props、$ref和 $emit 这几个知识点,来讲解如何实现父子组件间通信。转载链接:https://www.jia...

vue组件间的九种通信方式

前言Vue组件实例间的作用域是相互独立的,而通常一个页面是由很多个组件构成,这些组件可能又嵌套了组件,形成了一个关系网图,它们的关系可能是像下图中一样,大致分为两种使用场景,父子组件间通信和非父子组件间通信,父子组件间通信又分为直接父子关系和间接父子关系。vue提供了多种通信方法,针对不同的通信需求...

Solid State Logic 发布低保真数字失真插件 Digicrush

Solid State Logic 宣布推出低保真数字失真插件 Digicrush ,他们最新的创意工具具有经典数字失真的粗糙、低保真特性,完美模拟早期数字音频的衰减和伪影。Digicrush 充满怀旧气息,深受经典数字采样器和效果器的影响,具有内置抖动、可调比特深度和采样率降低功能,是为音轨添加复...

再来一波黑科技工具,低调使用

静读天下静读天下是一个特别优秀的电子书阅读器。它上面有多个在线书库,像古登堡计划,很多种优秀的书杂志,都可以下载来阅读。它还能智能识别章节功能,还支持外置的语音阅读功能。它支持多种文本格式,比如说txt,pdf,epub,mobi等等。为了便于阅读它还有10 种配色方式,还有夜间模式。不过免费版有广...

Gemini应用在Android上广泛推出2.0闪电模式切换器

#头条精品计划# 快速导读谷歌(搜索)应用的测试频道在安卓设备的双子应用中推出了2.0闪电实验功能,现已向稳定用户开放。双子应用通过谷歌应用运行,目前推出的15.50版本中,用户可通过模型选择器体验不同选项,包括1.5专业版、1.5闪电版和2.0闪电实验版。2.0闪电实验模型提供了更快的响应速度和优...

12种JavaScript中最常用的数组操作整理汇总

数组是最常见的数据结构之一,我们需要绝对自信地使用它。在这里,我将列出 JavaScript 中最重要的几个数组常用操作片段,包括数组长度、替换元素、去重以及许多其他内容。1、数组长度大多数人都知道可以像这样得到数组的长度:const arr = [1, 2, 3]; console.log(a...