(web)Restful¶
what is restful¶
首先,restful是一个应用软件的架构。 但是,从表象上来看,restful又用于通信。restful的设计初衷就是融合了计算机科学的两大前沿,“软件”和“网络”。
restful架构的层次¶
| 状态转化(State Transfer) |
| 表现层(Representation) |
| 资源(Resources) |
资源¶
- 资源在服务器上。
- 它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。
- 你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。
表现层¶
- 文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现
- 具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对”表现层”的描述。
- 客户端和服务器之间,传递这种资源的某种表现层
状态转移¶
- 什么的状态转移了?在服务器上的资源的表现层的状态转移了
- 某种状态转移是如何发生的?客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。
- 状态转移的目的是什么?为了回传给客户端
restful url设计¶
| 不好的url设计 | 改进后的 | 评论 |
| https://example.org/api/ | https://api.example.com | 应该尽量将API部署在专用域名之下。 |
| https://api.example.com/v1/ | 1、应该将API的版本号放入URL | |
https://api.example.com/v1/zoos |
1、每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词, 2、所用的名词往往与数据库的表格名对应。 |
|
POST /accounts/1/transfer/500/to/2 从账户1向账户2汇款500元 |
POST /transaction HTTP/1.1 Host: 127.0.0.1 from=1&to=2&amount=500.00 |
1、汇款是HTTP动词表示不了的,你就应该把动作做成一种资源 2、资源不能是动词 3、避免多级 URL |
| GET /authors/12/categories/2 | GET /authors/12?categories=2 | 避免多级 URL |
| GET /articles/published | GET /articles?published=true | 避免多级 |
/posts/show/1 展示id是1的帖子 |
GET /posts/1 | URI不能包含动词,show是动词, 用GET方法表示show的意义 |