RESTful框架 目前仅有HTTP标准实践了此思想
参考菜鸟教程
https://learn.microsoft.com/zh-cn/azure/architecture/best-practices/api-design
介绍
REST:Representational State Transfer 表述性状态转移
在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构
REST指的是一组架构约束条件和原则。
从资源的定义、获取、表述、关联、状态变迁等角度解释RESTful
资源的定义–URI的设计
不应该是无意义,不可读的字符排列组合
- 使用_或
-
来让URI可读性更好 - 使用/来表示资源的层级关系
- 使用?用来过滤资源
- ,或;可以用来表示同级资源的关系
资源的获取–统一资源接口
1xx:相关信息
2xx:操作成功
3xx:重定向
4xx:客户端错误
5xx:服务器错误
GET 检索资源
获取表示
变更时获取表示(缓存)
状态 | 说明 |
---|---|
200 | (OK) - 表示已在响应中发出 |
204 | (无内容) - 资源有空表示 |
301 | (Moved Permanently) - 资源的URI已被更新 |
303 | (See Other) - 其他(如,负载均衡) |
304 | (not modified)- 资源未更改(缓存) |
400 | (bad request)- 指代坏请求(如,参数错误) |
404 | (not found)- 资源不存在 |
406 | (not acceptable)- 服务端不支持所需表示 |
500 | (internal server error)- 通用错误响应 |
503 | (Service Unavailable)- 服务端当前无法处理请求 |
POST 创建资源
使用服务端管理的(自动产生)的实例号创建资源
创建子资源
部分更新资源
如果没有被修改,则不过更新资源(乐观锁)
状态 | 说明 |
---|---|
200 | (OK)- 如果现有资源已被更改 |
201 | (created)- 如果新资源被创建 |
202 | (accepted)- 已接受处理请求但尚未完成(异步处理) |
301 | (Moved Permanently)- 资源的URI被更新 |
303 | (See Other)- 其他(如,负载均衡) |
400 | (bad request)- 指代坏请求 |
404 | (not found)- 资源不存在 |
406 | (not acceptable)- 服务端不支持所需表示 |
409 | (conflict)- 通用冲突 |
412 | (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) |
415 | (unsupported media type)- 接受到的表示不受支持 |
500 | (internal server error)- 通用错误响应 |
503 | (Service Unavailable)- 服务当前无法处理请求 |
PUT 替换资源
用客户端管理的实例号创建一个资源
通过替换的方式更新资源
如果未被修改,则更新资源(乐观锁)
状态 | 说明 |
---|---|
200 | (OK)- 如果已存在资源被更改 |
201 | (created)- 如果新资源被创建 |
301 | (Moved Permanently)- 资源的URI已更改 |
303 | (See Other)- 其他(如,负载均衡) |
400 | (bad request)- 指代坏请求 |
404 | (not found)- 资源不存在 |
406 | (not acceptable)- 服务端不支持所需表示 |
409 | (conflict)- 通用冲突 |
412 | (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突) |
415 | (unsupported media type)- 接受到的表示不受支持 |
500 | (internal server error)- 通用错误响应 |
503 | (Service Unavailable)- 服务当前无法处理请求 |
PATCH 修改资源
DELETE 删除资源
状态 | 说明 |
---|---|
200 | (OK)- 资源已被删除 |
301 | (Moved Permanently)- 资源的URI已更改 |
303 | (See Other)- 其他,如负载均衡 |
400 | (bad request)- 指代坏请求 |
404 | (not found)- 资源不存在 |
409 | (conflict)- 通用冲突 |
500 | (internal server error)- 通用错误响应 |
503 | (Service Unavailable)- 服务端当前无法处理请求 |
统一资源接口,要求URI只应该来表示资源的名称,而不应该包括资源的操作——URI不应该使用动作来描述
资源的表述
文本资源可以采用html、xml、json等格式,图片可以使用PNG或JPG展现出来
通过HTTP内容协商,客户端可以通过Accept
头请求一种特定格式的表述,服务端则通过Content-Type
告诉客户端资源的表述形式。
状态的转移
客户端负责维护应用状态,而服务端只维护资源状态。
客户端与服务端的交互必须是无状态的,每一次请求中包含处理该请求所需的一切信息。
服务端不需要在请求间保留应用状态,只有在接受到实际请求的时候,服务端才会关注应用状态。
客户端应用状态在服务端提供的超媒体的指引下发生变迁。服务端通过超媒体告诉客户端当前状态有哪些后续状态可以进入。
这些类似"下一页"之类的链接起的就是这种推进状态的作用——指引你如何从当前状态进入下一个可能的状态。
实践规范
参考文章
不要在URL中出现动词,URL 用来定位资源
METHOD 表达行为:
GET (SELECT):从服务器检索特定资源,或资源列表。
POST (CREATE):在服务器上创建一个新的资源。
PUT (UPDATE):更新服务器上的资源,提供整个资源。
PATCH (UPDATE):更新服务器上的资源,仅提供更改的属性。
DELETE (DELETE):从服务器删除资源。
规则1:URI结尾不应包含(/)
规则2:正斜杠分隔符**(/)必须用来指示层级关系**
规则3:应使用连字符( - )来提高URI的可读性
规则4:不得在URI中使用下划线(_)
规则5:URI路径中全都使用小写字母
响应超媒体保障资源的连通性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)