我正在阅读有关REST的问题
What exactly is RESTful programming?
在阅读时,我知道客户端独立于服务器,客户端不需要构建任何东西。
我想知道当我们构建用户注册等表单时。那么REST的做法是什么。
我的意思是当GET
为/user/new
然后
但是,如果我只是发送字段,那么会有很多复杂性,那么
之类的东西答案 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/new
和create-form
链接关系来获取单个链接。这可以是纯HTML或HTML片段,也可以是模式描述,几乎是你想要的任何东西(结果将比其他解决方案的可重用性更低)。
您可以使用支持表单描述的标准MIME类型。例如HAL form extension或collection+json。
答案 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。