栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RESTful API设计规范

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RESTful API设计规范

PDF下载地址:https://download.csdn.net/download/weixin_45525272/80429647

文章目录

RESTful API设计规范

⼀、什么是RESTful?二、设计概念和准则三、为什么要使用RESTful API?四、协议五、域名六、版本七、http请求⽅式八、路由(路径)九、过滤信息(url中?后⾯的参数)

使用过滤信息的原因: 十、状态码十一、 其它

RESTful API设计规范 ⼀、什么是RESTful?

⼜称REST(Representational State Transfer),⼀种软件架构⻛格、设计风格,而不是标准,只是提供了⼀组设计原则和约束条件。它主要⽤于客户端和服务器交互类的软件。

其核心是⾯向资源,REST专门针对网络应⽤设计和开发方式,以降低开发的复杂性,提⾼系统的可伸缩性。

在RESTful架构中,每个网址代表⼀种资源(resource),所以网址中不能有动词,只能有名词。

⼀般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使⽤复数,除非没有合适的复数形式,如:weather。

二、设计概念和准则

网络上的所有事物都可以被抽象为资源(resource);每个资源都有唯⼀的资源标识(resource identifier),对资源的操作不会改变这些标识所有的操作都是无状态的分层系统,表示组件⽆法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独⽴性。 三、为什么要使用RESTful API?

面向资源(URI),具有解释性;行为(GET / POST / PUT / PATCH / DELETE)与资源(URI)分离,更加轻量;数据描述简单,使⽤JSON、XML、PROTOBUFFER即可全覆盖,主要使⽤JSON; 四、协议

API与⽤户的通信协议,⼀般使⽤HTTP协议,更安全情况下使⽤HTTPS。

五、域名

应该尽量将API部署在专⽤域名之下:

https://api.example.com

如果确定API很简单,不会有进⼀步扩展,可以考虑放在主域名下:

https://example.org/api/

六、版本

在每个API对应的URL中,应有⼀个版本号,以便将来服务升级后,所有版本的客户端可以正常使用,如下:

https://api.example.com/v1/topics/
https://api.example.com/v2/topics/
https://api.example.com/v3/topics/

七、http请求⽅式
请求方式含义
GET读取(Read)
POST新建(Create)
PUT更新(Update),通常是全部更新
PATCH更新(Update),通常是部分更新
DELETE删除(Delete)
八、路由(路径)

• 每个⽹址中不能有动词,只能有名词。并且应该使⽤复数,除⾮没有合适的复数形式,如:weather。

https://api.example.com/v1/topics/ —> 所有帖⼦

• 对于个体或个类名下资源,可以直接在路径上添加具体的id来表现,如下:

https://api.example.com/v1/topics/100001/info // id为100001的帖⼦的详情
https://api.example.com/v1/users/12345/topics/ // id为12345的⽤户名下所有帖⼦

• 更多例子[带请求方法]

[GET] https://api.example.com/v1/topics/ — 获取所有帖⼦(列表)
[POST] https://api.example.com/v1/topics/ — 新建帖⼦
[PUT] https://api.example.com/v1/topics/100001 — 更新完整帖⼦
[PATCH] https://api.example.com/v1/topics/100001 — 更新帖⼦部分信息
[DELETE] https://api.example.com/v1/topics/100001 — 删除帖⼦
[GET] https://api.example.com/v1/groups/1/topics/ — 获取某组所有帖⼦(列表)
[GET] https://api.example.com/v1/users/12345/profile — 获取某⽤户资料
[PUT] https://api.example.com/v1/users/12345/profile — 更新某⽤户资料
[GET] https://api.example.com/v1/users/12345/labels — 获取某⽤户所有标签

九、过滤信息(url中?后⾯的参数) 使用过滤信息的原因:

    单⼀的 url 路径不能表现出所有的场景的,起到了补充作⽤;

    ?limit=10                   :指定返回记录的数量
    ?offset=10                  :指定返回记录的开始位置。
    ?page=2&per_page=100 		:指定第⼏⻚,以及每⻚的记录数。
    ?sortby=name&order=asc		:指定返回结果按照哪个属性排序,以及排序顺序。
    ?animal_type_id=1           :指定筛选条件
    

    避免多级 URL,不利于扩展,语义也不明确,理解困难;
    多级URL:

    GET /authors/12/categories/2 // 含义是什么?
    

    正确做法是:

    GET /authors/12?categories=2
    
十、状态码

HTTP 状态码就是⼀个三位数,分成五个类别:

类别含义
1xx相关信息,不使用
2xx操作成功
3xx重定向
4xx客户端错误
5xx服务器错误

除非是 500 和 404 错误,⼤部分使⽤ 200 状态码即可,返回的数据格式如下:

十一、 其它

(1)API的⾝份认证应该使用OAuth 2.0框架。
(2)服务器返回的数据格式,应该尽量使用JSON,避免使用XML。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号