脑图
RESTful
目录
-
什么是RESTful
-
HTTP方法
-
清晰的RESTful API
-
RESTful 消息
-
RESTful URI
-
RESTful 会话
什么是RESTful
- REST是一种基于web标准软件架构标准
- 在这个标准中,把一切调用或请求的对象,都视为资源,所以,其中心思想,一切皆资源
- 客户端与服务端之间以HTTP处理数据通信
- REST架构中,服务端提供对资源的访问,而客户端,访问并呈现资源
- 所以,REST架构中,主要参与者,就是客户端与服务端
- 服务端,负责着一切对资源的操作,这些操作会被封装成一个RESTful API,用于客户端请求
- URIs是REST架构中的全局ID标识
HTTP 方法
- GET 提供资源的只读访问
- PUT 创建一个新资源
- DELETE 用于移除一个资源
- POST 更新现有资源或者创建新资源
- OPTIONS 用于获取该资源所支持的操作
清晰的RESTful API
RESTful API
如图,操作类型中,只读指不会更改资源,幂等指多次执行产生的影响与与第一次执行产生的影响是一样的,N/A在表格中,可理解为 / 即划掉此格,不用理会此格
这里顺便解释一个概念:幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。
REST服务器对资源的表现形式应该是包容的,即使用什么格式传递数据,应该由客户端来指定:有客户端要xml而有的客户端要json
RESTful消息
在REST服务中,HTTP请求与响应就是作为消息传递的技术
一个REST消息包含消息数据和元数据(为描述数据的数据)
- 请求
Verb(动作) 表明HTTP方法,如GET、POST等
URI 表示服务器上资源的统一资源标识符
HTTP VERSION (http版本) 如 http v1.1
请求头,包含HTTP请求消息的元数据,它是键值对(key-value),比如客户端类型
请求体,消息内容和要求的REST服务器返回资源的表示形式
- 响应
Response Code(状态/响应码),表明请求资源的服务器状态,比如404 500等
HTTP VERSION http版本
响应头 返回响应的元数据 如服务器类型等,也是键值对
响应体 以客户端想要的资源表现形式返回资源
RESTful API
RESTful web 服务的URI(统一资源标识符)定义规则
- 见名知意
- 避免使用空格与特殊字符,一般以下划线(_)或者字符(-)代替
- 使用小写字母,URI本身是不区分大小写的
- 保持向后兼容,Web服务是一种公共服务,URI一旦公开之后,应该始终可用,尽管需要更新URI,那也需要使用HTTP 300 重定向老的URI到新的URI
- 使用HTTP Verb
Verb规则
- GET是只读且安全的
- PUT和DELETE是幂等的
- PUT和POST操作几乎相同,区别在于PUT幂等,而POST不幂等
RESTful 会话
RESTful基于HTTP,是无状态的,想要保持会话,则客户端传递会话标识符,服务端保存会话标识符。就像Session和Cookie。
无状态的优势:
- Web服务可以独立对待每个请求方法
- Web服务不需要维护客户端先前的交互
- HTTP本身就是一个无状态协议,所以RESTful Web服务可与HTTP协议无缝协作
RESTful 客户端缓存
当获取一个资源的时候,客户端应根据服务器返回的响应头中所指定的方式,以决定是否缓存资源,或者以何种方式缓存资源。
一个响应头可能包含的内容:
- Date 创建资源的日期和时间
- Last Modified 最后修改资源的日期和时间
- Cache-Control 控制缓存的主要头信息
- Expires 缓存到期的日期和时间
- Age 从服务器获取资源持续的秒数
Cache-Control的取值:
- Public 表示该资源可由任何组件缓存
- Private 表示该资源只能由客户端和服务器缓存,没有中介可以缓存
- No-cache/no-store 表示该资源不可缓存
- Max-age 表示该资源在max-age指定的秒数内有效,之后客户端必须发起另一个请求
- Must-revalidate 表明如果max-age已经过去了,服务器要重新验证资源
RESTful web服务安全性
- 验证来自客户端的所有输入,这可以避免注入攻击。
- 使用会话机制,对客户端此次请求进行权限认证。
- URL应避免敏感数据。
- 合理使用HTTP Verb,比如GET方法,不应该能够删除数据。
- 验证XML/JSON数据是否合法正常
- 合理正确的使用HTTP错误消息,比如403、500等
HTTP常见状态码:
状态码结语
RESTful是一个web服务的架构标准,后端开发人员可以按照这个标准来实现API,而终端开发人员,同样可以用这个标准来使用API。
标准的存在,就是为了统一双方的约定,就好比一个接口,不论你用json返回数据还是xml返回数据,它都没有必然的对错,只要开发组的成员约定好,同时返回两种格式也行(RESTful的思想,也是这样)
一个广泛使用的标准,可以减少开发者之间的交流成本,也可以让一些新入职的员工能够更快适应项目。
网友评论