RESTFUL

API

REST(Representational Status Transfer) 一种软件设计风格,采用http协议,json数据格式

特点:

       统一接口(Uniform Interface)

       无状态(stateless)

       可缓存(Cacheable)

       分层(Layered System)

       CS模式(client-server Atchitecture)

 

设计原则

       以URL(统一资源定位符)风格设计API

       通过不同的METHOD(GET,POST,PUT,DELETE)来区分资源的CRUD(增删改查)

       返回码(Status Code)必须符合HTTP资源描述规定

         

 

方法

安全

幂等

GET

YES

NO

HEAD

YES

NO

OPTIONS

YES

NO

PUT

NO

YES

DELETE

NO

YES

POST

NO

NO

 

 

 

 

 

 

 

 

 

 

 

 

 

HTTP——可见性——保证一下可能正常工作

        缓存:缓存响应内容,并在资源修改时使缓存自动失效

        乐观并发控制:检测并发写入,并在操作过期的表述时防止资源发生变更

        内容协商: 在给定资源的多个可用表述中选择合适的表述

        安全性和幂等性:确保客户端可以重复或重试特定的HTTP请求

 

怎么实现可见性:

        交互无状态     使用一个统一接口    编码格式明确区分标头和内容

怎么保持可见性:

        语以要与HTTP所规定的语义保持一致,并添加适当的标头来描述请求和响应

        使用适当的状态码和状态消息,以便处理、缓存和客户端可以决定请求的结果

 

内容协商

       HTTP 服务器驱动(server-driver)协商 <- 请求头选择

                  代理驱动(agent-driver)协商 <-不同URI

       客户端偏好

                  Accept头——设置偏好媒体类型

                  Accept-Language——设置偏好语言

                  Accept-Charset——设置偏好字符编码

                  Accept-Encoding——设置偏好压缩格式 

       服务器偏好

                例如:

                    

#针对英语表述的请求
GET /status HTTP/1.1
Host: www.example.org
Accept-Language:en;q=1.0,*/*;q=0.0

#响应
HTTP/1.1 200 OK
Content-Language:en
Vary: Accept-Language


#针对中文表述的请求
GET /status HTTP/1.1
Host: www.example.org
Accept-Language: zh;q=1.0,*/*;q=0.0 

#响应
HTTP/1.1 200 OK
Content-Language:zh
Vary: Accept-Language

//保持请求URI不变,客户端及中间媒介可以根据Vary头中所列出的请求头的值来区分响应

                 

 

安全性:客户端可以发起请求,并指导客户端不会改变资源的状态,无副作用

              任何客户端都可以发起任意次数的GET、OPTIONS、HEAD请求

幂等性:保证客户端重复发起某个请求的效果与一次请求的效果一致

               保证客户端可以在不能肯定服务器是否成功处理了请求时,重复发起这一请求

              

 

posted @ 2018-09-03 08:16  RESTPAIN  阅读(117)  评论(0编辑  收藏  举报