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

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

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

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

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

(额外考虑:UI 主要通过 AJAX 完成)

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

有帮助吗?

解决方案

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

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

其他提示

您可以使用许多不同的替代方案。提供了一个很好的解决方案 微格式维基 并且也被 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 

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top