news 2026/8/7 12:49:06

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/7/31 8:09:23

VRCX:重新定义VRChat社交体验的智能管理平台

在虚拟社交平台日益普及的今天,VRChat作为其中的佼佼者,吸引了大量用户沉浸其中。然而,随着社交圈的扩大和活动频率的增加,如何高效管理好友关系、追踪在线动态成为许多用户面临的挑战。VRCX应运而生,这款专为VRChat设…

作者头像 李华
网站建设 2026/8/5 3:06:39

OpenEMS电磁场求解器完整指南:从快速安装到实战应用

OpenEMS电磁场求解器完整指南:从快速安装到实战应用 【免费下载链接】openEMS openEMS is a free and open-source electromagnetic field solver using the EC-FDTD method. 项目地址: https://gitcode.com/gh_mirrors/ope/openEMS OpenEMS是一款基于EC-FDT…

作者头像 李华
网站建设 2026/8/3 9:57:51

Qwen-Image-Edit-Rapid-AIO V10:开启智能图像编辑新纪元

当AI遇见创意:图像编辑的革命性变革 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 想象一下,你正在处理一批商业宣传图片,需要在保持专业质感的同时快…

作者头像 李华
网站建设 2026/7/31 10:11:22

SuperMerger模型融合终极指南:从入门到精通

SuperMerger模型融合终极指南:从入门到精通 【免费下载链接】sd-webui-supermerger model merge extention for stable diffusion web ui 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-supermerger 想要打造专属的AI绘画模型吗?SuperMe…

作者头像 李华
网站建设 2026/8/3 22:56:54

Open-AutoGLM集群部署实战:支持高并发推理的架构设计

第一章:Open-AutoGLM集群部署实战:支持高并发推理的架构设计在构建大规模语言模型服务时,Open-AutoGLM 作为高性能推理框架,需通过合理的集群架构设计以支撑高并发请求。其核心目标是实现低延迟、高吞吐与弹性扩展能力。架构设计原…

作者头像 李华