我们正在尝试为我们现在拥有的应用程序实现REST API。我们希望使用REST API公开各种资源的读/写功能。我们如何实现这个“形式”部分?我通过创建基本上用作方法调用并返回数据的RESTful URL来了解如何公开我们数据的“读取”:
GET /restapi/myobject?param=object-id-maybe
...并返回表示某些数据结构的XML文档。细
但是,通常,在Web应用程序中,“编辑”将涉及两个请求:一个用于加载当前版本的资源并使用该数据填充表单,另一个用于将修改后的数据发回。
但是我不知道如何使用REST映射到的HTTP方法做同样的事情。这是一个PUT,对吗?有人可以解释一下吗?
(补充考虑:UI主要使用AJAX完成)
- 更新:这肯定有帮助。但是,我对服务器端仍然有点困惑?显然,我不仅仅是处理文件。在服务器上,响应请求的代码应该过滤请求方法以确定如何处理它?这是读写之间的“切换”吗?
答案 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可能是一种更好的入门方法。