首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST中是否应该将WebDAV PROPFIND方法与JSON结合使用?

问REST中是否应该将WebDAV PROPFIND方法与JSON结合使用?
EN

Stack Overflow用户
提问于 2016-04-28 10:08:35
回答 3查看 2.1K关注 0票数 6

我正在构建一个到处使用JSON的web服务。

现在,我需要一个HTTP方法来检索资源的属性(例如,属性如只读、写、ACL等等)。看起来只有一个HTTP方法用于这个目的:PROPFIND。

然而,规格明确地指示使用XML。

用那个带有JSON接口的动词是不是太疯狂了?我还担心PROPFIND是WebDAV扩展的一部分。

如果这是不接受的,那么推荐的动词是什么,还是推荐的在面向JSON的web服务中检索资源属性的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-17 17:23:08

在“具象状态转移”体系结构中,其思想是:

  • 使用一组非常有限的输入/输出动词,其形式属性可以普遍定义(例如,GET和HEAD是安全的,PUT和DELETE是幂等的),
  • 用无限数量的资源来规避这少量的动词。

因此,使用HTTP中定义的谓词以外的其他谓词是个坏主意。事实上,每个WebDAV谓词都可以使用HTTP谓词(以及适当的头和资源)来完成。

在RESTful世界中,您有几种选择:

  • 为了定义一种新的元数据资源,
  • 若要将数据和元数据混合到同一资源的表示中,
  • 若要将元数据管理为headers (请注意,如果需要获取没有数据的元数据,可以使用HEAD谓词)。
票数 5
EN

Stack Overflow用户

发布于 2016-05-17 19:21:58

REST与协议无关,但它通常是通过HTTP协议实现的。WebDAV是HTTP的扩展。因此,理论上您也可以使用WebDAV方法 (这并不意味着您应该使用)。

来自菲尔丁的第六章论文:

6.3.1.2可扩展的议定书要素 ..。HTTP请求语义由请求方法名称表示。每当可以在客户端、服务器以及它们之间的任何中介之间共享可标准化的语义集时,就允许进行方法扩展。..。

保持简单,并坚持使用标准的HTTP方法:它们是众所周知的,并且得到了大量客户端和代理的支持。

请参阅下面几种使用HTTP谓词从资源中获取元数据的方法:

使用子资源

您可以为要请求一些元数据的资源提供一个metadata子资源。例如,要获取用户资源的元数据,它将非常简单,如:

代码语言:javascript
复制
GET /api/users/johndoe/metadata HTTP/1.1
Host: example.com
Accept: application/json

使用自定义媒体类型

您可以考虑的另一种方法是用于表示资源元数据的自定义媒体类型(如application/vnd.company.metadata+json )。因此,您将得到如下内容:

代码语言:javascript
复制
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company.metadata+json

使用这种方法,同一个端点可以支持其他媒体类型,如application/json和/或application/vnd.company+json,以返回数据本身:

代码语言:javascript
复制
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/json
代码语言:javascript
复制
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company+json

如果需要,可以使用另一种媒体类型(如application/vnd.company.full+json )请求资源的数据和元数据:

代码语言:javascript
复制
GET /api/users/johndoe HTTP/1.1
Host: example.com
Accept: application/vnd.company.full+json`

GitHub API也使用了类似的方法。

票数 4
EN

Stack Overflow用户

发布于 2016-05-19 09:47:26

当您尝试制作HTTP服务时,当然也有一些方法可以在HTTP报头中使用。此外,还有许多属性属性,其中包含有关请求/响应的信息,如"status“、”Content“等。

还可以在web服务中设置这些属性。喜欢

“内容-类型”:“应用程序/json”;

在这里,当您在任何“请求/响应”中设置此属性时,这意味着您只允许“请求/响应”中特定的MIME类型数据。

我对HTTP /Response有基本的理解,我希望这个信息将帮助您,请检查并确保您提供了与内容相关的设置和适当的MIME类型。

否则,您可以按照这个链接www.webdev.org。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36911449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档