4

我几乎不敢发布这个问题,必须有一个我忽略的明显答案,但我走了:

背景:我正在创建一个用于教育目的的博客(想学习 python 和 web.py)。我决定我的博客有帖子,所以我创建了一个 Post 类。我还决定可以创建、阅读、更新或删除帖子(所以 CRUD)。所以在我的 Post 类中,我创建了响应 POST、GET、PUT 和 DELETE HTTP 方法的方法)。到现在为止还挺好。

我目前遇到的问题是一个概念问题,我知道将 PUT HTTP 消息(带有已编辑的 Post)发送到 /post/52 应该使用 HTTP 消息的正文内容更新 ID 为 52 的帖子。

知道如何在概念上正确地提供(HTML)编辑页面。

这样做会不会:/post/52/edit 违反 URI 的概念,因为“编辑”不是资源,而是动作?

但另一方面,它是否可以被视为一种资源,因为所有 URI 将响应一个 GET 方法,它只会返回一个 HTML 页面?

所以我的最终问题是:如何以 RESTful 方式提供一个供用户编辑的 HTML 页面?

4

4 回答 4

4

另一种 RESTful 方法是使用查询字符串作为修饰符:/post/52?edit=1

另外,不要太拘泥于 REST 模型的纯粹性。如果您的应用与模型不完全吻合,那就打破规则。

于 2010-05-01T14:53:01.767 回答
3

没有像 RESTful URI 这样的东西。这是错误的概念,因为 URI 应该对客户端完全不透明。

如果它通过避免 URI 中的动词来帮助您正确实现 HTTP 统一接口,那很好,但不要受到 URI 外观的限制。将资源建模视为数据建模类型是非常有限的。RESTful 系统通常需要做的不仅仅是 CRUD 操作,因此您需要对系统中可用的资源有创意。

如果创建 URL 并取消引用它会返回 200 状态代码,则该 URL 引用资源。如果您创建另一个 URL 并且它也返回 200,那么这是一个差异资源。

这意味着:

http://example.org/customer/10.xml
http://example.org/customer/10.json
http://example.org/customer/10?format=xml
http://example.org/customer/10?format=json

是 4 种不同的资源,并且

http://example.org/customers
http://example.org/customers?closed=true
http://example.org/customers?page=2&pagelength=20

也是不同的资源。

因此,回答你的问题,如果你这样做

GET /post/52/edit 

它返回一个 200 状态码和一个表示,那么它必须是一个资源。

于 2010-05-01T19:56:55.563 回答
2

与其调用它/post/52/edit,不如调用它/post/52/editor呢?

现在它是一种资源。避免了困境。

于 2010-05-01T14:47:57.690 回答
0

我不认为 /object/id/action 是 REST 规范的一部分。

您的编辑器会成为所有对象的通用工具吗?那么也许你的 URL 应该看起来像

/editor/object/id

操作是一个 HTTP 动词( GET,PUT,DELETE,POST ),应该是 HTTP 请求的一部分,而不是 URL 的一部分。要获得更好的总结,请查看RESTful_web_services上的这篇 Wikipedia 文章。

于 2010-05-01T15:44:08.400 回答