11

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

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

...并返回一个表示某种数据结构的 XML 文档。美好的。

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

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

(额外考虑:UI 将主要使用 AJAX 完成)

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

4

4 回答 4

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 
于 2008-10-06T23:22:22.613 回答
3

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

在描述 UI 时,我认为大多数人会将“RESTful”与“不错的、可预测的 URL”混淆。当您描述 Web UI 时,我不会担心纯粹的 RESTful URL 语法。

于 2008-09-05T15:36:49.567 回答
2

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

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

于 2008-09-05T15:17:08.787 回答
0

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

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

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

于 2008-09-05T15:16:05.573 回答