2012-11-14 52 views
0

我正在处理我的第一个Web应用程序,并有这个基本的疑问。使用REST执行投票

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

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

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

目前我没有做过任何URL重写因此请求的格式为article.php?id=xxx

现在我想要实现的选票,而这正是我现在面临的一个问题。根据REST的说法,我应该在特定的资源上使用POST(因为投票不是幂等的),所以我会发送一个POST请求到/article/1234并附带一个"+1"正文投票。

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

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

+0

不重写保留POST正文吗? –

+0

它的确如此,但是如何将URL中的数据(本例中为文章ID)传递到POST正文中? – Dan

+0

您只需从'_ _GET ['id']''和'file_get_contents('php:// input')'获得'id',因为它不是URL编码。 –

回答

1

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

GET article.php/ID/1:检索与ID的第1条

POST article.php/ID/1:改变与ID的artcile 1

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

POST article.php/ID/1 /票:改变ID为的物品投票1

它是完全正确的实施后一个增加一个投票,只要投票实现为一个简单的计数器。 您可以通过给予投票身份来重新定义此逻辑,例如如果你想添加更多的属性投票,如投票的用户。

正如你所要求的重写,以及如果一个应用程序能够通过post请求从url中获取数据:是的,这完全有可能。对文章?id = 1的POST请求将有$ _GET ['id']可用。

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

希望这给了你一个如何继续的想法

+0

啊哈!我可以在POST请求中使用参数的事实就是我缺少的一点。我认为错误的一部分是在POST请求中使用$ _GET缺乏明确性。谢谢! – Dan