RESTful风格介绍
2020-04-22 02:47
1851 查看
- 在前后端分离的应用模式里, 对于
API的请求路径以及请求方式, 每个码农都有不同的风格, 造成了后期维护困难, 代码可读性差, 所以现在前后端分离项目, 约定俗成, 大家普遍采用RESTful风格来大统一.
1. 域名
- 有钱的土豪会购买专属
API域名来单独部署自己的接口:https://api.example.com
2. 版本
API的版本号应该写入到URL路径中:http://www.example.com/app/1.0/fooorhttp://www.example.com/app/1.1/foo,- 或者把版本号放到请求头中:
Accept: vnd.example-com.foo+json; version=1.0orAccept: vnd.example-com.foo+json; version=2.0
3. 路径
- 路径
endpoint表示API的具体网址, 每个URl代表一个资源resource- 资源作为网址的时候, 约定俗成, 只能有名词, 不能有动词,利用
HTTP的请求方式可以确定操作- 请求路径中, 名词应该为复数
http://127.0.0.1:8000/users,
4. HTTP
请求方式释义:
`GET` : 从服务器获取资源,一个或者多个: `users/`:获取所有用户, `users/1` 获取pk为 `1` 的用户 `POST` : 在服务器新建一个资源: `users/` 请求体中需要包含创建用户的信息 `PUT` : 在服务器更新资源(客户端提供改变后的完整资源): `users/1`请求体包含`pk`为`1`的用户的全部必传信息 `PATCH` : 在服务器更新资源(局部更新某资源的单独字段): `users/1`请求体包含`pk`为`1`的用户的某个字段的信息 `DELETE` : 从服务器删除资源: `users/1` 删除 `pk` 为 `1`的用户全部信息 `OPTIONS` : 获取信息,关于资源的哪些属性是客户端可以改变的
5. 过滤信息
- 如果返回的信息过多,服务器不应该一次性给客户端返回全部的结果,
API应该提供参数过滤返回结果
?limit=10:指定返回记录的数量 ?offset=10:指定返回记录的开始位置。 ?page=2&per_page=100:指定第几页,以及每页的记录数。 ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。 ?animal_type_id=1:指定筛选条件
6. 状态码
- 服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的
HTTP动词)
200 OK - [GET]:服务器成功返回用户请求的数据 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务) 204 NO CONTENT - [DELETE]:用户删除数据成功。 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
7. 错误处理
- 如果状态码是
4xx,服务器应该向客户端返回错误信息,返回的Key为error, 出错信息作为Value
{ error: "Invalid API key" }
8. 返回结果
- 根据客户端不同的请求,服务器向客户端返回的结果也有规范
- 服务器返回的数据格式,应该尽量使用JSON,避免使用XML
`GET` : 返回一个或者多个对象 `POST` : 返回新生成的资源对象 `PUT` : 返回完整的资源对象 `PATCH` : 返回完整的资源对象 `DELETE` : 返回空文档
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- rest规范 ; restful 风格; gradel介绍 ; idea安装 ;
- Dubbox中REST风格的远程调用(Restful Remoting)介绍
- HTTP之为什么存在post,get,put,delete等多种类型请求(RESTful风格介绍)
- Restful风格介绍
- REST风格介绍以及go语言实现简单的RESTful构架
- restful风格webservice HttpClient方式调用
- Ajax中Put和Delete请求传递参数无效的解决方法(Restful风格)
- Restful风格API接口开发springMVC篇
- ElasticSearch6(六) restful风格 高亮显示
- REST构架风格介绍:状态表述转移
- RESTful 风格
- laravel框加-创建RESTFul风格控制器实现文章增删改查
- 使用spring boot 整合spring jpa做基于restful风格的增删改查(maven ,mysql)
- RESTful风格
- promise介绍--异步编程风格(3)
- 在Dubbo中开发REST风格的远程调用(RESTful Remoting)
- restful设计风格
- spring3 的restful API RequestMapping介绍
- SpringMVC Json构建基于Restful风格的应用
- 对RESTful架构风格理解