REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 所以我们这里描述的REST也是通过HTTP实现的REST。
class Resource { Resource(URI u); Response get(); Response post(Request r); Response put(Request r); Response delete(); }资源:
只要被引用,那就可以叫做资源,不管是json,字符串,图片,Word还是视频文件,也不管你是XML(标准通用标记语言下的一个子集)格式、txt文件格式还是其它文件格式。 例如人的名字,性别,电话号码,酒窖的name,ID ,酒窖和酒位的关系啊等都是资源
URI 资源是要被调用的,那这些资源肯定要有一个表示,而且必须唯一,这个表示可以是一个资源的路径也可以是资源的名称,如果信息没有被URI标记,那就不能算是真正的资源,因为你不能调用 例如:github上面的每个项目的ssh或者是http资源路径,他们都是唯一的
URI的设计: 1. 使用/表示资源的层级关系 api/admin/cellar/:id 2. 使用?进行过滤资源 /git/git/pulls?state=closed 用来表示git项目中已经关闭的推入请求 3. 用.或者;表示同级资源
不论什么资源,都应该使用相同的接口进行资源的访问,接口应该使用标准的http方法,如get post 等,并遵循这些方法的语义。 例如:name的操作,接口都应该统一,URI中只应该包含资源的名称 GET/admin/name POST/admin/name PUT/admin/name DELETE/admin/name 全部通过 URI对资源进行唯一的标识。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。 GET 安全且幂等 获取表示 变更时获取表示(缓存) 200(OK) - 表示已在响应中发出 204(无内容) - 资源有空表示 301(Moved Permanently) - 资源的URI已被更新 303(See Other) - 其他(如,负载均衡) 304(not modified)- 资源未更改(缓存) 400 (bad request)- 指代坏请求(如,参数错误) 404 (not found)- 资源不存在 406 (not acceptable)- 服务端不支持所需表示 500 (internal server error)- 通用错误响应 503 (Service Unavailable)- 服务端当前无法处理请求
上面提到,客户端可以通过http的方法获取资源,具体来说,应该是资源的表述,是资源在外界的具体呈现,例如123.img这个表述就是对一个图片资源的表述,
客户端就是应用,服务器数据库就是资源 客户端的应用发送实际请求,这时候应用状态改变,服务器接收到这个请求,服务器中资源状态改变。
