restful风格的程序设计

3 篇文章 0 订阅
Rest 即 Representailonal state transfer 的缩写,我对这个词组的翻译是表现层的状态转换
resource (资源):对象的单个实例
集合:对象的集合,如 动物
第三方:使用我们接口的开发者
表现层:representation
“资源”是一种信息实体,它可以有多种外在表现形式,我们把资源具体呈现出来的形式,叫作它的“表现层”
状态转化
访问一个网站,就代表了客户端和服务器的一个互动过程,在这个过程中,势必涉及到数据和状态的变化。互联网通信协议http协议是一个无状态的协议,这意味着,所有的状态都保存再服务端,因此,如果客户端想要操作服务器,必须通过某种手段让服务端发生“状态转化”。而这种转化是建立来表现层上,所以这就是“表现层状态转化”
客户端用到的手段只能是http协议,具体来说,就是http协议里面,四个表示操作的动词“get”,“post”,“put”,“delete”。它们分别对应四种基本操作
get:用来获取资源
post:用来新建资源。也可以用来更新资源
put:用来更新资源
delete:用来删除资源

比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。
URI只代表资源的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

restful 意义
1.每一个url代表着一种资源
2.客户端和服务器之间,传递这种资源的某种表现层
3.客户端通过四个http动词,对服务端资源进行操作,实现表现成状态转化

GET(SELECT): 从服务器检索特定资源,或资源列表
POST(CREATE):在服务器上创建一个新的资源
PUT(UPDATE):更新服务器上的资源,提供整个资源
PATCH(UPDATE): 更新服务器资源,仅提供更改的属性
DELETE(DELETE):从服务器删除资源

首先是四个半种动作
post,delete,put、patch,get
因为put、patch只能算作一类,所以将patch算作半个
另外还有两个知名较少的http动词
HEAD -检索有关资源的元数据,例如数据的哈希或者上次更新的时间
OPTIONS -检索关于客户端被允许对资源做什么的信息
路径:接口名称
路径又称终点,表示api的具体网址
在restful架构中,每一个网址都代表一种资源,所以网址中不能有动词,只能有名词,而且所用的名次往往与数据库的表格名称对应,一般来说,数据库中的表都是同一种记录的集合所以api中的名次也应该使用复数

接口应该使用名词不应该使用动词
GET /zoos:列出所有动物园
POST /zoos:新建一个动物园
GET /zoos/ID:获取某个指定动物园的信息
PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)
PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)
DELETE /zoos/ID:删除某个动物园 GET /zoos/ID/animals:列出某个指定动物园的所有动物 DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

反例
/createNewCar/deleteAllRedCars

状态码设计

1xx 信息,请求收到,继续处理。范围保留用于底层HTTP的东西,你很可能永远也用不到。
2xx 成功,行为被成功地接受、理解和采纳
3xx 重定向,为了完成请求,必须进一步执行的动作
4xx 客户端错误,请求包含语法错误或者请求无法实现。范围保留用于响应客户端做出的错误,例如。他们提供不良数据或要求不存在的东西。这些请求应该是幂等的,而不是更改服务器的状态。
5xx 范围的状态码是保留给服务器端错误用的。这些错误常常是从底层的函数抛出来的,甚至 开发人员也通常没法处理,发送这类状态码的目的以确保客户端获得某种响应。 当收到5xx响应时,客户端不可能知道服务器的状态,所以这类状态码是要尽可能的避免。

服务器向客户端返回状态码一般有以下
200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
502 网关错误
503 Service Unavailable 504 网关超时

表现层状态转化:
如一张图片的地址是x/x/x.jpg 那么x/x/x 是它的资源地址,jpg只是它的表现层
访问一个地址,代表了客户端与服务端的互动过程,在这个过程中,势必涉及到数据和状态的变化
互联网通信协议,http协议是一个无状态协议,这意味着,所有的状态都保持再服务器端,因此如果客户端想要操作服务器,那么就必须通过某种手段让服务器发生变化,而这种转化是建立再表现层之上的,所以这就是表现层状态转化
客户端用到的手段就是通过http协议的表示操作方式的动词
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值