news 2026/4/3 5:16:14

RESTful API 教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RESTful API 教程

好的!下面是一份面向初学者到中级RESTful API 教程,内容尽量清晰、结构化,并带有实际例子。我们会从概念讲起,一步步到设计原则、常见实践和实现建议。


1. 什么是 RESTful API?

REST(Representational State Transfer)是一种架构风格,不是标准也不是协议。它由 Roy Fielding 在 2000 年的博士论文中提出,主要用于设计网络应用程序(尤其是 Web API)。

RESTful API 的核心思想
把服务器上的资源(Resource)看作是 Web 的核心,通过统一的接口(通常是 HTTP)来对这些资源进行增删改查


2. REST 的六大约束(必须理解)

约束说明实际意义
客户端-服务器客户端和服务器分离,互不干扰前后端分离
无状态(Stateless)每个请求都必须包含所有必要信息,服务器不保存客户端状态易于水平扩展
可缓存响应可以被缓存(通过 Cache-Control、ETag 等头)提升性能
分层系统客户端不需要知道它连接的是真实服务器还是代理、负载均衡器等便于架构扩展
统一接口(最重要!)所有资源都通过相同的接口操作(见下文 4 个子约束)降低学习成本
按需代码(可选)服务器可以发送可执行代码给客户端(例如 JavaScript),实际很少用移动端 H5 偶尔用到

统一接口的四个子约束(最常被问到):

  1. 资源识别(Resource Identification)
    每个资源都有唯一的标识符,通常是 URL。

  2. 通过资源的表示来操作资源(Manipulation of Resources Through Representations)
    客户端通过资源的某种表示(JSON、XML 等)来操作资源,而不是直接操作资源本身。

  3. 自描述消息(Self-descriptive Messages)
    每个请求/响应都包含足够的信息(HTTP 方法、Content-Type、状态码等),让接收方能理解。

  4. HATEOAS(超媒体作为应用状态引擎,Hypermedia as the Engine of Application State)
    响应中应该包含相关资源的链接,客户端通过链接“发现”下一步操作。
    (实际项目中很少严格实现,但了解概念很有用)


3. RESTful API 的核心设计原则(常用“最佳实践”)

原则推荐做法例子
使用名词(资源)而非动词URL 用名词表示资源,动词用 HTTP 方法表示/users而不是/getUsers
使用 HTTP 方法表达动作GET / POST / PUT / PATCH / DELETEPOST /users创建用户
复数形式资源名通常用复数(约定俗成)/articles而不是/article
层级结构清晰用路径表达从属关系/users/123/orders
使用 HTTP 状态码2xx 成功、4xx 客户端错误、5xx 服务器错误201 Created、404 Not Found、400 Bad Request
版本控制在 URL 中或 Header 中指定版本/v1/usersAccept: application/vnd.myapi.v2+json
字段命名规范推荐 snake_case 或 camelCase,一致即可user_iduserId
返回一致的结构成功和失败都返回类似结构(data + meta 或 errors){ "data": {...}, "meta": {...} }

4. HTTP 方法与 CRUD 对应表(最常用)

操作HTTP 方法URL 示例说明幂等性安全
创建(Create)POSTPOST /users创建新资源
读取(Read)GETGET /users获取资源列表
读取(Read)GETGET /users/123获取单个资源
更新(全量)PUTPUT /users/123替换整个资源(缺失字段清空)
更新(部分)PATCHPATCH /users/123部分更新(只改动提供的字段)否*
删除DELETEDELETE /users/123删除资源

*注:PATCH 是否幂等取决于具体实现方式(如果每次只应用一次差量则幂等)。


5. 常见状态码速查表

状态码含义典型场景
200OKGET 成功返回数据
201CreatedPOST 创建成功
204No ContentDELETE 成功,无返回体
400Bad Request参数错误、格式不对
401Unauthorized未登录或 Token 无效
403Forbidden已登录但无权限
404Not Found资源不存在
409Conflict资源冲突(例如重复创建)
422Unprocessable Entity语义错误(校验失败)
429Too Many Requests超过限流配额
500Internal Server Error服务器内部错误

6. 实际例子:博客系统 RESTful API 设计

资源:文章(articles)、用户(users)、评论(comments)

操作HTTP 请求说明
获取所有文章GET /articles可加查询参数 ?page=1&limit=20
获取单篇文章GET /articles/123
创建文章POST /articlesBody: { title, content, authorId }
修改文章(全量)PUT /articles/123必须提供所有字段
修改文章标题PATCH /articles/123Body: { title: “新标题” }
删除文章DELETE /articles/123
获取某篇文章的评论GET /articles/123/comments
给文章添加评论POST /articles/123/commentsBody: { content, authorId }
获取某个用户的所有文章GET /users/456/articles

