什么是 RESTful服务
简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。
其实我们前几节用的就是RESTful服务,这里做个总结。
如何实现 Restful Web Service
• 识别资源
• 选择合适的资源粒度
• 设计 URI
• 选择合适的 HTTP ⽅法和返回码
• 设计资源的表述
关于规范与约束有哪些
RESTful 架构的核心规范与约束:统一接口
分为四个子约束:
1.每个资源都拥有一个资源标识,每个资源的资源标识可以用来唯一地标明该资源
2.消息的自描述性
3.资源的自描述性。
4.HATEOAS Hypermedia As The Engine Of Application State(超媒体作为应用状态引擎)
即客户只可以通过服务端所返回各结果中所包含的信息来得到下一步操作所需要的信息,如到底是向哪个URL发送请求等。也就是说,一个典型的REST服务不需要额外的文档标示通过哪些URL访问特定类型的资源,而是通过服务端返回的响应来标示到底能在该资源上执行什么样的操作。
如何构建更好的 URI
• 使⽤域及⼦域对资源进⾏合理的分组或划分
• 在 URI 的路径部分使⽤斜杠分隔符 ( / ) 来表示资源之间的层次关系
• 在 URI 的路径部分使⽤逗号 ( , ) 和分号 ( ; ) 来表示⾮层次元素
• 使⽤连字符 ( - ) 和下划线 ( _ ) 来改善⻓路径中名称的可读性
• 在 URI 的查询部分使⽤“与”符号 ( & ) 来分隔参数
• 在 URI 中避免出现⽂件扩展名
认识 HTTP ⽅法
动作 | 安全/幂等 | ⽤途 |
---|---|---|
GET | Y / Y | 信息获取 |
POST | N / N | 该⽅法⽤途⼴泛,可⽤于创建、更新或⼀次性对多个资源进⾏修改 |
DELETE | N / Y | 删除资源 |
PUT | N / Y | 更新或者完全替换⼀个资源 |
HEAD | Y / Y | 获取与GET⼀样的HTTP头信息,但没有响应体 |
OPTIONS | Y / Y | 获取资源⽀持的HTTP⽅法列表 |
TRACE | Y / Y | 让服务器返回其收到的HTTP头 |
认识 HTTP 状态码
- 成功
这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
- 重定向
这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。当且仅当后续的请求所使用的方法是 GET 或者 HEAD 时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A->A,或者A->B->C->A),因为这会导致服务器和客户端大量不必要的资源消耗。
- 请求错误
这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。如果错误发生时客户端正在传送数据,那么使用TCP的服务器实现应当仔细确保在关闭客户端与服务器之间的连接之前,客户端已经收到了包含错误信息的数据包。如果客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个重置数据包,以清除该客户端所有还未识别的输入缓冲,以免这些数据被服务器上的应用程序读取并干扰后者。
- 服务器错误(5、6字头)
这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。
这些状态码适用于任何响应方法。
码 | 描述 | 状态码 | 描述 |
---|---|---|---|
200 | OK | 400 | Bad Request |
201 | Created | 401 | Unauthorized |
202 | Accepted | 403 | Forbidden |
301 | Moved Permanently | 404 | Not Found |
303 | See Other | 410 | Gone |
304 | Not Modified | 500 | Internal Server Error |
307 | Temporary Redirect | 503 | Service Unavailable |