如何为编辑表单执行RESTful请求?

时间:2009-11-01 15:37:15

标签: rest

我认为我对REST有基本的了解,但我坚持的是如何请求HTML表单来编辑资源。

根据我的理解,如果资源是

user/12

你使用内容类型“text / html”进行GET,然后你会得到一些显示该用户详细信息的html。

我不明白的是如何取回html,它会显示一个表格,允许您编辑用户的详细信息(并最终发回PUT以更新用户。)

我见过:

user/12/edit 
user/12;edit

对我来说,我感觉不到超级RESTful。就个人而言,一无所知(包括它是否有效)我会考虑在HTTP标题的“Accept:”行上传递某种edit = true参数。

有没有明确的方法呢?

编辑:我应该已经解释过我正在实施该服务,并希望了解正确的方式(如果存在的话)。

4 个答案:

答案 0 :(得分:2)

将HTML表单作为资源表示返回,将您的表示和数据紧密结合在一起。如果您只是返回基本资源表示(可以是HTML,但我不希望它具有表单元素),它将为您提供更多控制权,然后依靠我的客户端来标记数据采用可在HTML中编辑的方式。

此外,如果您要返回带有标记在其中的资源的HTML表单,表单数据将如何发送回服务器?浏览器通常仅支持表单操作的POST和GET - 但对已存在的资源执行POST不是RESTful;你想要做一个PUT而不是。在浏览器支持所有(或至少更多)HTTP方法之前,直接使用带有浏览器表单的RESTful API将会从根本上被打破(至少在REST约束的范围内)。

修改

要回答关于如何让客户端告知服务器它想要如何恢复资源的问题,您可以使用content negotiation。根据请求标头,服务器以适当的格式返回资源。它可能使用标头中的用户代理,或者客户端可能指定服务器可以遵循的特定Accept标头。由您和您的服务器应用程序来处理标题并返回适当的HTML表示(如果可用)。

<强> EDIT2:

关于返回不是RESTful的表单的声明,请参阅下面的评论。

答案 1 :(得分:2)

此类事物没有特殊的方法或标题(使用给定资源的可编辑表单的HTML进行响应)。使用查询字符串参数只会使情况变得更糟。

相反,人们可能在概念上将可编辑的表单本身视为资源,并为其指定路径/user/12/edit。 “回发”当然是PUT /user/12(或者,在Rails中,POST /user/12并在_method=PUT& ed实体之前添加POST

如果有人GET /user/12,则要求代表用户。当人GET /user/12/edit时,一个人要求表示用户,而不是直接表示用户。

这是REST的准确扩展吗?这是纯粹的REST吗?值得商榷。但是,你还要做什么呢?

答案 2 :(得分:1)

REST是一个概念,而不是一个实现。这意味着,虽然您对带有Content-Type of text / html返回html的RESTful URL的描述肯定是有效的,但它并不保证返回有效负载。它是REST服务的实现者,以返回表单中的数据。

从您正在请求的REST条目向后工作,并查看返回有效负载。这将告诉您需要了解的有关您使用该网址的所有信息,以及您需要在消费方面做多少工作。

答案 3 :(得分:1)

仅仅是为了它的价值--AFAIK,user / 12;编辑只用于Rails,只用了一两个月。它dropped相当快。