7. 推荐的响应结构(JSON)

成功响应示例:

{"data":{"id":123,"title":"RESTful API 设计指南","content":"...","created_at":"2025-12-25T10:00:00Z"},"meta":{"request_id":"abc123","timestamp":"2025-12-25T10:00:01Z"}}

失败响应示例:

{"error":{"code":"VALIDATION_ERROR","message":"标题长度不能超过 100 个字符","details":[{"field":"title","issue":"too_long"}]}}

8. 常见问题与进阶话题

问题推荐做法 / 讨论点
如何处理分页?使用?page=2&limit=20?offset=40&limit=20,返回totalnext等 meta
如何做认证授权?常用:JWT(Bearer Token)、OAuth 2.0、API Key
如何做版本控制?URL 版本/v1/、Header 版本、Git 风格(Accept header)
PUT vs PATCH 区别?PUT 是全量替换,PATCH 是部分更新
如何处理批量操作?POST /articles/bulk-createPATCH /articles+ 数组
什么是 HATEOAS?响应中返回_links字段,指向相关资源
限流(Rate Limiting)怎么做?Header:X-RateLimit-Limit,X-RateLimit-Remaining,Retry-After
错误码要用英文还是数字?推荐英文常量 + HTTP 状态码(400 + “VALIDATION_ERROR”)

9. 快速上手实践建议

  1. Node.js + ExpressSpring Boot(Java)或FastAPI(Python)写一个小型项目
  2. 实现一套简单的TODO 列表 API
  3. 加上分页、认证(JWT)、基本的输入校验
  4. Postmancurl测试
  5. 再用Swagger/OpenAPI生成接口文档(强烈推荐)

10. 总结:RESTful API 设计核心口诀

“名词做资源,动词用方法,状态码说话,结构要一致”

  • URL 用名词(复数)
  • 动作用HTTP 方法
  • 结果用HTTP 状态码
  • 数据结构前后一致
  • 出错要清晰友好

如果你想深入某个部分(例如:如何设计分页、认证、错误处理、OpenAPI 文档生成、HATEOAS 实践等),可以告诉我,我可以继续展开讲解或给出代码示例!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 0:11:52

终极指南:3步实现海尔设备跨平台智能联动

终极指南:3步实现海尔设备跨平台智能联动 【免费下载链接】haier 项目地址: https://gitcode.com/gh_mirrors/ha/haier 还在为家里的海尔设备无法与其他智能设备协同工作而烦恼吗?看着空调、冰箱、洗衣机各自为政,无法创建统一的智能…

作者头像 李华
网站建设 2026/4/3 4:33:01

Qwen图像编辑革命:V10版本带来的智能化创作体验

Qwen图像编辑革命:V10版本带来的智能化创作体验 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 在人工智能技术日新月异的今天,图像编辑领域迎来了革命性的突破。Q…

作者头像 李华
网站建设 2026/3/31 21:00:24

VRChat终极社交管理助手:全面优化你的虚拟社交体验

VRChat终极社交管理助手:全面优化你的虚拟社交体验 【免费下载链接】VRCX Friendship management tool for VRChat 项目地址: https://gitcode.com/GitHub_Trending/vr/VRCX 在VRChat的精彩世界中,你是否曾因好友太多而难以追踪每个人的动态&…

作者头像 李华
网站建设 2026/4/2 13:16:28

any-listen:跨平台私人音乐服务的完整技术解析

any-listen:跨平台私人音乐服务的完整技术解析 【免费下载链接】any-listen A cross-platform private song playback service. 项目地址: https://gitcode.com/gh_mirrors/an/any-listen 还在为商业音乐平台的版权限制和隐私问题困扰吗?any-list…

作者头像 李华
网站建设 2026/3/29 5:42:22

终极免费开源:Rocket.Chat Android原生应用完整指南

终极免费开源:Rocket.Chat Android原生应用完整指南 【免费下载链接】Rocket.Chat.Android Legacy mobile Rocket.Chat client in Kotlin for Android 项目地址: https://gitcode.com/gh_mirrors/ro/Rocket.Chat.Android 在这个数据安全日益重要的时代&#…

作者头像 李华
网站建设 2026/3/31 13:10:14

PaddlePaddle框架的分布式训练能力实测报告

PaddlePaddle框架的分布式训练能力实测报告 在当前AI模型参数动辄数十亿、训练数据规模呈指数级增长的背景下,单机训练早已无法满足工业界对效率与可扩展性的要求。以OCR、推荐系统和大语言模型为代表的典型应用,正不断挑战着硬件资源的极限。如何在有限…

作者头像 李华