我正构建一个在任何地方都使用JSON的Web服务。
现在我需要一个HTTP方法来检索资源的属性(例如,像read-only,write,ACL等属性)。看起来只有一种HTTP方法用于此目的:PROPFIND
。
但是the spec明确指示使用XML。
无论如何,使用带有JSON接口的动词是疯了吗?
我还担心PROPFIND
是WebDAV扩展的一部分。
如果这是不行的,那么在面向JSON的Web服务中检索资源属性的推荐动词或推荐方法是什么?
答案 0 :(得分:5)
在“代表性的国家转移”架构中,这个想法是:
GET
和HEAD
安全,PUT
和DELETE
幂等),因此,使用除HTTP中定义的动词之外的其他动词是个坏主意。事实上,每个WebDAV动词都可以使用HTTP谓词(以及相应的标题和资源)来完成。
在RESTful世界中,您有几种选择:
HEAD
动词。)答案 1 :(得分:4)
REST与协议无关,但它经常通过HTTP协议实现。 WebDAV是HTTP协议的扩展。所以,理论上你也可以使用WebDAV methods(它并不意味着你应该)。
来自菲尔丁论文的chapter 6:
6.3.1.2 Extensible Protocol Elements
[...] HTTP请求语义由请求方法名称表示。只要可以在客户端,服务器和它们之间的任何中介之间共享可标准化的语义集,就允许方法扩展。 [...]
保持简单并坚持标准的HTTP方法:它们是众所周知的,它们得到了大量客户端和代理的支持。
请参阅下面的一些方法,您可以使用HTTP动词从资源中获取元数据:
您可以为要请求某些元数据的资源提供metadata
子资源。例如,要获取用户资源的元数据,它将非常简单:
GET /api/users/johndoe/metadata HTTP/1.1
Host: example.com
Accept: application/json
您可以考虑的另一种方法是自定义媒体类型,例如application/vnd.company.metadata+json
,用于表示资源的元数据。所以,你会得到以下内容:
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company.metadata+json
使用此方法,同一端点可以支持其他媒体类型,例如application/json
和/或application/vnd.company+json
来返回数据本身:
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/json
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company+json
如果需要,可以使用其他媒体类型(例如application/vnd.company.full+json
)来请求资源的数据和元数据:
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company.full+json`
GitHub API使用了类似的方法。
答案 2 :(得分:1)
当您尝试制作HTTP Web服务时,还有一些方法可以在HTTP标头中使用。 而且还有许多属性属性,其中包含有关请求/响应的信息 喜欢 “状态”,“内容类型”等。
您还可以在Web服务中设置这些属性。 喜欢
“Content-Type”:“application / json”;
此处,当您在任何“请求/响应”中设置此属性时,这意味着您只允许“请求/响应”中的特定MIME类型数据。
我对HTTP请求/响应有基本的了解我希望此信息可以帮助您请检查并确保您提供了内容相关设置以及相应的 MIME类型。< / p>
否则您可以点击此链接www.webdev.org