HTML的宁静设计模式

时间:2015-10-22 18:42:13

标签: html rest

我正在努力坚持两者 JSON和HTML的Restful设计模式。我的问题是创建新资源的设计(其中包括,但这是问题的要点)。 IE:

JSON – POST to /resource creates a new resource.
JSON – GET to /resource returns a list of resources.
JSON – GET to /resource/{id} returns a resource.
HTML – POST to /resource creates a new resource.
HTML – GET to /resource returns a list of resources.
HTML – GET to /resource/{id} returns a resource.

到目前为止一切都很好 - 但是我需要一个HTML表单来实际创建要发送到HTML POST的数据。显然POST和GET已经做了。我可以使用以下其中一个来返回HTML表单:

HTML – GET to /resource?CREATE
HTML - GET to /resource?action=CREATE
HTML – GET to /resources/CREATE

但它们看起来像一个kludge而不是那么直观。 有什么想法或想法吗?

编辑 - 请参阅下面我的问题的答案。目前这是(我认为)最好的选择。

4 个答案:

答案 0 :(得分:1)

我确实会使用像/resources/create这样的东西。如果您想允许非数字标识符,那么这将不起作用。在这种情况下,您可以识别带有前缀的资源,例如/resources/resource-{id},然后您仍然可以使用/resources/create

我发现这篇博文非常有助于做出URI方案决策:http://blog.2partsmagic.com/restful-uri-design/

答案 1 :(得分:0)

事实上,当您想在RESTful服务中处理多种格式时,您应该利用内容协商(CONNEG)。

我的意思是:

  • 设置Content-Type标头以指定已发送数据的类型
  • 设置Accept标头以指定您要接收的数据类型

服务器资源应利用这些提示进行适当的数据转换。

对于JSON,内容类型显然是application/json。对于HTML表单,您应该利用内容类型application/x-www-form-urlencoded(或multipart/form-data,如果您还要上传文件)。有关详细信息,请参阅the specification

否则,您不应该在URL中使用操作,因为它不是真正的RESTful。 HTTP谓词应确定要对资源执行的操作。我的意思是,要创建资源,应该使用POST方法。 GET方法旨在检索资源的状态。

有关详细信息,您可以查看此博客文章:

答案 2 :(得分:0)

我有一个答案。我将从HTML页面使用标准RESTful POST,但是当我没有发送表单参数且我的接受标题是text / html时,我将向请求者发送HTML表单。保持RESTful URI设计并允许干净的HTML表单+流程(2步)。

HTML - POST - /resources (with no form attributes) generates a HTML form
HTML - POST - /resources (with form attributes) adds a resource
JSON - POST - /resources (with form attributes) adds a resource

好的,它不是"严格来说" RESTful,因为我正在发布但没有创建新资源所以理论上我应该使用GET,但它是设计不匹配的最佳选择。

如果有人能提供更好的解决方案,我仍然全力以赴: - )

答案 3 :(得分:0)

我宁愿添加名为/templates/的端点和端点,它返回模板/表单/给定操作所需的任何内容。似乎服务器应该不知道这种形式存在。它可以接受或拒绝请求及其客户工作,以适当的格式提交请求。

我猜你混合处理视图和准备RESTful端点。后端站点应完全不知道需要某种视图/表单的事实。准备这样的表格是客户的工作。