什么是restful?
-
restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
-
本质:一种软件架构风格
-
核心:面向资源
解决问题:降低开发的复杂性;提高系统的可伸缩性
Restful资源层Resource:文本、图片、服务、音频等等 -
Restful表现层Representational
- 文本:txt、html、xml、json、二进制
- 图片:jpg、png
- Case:book是一个资源,获取不同的格式
- http协议的content-type和accept
- Restful状态转化State Transfer
- 幂等性:每次HTTP请求相同的参数,相同的URI,产生的结果是相同的
- GET
- POST
- PUT
- DELETE
- 设计概念和准则
- 网络上的所有事物都可以被抽象为资源。
- 每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识。
- 所有的操作都是无状态的。
- 资源:网络上的一个实体,或者说是网络上的一个具体信息。
-
schema://host[:port]/path [?query-string][#anchor]
-
schema:指定底层使用的协议(例如:http,https,ftp)
-
host:服务器的IP地址或者域名
-
port:服务器端口,默认为80
-
path:访问资源的路径
-
query-string:发送给http服务器的数据
-
anchor:锚
SOAP WebService
- WebService:是一种跨编程语言和操作系统平台的远程调用技术。
- WebService通过HTTP协议发送请求和接收结果时采用XML格式封装,并增加了一些特点的HTTP消息头,这些特定的HTTP消息头和XML内容格式就是SOAP协议。
- 效率与易用性
- SOAP由于各种需求不断扩充其本身协议的内容,导致在SOAP处理方面的性能有所下降。同时在易用性方面以及学习成本上也有所增加。
- RESTful由于其面向资源接口设计以及操作抽象简化了开发者的不良设计,同时也最大限度的利用了http最初的应用协议设计理念。
- 安全性
- RESTful对于资源型服务接口来说很合适,同时特别适合对效率要求很高,但是对于安全要求不高的场景。
- SOAP的成熟性可以给需要提供给多开发语言,对于安全性要求较高的接口设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。
- 如何设计RESTful API
- 资源路径(URI)
- HTTP动词
- 过滤信息
- 状态码
- 错误处理
- HTTP动词
对于资源的操作(CRUD),由HTTP动词(谓词)表示。
- GET:从服务器取出资源(一项或多项)
- POST:在服务器新建一个资源
- PUT:在服务器更新资源(客户端提供改变后的完整资源)
- PATCH:在服务器更新资源(客户端提供改变的属性)
- DELETE:从服务器删除资源
请求类型 | 请求路径 | 功能 |
---|---|---|
GET | /books | 获取列表 |
POST | /book | 创建一本书 |
GET | /books/id | 通过id查询一本书列表 |
PUT | /book/id | 通过id更新一本书 |
DELETE | /book/id | 通过id删除一本书 |
- 过滤信息
- 如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
- 举例:
- ?offset=10:指定返回记录的开始位置
- ?page=2&per_page=100:指定第几页,以及每页的记录数
- ?sortby=name&order=asc:指定返回结果排序,以及排序顺序
- ?animal_type_id=1:指定筛选条件