RESTful 学习
Restful 是什么
本质:一种软件架构风格
核心:面向资源
解决问题:降低复杂性,提高系统的可伸缩性
设计概念和准则:
- 网络上的所有事物都可以被抽象为资源
- 每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识。删除资源,标识还在,资源不在了
- 所有的操作都是无状态的
什么是资源?
网络上的任何东西
为什么要使用 Restful
Restful 中 HTTP 协议介绍
restful 与 http 无关,但是常用基于 http 协议的一种实现。
HTTP 协议-URL
应用层协议,简捷快速
schema://host[:port]/path [?query-string][#anchor]
- schema:底层使用的协议,如 http,https,ftp
- host:端口或者域名
- port:http 默认 80,https 默认 443
- path:资源路径
- query-string:发送给 http 服务器的数据
- anchor:锚。??
HTTP-请求
请求行、消息报头、正文
- GET:请求资源
- POST:在标识的资源后附加新的数据
- HEAD:请求资源的响应消息报头。比如资源的创建时间和最后修改时间
- PUT:更新资源
- DELETE:请求删除标识资源
- OPTIONS:查询服务器的性能,或者与资源相关的选项和需求。比如说可以获得的哪些服务
HTTP-响应
状态行、消息报头、响应正文
响应状态码
- 200,OK,成功返回用户请求数据
- 201 CREATED,新建或修改数据成功
- 204 NO CONTENT,删除数据成功
- 400,Bad Request,语法错误
- 401,Unauthorized,表示用户没有认证,无法进行当前操作
- 403 Forbidden,表示用户访问是被禁止的
- 404,资源不存在
- 422,创建一个对象时,发生一个验证错误。比如用户需要提供用户名和密码,但前端只提供了用户名,这个时候就返回 422
- 500,服务器内部错误,用户无法判断发出的请求是否成功
- 503,服务器当前不能处理请求,比如性能到瓶颈了
RESRful 和其他的区别
- SOAP WebService
也是一种基于 http,采用 XML 格式进行封装,增加了特定的 http 消息头。更安全
restful 最大程度的利用了 http
如何使用 RESTful API
RESTful API 设计要素
- 资源路径(URI)
- HTTP 动词
- 过滤信息
- 状态码
- 错误处理
- 返回结果
资源路径
- 用名词而不是动词,用复数
例子:
有一个 API 体哦给你 zoo 的信息,还包括各种动物和员工信息
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
如上,v1 代表 uri 的版本号。两种方式,在 url 中加入版本,或者在 http 请求头。
HTTP 动词
- POST /zoos: 新建一个动物园
- GET /zoos/ID:获取某个指定动物园的信息
- PUT /zoos/ID:更新某个指定动物园的信息
- DELETE /zoos/ID:删除某个动物园
过滤信息
用户自己设置的,需要什么信息,多少信息
错误处理
如果状态码是 4XX 或者 5XX,就应该返回出错信息。
用键值对返回。
1 | { |
返回结果
- GET /collections:返回资源对象的列表(数组)
- GET /collections/identity:返回单个资源对象(没有就 404)
- POST /collections:返回新生成的资源对象
- PUT /collections/identity:返回完整的资源对象
- PATCH /collections/identity:返回被修改的属性
- DELETE /collections/identity:返回一个空文档(204)
确认设计要素
用户登录、注册
文章发表、编辑、管理、列表
用户注册:
email 为空
用户名为空
密码为空检测 email 重复
然后写入数据库,password 加密
注册失败
返回用户信息:user_id,user_name,email,figure。删除密码字段用户登录:
email 为空
password 为空
返回用户信息:user_id,user_name,email,figure。删除密码字段
错误码定义在一个文件里面