使用REST实现投票

时间:2012-11-14 10:22:44

标签: php web-services rest web-applications

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

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

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

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

目前我还没有重写任何网址,因此请求的格式为article.php?id=xxx

现在我想实施投票,这就是我遇到问题的地方。根据REST,我应该在特定资源上使用POST(假设投票不是幂等的),所以我会向/article/1234发送一个POST请求,主体"+1"进行正投票。

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

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

1 个答案:

答案 0 :(得分:1)

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

获取article.php / id / 1 :检索ID为1的文章

POST article.php / id / 1 :改变id为1的artcile

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

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

只要将投票作为一个简单的计数器实施,就完全可以通过添加一个投票来实施后者。 您可以通过提供投票标识来重新定义此逻辑,例如如果你想为投票添加更多属性,比如进行投票的用户。

当你要求重写时,如果应用程序能够通过post-request从url获取数据:是的,这完全可能。对文章?id = 1的POST请求将提供$ _GET ['id']。

如上所示的重写部分是完全可选的。只要ONE url识别出一个资源,REST就不会对网址的“niceliness”感兴趣。

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