如何以RESTful方式实现资源“编辑”表单?

时间:2008-09-05 15:11:44

标签: rest

我们正在尝试为我们现在拥有的应用程序实现REST API。我们希望使用REST API公开各种资源的读/写功能。我们如何实现这个“形式”部分?我通过创建基本上用作方法调用并返回数据的RESTful URL来了解如何公开我们数据的“读取”:

GET /restapi/myobject?param=object-id-maybe

...并返回表示某些数据结构的XML文档。细

但是,通常,在Web应用程序中,“编辑”将涉及两个请求:一个用于加载当前版本的资源并使用该数据填充表单,另一个用于将修改后的数据发回。

但是我不知道如何使用REST映射到的HTTP方法做同样的事情。这是一个PUT,对吗?有人可以解释一下吗?

(补充考虑:UI主要使用AJAX完成)

- 更新:这肯定有帮助。但是,我对服务器端仍然有点困惑?显然,我不仅仅是处理文件。在服务器上,响应请求的代码应该过滤请求方法以确定如何处理它?这是读写之间的“切换”吗?

4 个答案:

答案 0 :(得分:11)

您可以使用许多不同的替代品。 microformats wiki提供了一个很好的解决方案,RESTful JSON工作人员也参考了这个解决方案。尽可能接近标准,真的。

 Operate on a Record

GET /people/1
    return the first record 
DELETE /people/1
    destroy the first record 
POST /people/1?_method=DELETE
    alias for DELETE, to compensate for browser limitations 

GET /people/1/edit
    return a form to edit the first record 
PUT /people/1
    submit fields for updating the first record 
POST /people/1?_method=PUT
    alias for PUT, to compensate for browser limitations 

答案 1 :(得分:3)

我认为您需要将数据服务与Web UI分开。在提供数据服务时,RESTful系统是完全合适的,包括使用浏览器不支持的动词(如PUT和DELETE)。

在描述用户界面时,我认为大多数人会将“RESTful”与“漂亮,可预测的URL”混为一谈。当您描述Web UI时,我不会那么担心纯粹的RESTful URL语法。

答案 2 :(得分:2)

如果您通过纯HTML提交数据,则只能使用基于POST的表单。 POST请求发送到的URI不应是要修改的资源的URI。您应该POST到每次添加新创建的资源的集合资源(使用 Location 标头中的新资源的URI和 202 状态代码)或POST更新资源,使用请求的内容(或自定义标头)中提供的URI更新资源。

如果您正在使用XmlHttpRequest对象,则可以将方法设置为PUT并将数据提交到资源的URI。如果服务器为尚未存在的资源提供有效的URI,这也适用于空表单。第一个PUT将创建资源(返回 202 )。如果相同的数据或修改现有资源,后续PUT将不执行任何操作(在任何一种情况下,除非发生错误,否则返回 200 )。

答案 3 :(得分:0)

加载应该只是一个普通的GET请求,保存新数据应该是对当前拥有数据的URL的POST ...

例如,从http://www.example.com/record/matt-s-example加载当前数据,然后更改数据,并使用新数据POST回到相同的URL。

创建新记录时可以使用PUT请求(即将数据保存在当前不存在的URL),但实际上只是POSTing可能是一种更好的入门方法。

相关问题