是什么样的REST方式向用户显示表单

时间:2014-06-12 04:03:59

标签: html json web-services rest web

我正在阅读有关REST的问题

What exactly is RESTful programming?

在阅读时,我知道客户端独立于服务器,客户端不需要构建任何东西。

我想知道当我们构建用户注册等表单时。那么REST的做法是什么。

我的意思是当GET/user/new然后

  1. 服务器是否必须以html
  2. 发送完整的FORM
  3. 仅发送JSON中的字段,表单由客户自己构建
  4. 但是,如果我只是发送字段,那么会有很多复杂性,那么

    之类的东西
    1. 隐藏的字段
    2. 选择框的默认值
    3. 这个字段的逻辑怎么样可以大于30等

3 个答案:

答案 0 :(得分:1)

正如您已经知道的那样,REST是一种在客户端和服务器之间进行通信的方式。但是,这里的问题是被定义为“客户”的问题。就个人而言,我倾向于认为浏览器本身并不是客户端:相反,客户端是用JavaScript编写的,而浏览器只是执行它的渠道。


为了论证,您希望查看用户'1414'的详细信息。浏览器将被定向到以下位置:

/UserDetails.html#1414

这将加载静态文件ViewUser.html,其中包含可能必需的所有表单字段,以及(通过<script>标记)您的JavaScript客户端。客户端将加载,查看URL并进行RESTful调用:

GET /services/Users/1414

将发回与该用户相关的JSON数据。当用户点击“保存”时,客户端将进行以下调用:

PUT /services/Users/1414

存储数据。

在您的示例中,您想知道这对新用户的效果如何。浏览器将定向到的URL为:

/UserDetails.html#0

(或#new,或只是# - 只是告诉JavaScript这是一个新客户端。这不是一个RESTful URL,所以精确的细节是无关紧要的)。

浏览器会再次加载静态文件ViewUser.html和您的JavaScript客户端,但这次不会在用户服务上进行GET - 没有用户可以下载。此外,当用户被保存时,这次呼叫将是:

POST /services/Users/

服务理想地返回302到/services/Users/1541 - 创建对象的位置。请注意,由于这是在客户端而不是浏览器中处理的,因此不会发生实际的重定向。

答案 1 :(得分:0)

有多种方法可以做你想做的事。

  • 您可以使用GET for /user/newcreate-form链接关系来获取单个链接。这可以是纯HTML或HTML片段,也可以是模式描述,几乎是你想要的任何东西(结果将比其他解决方案的可重用性更低)。

  • 您可以使用支持表单描述的标准MIME类型。例如HAL form extensioncollection+json

  • 您可以使用RDF格式,例如JSON-LD,并使用Hydra等适当的词汇。

答案 2 :(得分:0)

&#34;表单&#34;对于超媒体API,可以用#34;形式识别&#34;媒体类型,例如Mason(https://github.com/JornWildt/Mason),Hydra(http://www.markus-lanthaler.com/hydra/)或Sirene(https://github.com/kevinswiber/siren)。在梅森(这是我的项目)你可以有一个&#34;创建用户&#34;像这样的行动:

{ "@actions": { "create-user": { "type": "json", "href": "... URL to resource accepting the POST ...", "method": "POST", "title": "Create new user", "schemaUrl": "... Optional URL to JSON schema definition for input ..." "template": { "Windows Domain": "acme" } } } }

客户端可以获取包含上述操作的资源,找到它的名称&#34; create-user&#34;并以这种方式告诉使用哪种方法,在哪里应用它,如何形成有效载荷(在这种情况下,它是由外部模式定义描述的JSON)和一些默认值(&#34;模板&#34;对象)。

如果您需要更复杂的描述(例如您提到的选择列表和验证规则),那么您将独自完成并且必须在您自己的数据中编码该信息 - 或者使用HTML或XForms。