0

我正在开发我的第一个 Web 应用程序并且有这个基本的疑问。

我有一组帖子,我想让用户对其进行投票。我正在使用 PHP,所以我有一个article.php脚本,其中包含处理 HTTP 请求的代码。

目前,我实现了使用通过 POST HTTP 请求(使用 html 表单)发送的数据的文章创建。返回的文章 id 是我从存储文章的数据库中获得的。

同样,我处理 GET 请求并根据作为参数发送的 id 返回一篇文章。如果没有定义参数,我会返回所有文章的列表。

目前我还没有进行任何 url 重写,所以请求的形式是article.php?id=xxx

现在我想实施投票,这就是我面临的问题。根据 REST,我应该在特定资源上使用 POST(鉴于投票不是幂等的),因此我会向/article/1234正文发送一个 POST 请求以"+1"获得正面投票。

问题是,如何将上述内容映射到我的用例?假设进行了 url 重写,那将转化为什么?重写article.php?id=1234将不起作用,因为 POST 不接受 URI (AFAIK) 中的参数。

而且,我如何将这个动作与其他动作区分开来?我还应该添加一些“动作”参数article.php?id=1234&action=vote吗?

4

1 回答 1

1

似乎没有真正了解 REST-ful 应用程序。使用 GET 检索文章并使用 POST 对其进行编辑很好,但是您必须将其扩展到投票。REST-ful 应用程序假设一个 url 标识一个资源。因此,您必须将投票视为自己的资源(与文章相关)。所以,你的应用程序应该像这样工作

GET article.php/id/1 : 检索 id 为 1 的文章

POST article.php/id/1 : 更改 id 为 1 的文章

GET article.php/id/1/votes : 检索 id 为 1 的文章的投票

POST article.php/id/1/votes : 更改 id 为 1 的文章的投票

只要将投票实现为简单的计数器,就可以通过添加一个赞成票来实现后一个。您可以通过赋予投票标识来重新定义此逻辑,例如,如果您想为投票添加更多属性,例如进行投票的用户。

正如您要求重写以及应用程序是否能够通过后请求从 url 获取数据:是的,这完全有可能。对 article?id=1 的 POST 请求将有 $_GET['id'] 可用。

如上所示的重写部分是完全可选的。REST 对 url 的“漂亮”不感兴趣,只要一个 url 标识一个资源。

希望这能让您了解如何继续

于 2012-11-14T10:43:13.117 回答