RESTful API 方法

我正在用 PHP 为一个应用程序编写一个 RESTful API 模块,我对动词 HEADOPTIONS有点混淆。

  • 用于检索给定资源的可用 HTTP 谓词?
  • 用于确定给定资源是否可用?

如果有人能澄清这些动词,我将不胜感激。

* 澄清涉及 RESTful API 体系结构重新使用 HTTP 动词。后来我认识到,HEADOPTIONS都应该重新使用 没有,而不是像任何 HTTP 应用程序那样可预测地运行。哦,我们如何在两年内成长。

163790 次浏览

按照 http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

9.2选择

OPTION 方法表示一个请求,请求提供关于由 Request-URI 标识的请求/响应链上可用的通信选项的信息。此方法允许客户端确定与资源或服务器功能相关联的选项和/或需求,而无需暗示资源操作或启动资源检索。

对此方法的响应不可缓存。

如果 OPTION 请求包含一个实体主体(如内容长度或传输编码所示) ,则媒体类型必须由 Content-Type 字段指示。虽然这个规范没有定义这样一个主体的任何用途,但是 HTTP 的未来扩展可能会使用 OPTION 主体在服务器上进行更详细的查询。不支持这种扩展的服务器可能会丢弃请求主体。

如果 Request-URI 是星号(“ *”) ,则 OPTION 请求通常应用于服务器,而不应用于特定资源。由于服务器的通信选项通常依赖于资源,“ *”请求只作为“ ping”或“ no-op”类型的方法有用; 它只允许客户端测试服务器的功能。例如,这可以用来测试代理是否符合 HTTP/1.1(或缺少 HTTP/1.1)。

如果 Request-URI 不是星号,则 OPTION 请求仅应用于与该资源通信时可用的选项。

一个200响应应该包括任何头字段,表明可选功能实现的服务器和适用于该资源(例如,允许) ,可能包括扩展没有定义这个规范。响应机构,如果有的话,也应该包括有关通信选项的信息。这种主体的格式不是由本规范定义的,而是可能由未来的 HTTP 扩展定义的。可以使用内容协商来选择适当的响应格式。如果不包括响应主体,则响应必须包括一个字段值为“0”的 Content-Length 字段。

Max-Forforward 请求标头字段可用于指定请求链中的特定代理。当代理在绝对 URI 上接收到一个 OPTION 请求(请求转发是允许的)时,代理必须检查 Max-Forforward 字段。如果 Max-Forforward 字段值为零(“0”) ,则代理必须不转发消息; 相反,代理应该使用自己的通信选项进行响应。如果 Max-Forforward 字段值是一个大于零的整数,代理必须在转发请求时减少字段值。如果请求中没有 Max-Forforward 字段,那么转发的请求必须不包括 Max-Forforward 字段。

9.4头

HEAD 方法与 GET 相同,只是服务器不能在响应中返回消息体。响应 HEAD 请求的 HTTP 头中包含的元信息应该与响应 GET 请求发送的信息相同。此方法可用于获取关于请求所隐含的实体的元信息,而无需传输实体本身。此方法通常用于测试超文本链接的有效性、可访问性和最近的修改。

对 HEAD 请求的响应可以缓存,因为包含在响应中的信息可以用于从该资源更新以前缓存的实体。如果新的字段值表明缓存实体与当前实体不同(如 Content-Length、 Content-MD5、 eTag 或 last-Amendment 中的更改所表明的那样) ,那么缓存必须将缓存条目视为过时的。

OPTION 告诉你“这个资源允许使用什么方法”。

HEAD 获取如果发出 GET 请求就会得到的 HTTP 头,但是没有正文。这使得客户端可以确定缓存信息、返回什么内容类型、返回什么状态代码。可用性只是其中的一小部分。

OPTIONS方法返回有关 空气污染指数(方法/内容类型)的信息

HEAD方法返回有关 资源(版本/长度/类型)的信息

服务器响应

选择

HTTP/1.1 200 OK
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:24:43 GMT
Content-Length: 0

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:12:29 GMT
ETag: "780602-4f6-4db31b2978ec0"
Last-Modified: Thu, 25 Apr 2013 16:13:23 GMT
Content-Length: 1270
  • OPTIONS确定资源支持哪些 HTTP 方法,例如,我们可以删除它或通过 PUT 更新它吗?
  • 检查资源是否已更改。这在维护资源的缓存版本时非常有用
  • 在进行可能昂贵的检索之前,检索关于资源的元数据,例如它的媒体类型或它的大小
  • HEAD, OPTIONS测试资源是否存在并可访问。例如,验证应用程序中用户提交的链接

这里 是一篇关于 HEAD 和 OPTION 如何适应 REST 架构的精彩而简洁的文章。