cro*_*vel 5 rest json web-services
我正在构建一个在任何地方使用JSON的Web服务.
现在我需要一个HTTP方法来检索资源的属性(例如,像read-only,write,ACL这样的属性).看起来只有一种HTTP方法用于此目的:PROPFIND.
但是规范明确指示使用XML.
无论如何,使用带有JSON接口的动词是疯了吗?我也担心这PROPFIND是WebDAV扩展的一部分.
如果这是不行的,那么在面向JSON的Web服务中检索资源属性的推荐动词或推荐方法是什么?
在"代表性的状态转移"架构中,这个想法是:
GET,HEAD是安全的,PUT并且DELETE是幂等的),因此,使用除HTTP中定义的动词之外的其他动词是个坏主意.事实上,每个WebDAV动词都可以使用HTTP谓词(以及相应的标题和资源)来完成.
在RESTful世界中,您有以下几种选择:
HEAD如果需要获取没有数据的元数据,则可以使用动词).REST 与协议无关,但它经常通过 HTTP 协议实现。WebDAV 是 HTTP 协议的扩展。因此,理论上您也可以使用WebDAV 方法(这并不意味着您应该这样做)。
来自菲尔丁论文的第六章:
[...] HTTP 请求语义由请求方法名称表示。只要可以在客户端、服务器以及它们之间的任何中介之间共享一组可标准化的语义,就允许方法扩展。[...]
保持简单并坚持使用标准 HTTP 方法:它们众所周知,并且受到大量客户端和代理的支持。
请参阅下面的几种方法,您可以使用 HTTP 动词从资源中获取元数据:
您可以metadata为您想要请求某些元数据的资源拥有一个子资源。例如,要获取用户资源的元数据,就很简单:
GET /api/users/johndoe/metadata HTTP/1.1
Host: example.com
Accept: application/json
Run Code Online (Sandbox Code Playgroud)
您可以考虑的另一种方法是自定义媒体类型,例如application/vnd.company.metadata+json用于表示资源的元数据。所以,你会得到如下内容:
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company.metadata+json
Run Code Online (Sandbox Code Playgroud)
通过这种方法,同一端点可以支持其他媒体类型,例如application/json和/或application/vnd.company+json返回数据本身:
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/json
Run Code Online (Sandbox Code Playgroud)
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company+json
Run Code Online (Sandbox Code Playgroud)
如果需要,application/vnd.company.full+json可以使用另一种媒体类型来请求资源的数据和元数据:
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company.full+json`
Run Code Online (Sandbox Code Playgroud)
GitHub API使用类似的方法。
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |