IT@程序员猿媛

Restful 相关整理

2019-06-09  本文已影响2人  58bc06151329

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. 概述

2. RESTful 架构风格的特点

2.1 资源

2.2 URI

URI 的设计技巧

2.3 统一接口

HTTP 方法 幂等性 安全性 说明
GET 获取资源。
POST 创建子资源。
PUT 用于创建和更新资源。
DELETE 删除资源。
HEAD 与 GET 方法类似,但不返回 message body 内容,仅仅获取资源的部分信息(content-type、content-length)。RESTful 框架中较少使用。
OPTIONS 用于 URL 验证,验证接口服务是否正常。
TEACE 回显服务器收到的请求,客户端可以看到(如果有)某些改变或添加已经被中间服务器实现。RESTful 框架中较少使用。
PATCH 与 PUT 方法类似,代表部分更新。
POST /api/Person/4 HTTP/1.1  
X-HTTP-Method-Override: PUT

HTTP 状态码分类

分类 描述
1** 信息,服务器收到请求,需要请求者继续执行操作。
2** 成功,操作被成功接收并处理。
3** 重定向,需要进一步的操作以完成请求。
4** 客户端错误,请求包含语法错误或无法完成请求。
5** 服务器错误,服务器在处理请求的过程中发生了错误。

HTTP 状态码说明

状态码 英文名称 说明
100 Continue 继续。客户端应继续其请求。
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议。
102 Processing 由 WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。
200 OK 请求成功。一般用于 GET 与 POST 请求。
201 Created 已创建。成功请求并创建了新的资源。
202 Accepted 已接受。已经接受请求,但未处理完成。
203 Non-Authoritative Information 非授权信息。请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本。
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档。
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域。
206 Partial Content 部分内容。服务器成功处理了部分 GET 请求。
207 Multi-Status 由 WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个 XML 消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI 代替。对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个 301 响应的话,接下来的重定向请求将会变成 GET 方式。
302 Found 临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI。
303 See Other 查看其它地址。与 301 类似。使用 GET 和 POST 请求查看。
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源。
305 Use Proxy 使用代理。所请求的资源必须通过代理访问。
306 Unused 已经被废弃的 HTTP 状态码。
307 Temporary Redirect 临时重定向。与 302 类似。使用 GET 请求重定向。
400 Bad Request 客户端请求的语法错误,服务器无法理解。
401 Unauthorized 请求要求用户的身份认证。
402 Payment Required 保留,将来使用。
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求。
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置 " 您所请求的资源无法找到 " 的个性页面。
405 Method Not Allowed 客户端请求中的方法被禁止。
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。
407 Proxy Authentication Required 请求要求代理的身份认证,与 401 类似,但请求者应当使用代理进行授权。
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时。
409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突。
410 Gone 客户端请求的资源已经不存在。410 不同于 404,如果资源以前有现在被永久删除了可使用 410 代码,网站设计人员可通过 301 代码指定资源的新位置。
411 Length Required 服务器无法处理客户端发送的不带 Content-Length 的请求信息。
412 Precondition Failed 客户端请求信息的先决条件错误。
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个 Retry-After 的响应信息。
414 Request-URI Too Large 请求的 URI 过长(URI 通常为网址),服务器无法处理。
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。
416 Requested range not satisfiable 客户端请求的范围无效。
417 Expectation Failed 服务器无法满足 Expect 的请求头信息。
421 Too Many Connections 从当前客户端所在的 IP 地址到服务器的连接数超过了服务器许可的最大范围。
422 Unprocessable Entity 请求格式正确,但是由于含有语义错误,无法响应。(RFC 4918 WebDAV)
423 Locked 当前资源被锁定。(RFC 4918 WebDAV)
424 Failed Dependency 由于之前的某个请求发生的错误,导致当前请求失败,例如 PROPPATCH。(RFC 4918 WebDAV)
425 Unordered Collection 在 WebDav Advanced Collections 草案中定义,但是未出现在《WebDAV 顺序集协议》(RFC 3658)中。
426 Upgrade Required 客户端应当切换到 TLS/1.0。(RFC 2817)
449 Retry With 由微软扩展,代表请求应当在执行完适当的操作后进行重试。
451 Unavailable For Legal Reasons 该请求因法律原因不可用。(RFC 7725)
500 Internal Server Error 服务器内部错误,无法完成请求。
501 Not Implemented 服务器不支持请求的功能,无法完成请求。
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应。
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中。
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求。
505 HTTP Version not supported 服务器不支持请求的 HTTP 协议的版本,无法完成处理。
506 Variant Also Negotiates 由《透明内容协商协议》(RFC 2295)扩展,代表服务器存在内部配置错误。
507 Insufficient Storage 服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 4918)
509 Bandwidth Limit Exceeded 服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。
510 Not Extended 获取资源所需要的策略并没有没满足。(RFC 2774)
600 Unparseable Response Headers 源站没有返回响应头部,只返回实体内容。

2.4 无状态

2.5 ROA 与 SOA

ROA 的特性

SOA 的特征

ROA 与 SOA 的共同点

ROA 与 SOA 的不同点

2.6 认证机制

Basic Auth

Token Auth

OAuth

3. URL 设计

https://api.example.com
https://example.org/api/
https://api.example.com/v1/
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
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 //删除某个指定动物园的指定动物
?limit=10  //指定返回记录的数量
?offset=10  //指定返回记录的开始位置。
?page=2&per_page=100 //指定第几页,以及每页的记录数。
?sortby=name&order=asc //指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1 //指定筛选条件
GET /zoo/ID/animals
GET /animals?zoo_id=ID
{
    error: "Invalid API key"
}
GET /collection  //返回资源对象的列表(数组)
GET /collection/resource  //返回单个资源对象
POST /collection //返回新生成的资源对象
PUT /collection/resource  //返回完整的资源对象
PATCH /collection/resource //返回完整的资源对象
DELETE /collection/resource //返回一个空文档

参考资料

http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
https://blog.csdn.net/scrat_kong/article/details/83821203
https://www.runoob.com/w3cnote/restful-architecture.html
https://www.cnblogs.com/wang-yaz/p/9237981.html
https://blog.csdn.net/x541211190/article/details/81141459
https://www.cnblogs.com/chinajava/p/5871305.html

上一篇下一篇

猜你喜欢

热点阅读