(web)Restful

what is restful

首先,restful是一个应用软件的架构。 但是,从表象上来看,restful又用于通信。restful的设计初衷就是融合了计算机科学的两大前沿,“软件”和“网络”。

restful架构的层次

状态转化(State Transfer)
表现层(Representation)
资源(Resources)

资源

  1. 资源在服务器上。
  2. 它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。
  3. 你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。

表现层

  • 文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现
  • 具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对”表现层”的描述。
  • 客户端和服务器之间,传递这种资源的某种表现层

状态转移

  1. 什么的状态转移了?在服务器上的资源的表现层的状态转移了
  2. 某种状态转移是如何发生的?客户端通过四个HTTP动词,对服务器端资源进行操作,实现”表现层状态转化”。
  3. 状态转移的目的是什么?为了回传给客户端

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

https://api.example.com/v1/animals

https://api.example.com/v1/employees

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的意义