Php 使用REST实现投票

Php 使用REST实现投票,php,web-services,rest,web-applications,Php,Web Services,Rest,Web Applications,我正在开发我的第一个web应用程序,我有这个基本的疑问 我有一组帖子,我想让用户投票。我正在使用PHP,所以我有一个article.PHP脚本,其中包含处理HTTP请求的代码 目前,我实现了文章创建,它使用通过POST HTTP请求发送的数据(使用html表单)。返回的文章id是我从存储文章的数据库中获得的 类似地,我处理GET请求并基于作为参数发送的id返回一篇文章。如果未定义参数,则返回所有项目的列表 目前我还没有重写任何url,所以请求的格式是article.php?id=xxx 现在我想

我正在开发我的第一个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)中没有参数


还有,我如何区分这个动作和其他动作?我是否应该添加一些“action”参数,如
article.php?id=1234&action=vote

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

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

POST-article.php/id/1:用id 1修改艺术品

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

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

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

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

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


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

重写不保留帖子正文吗?是的,但是我如何将url中的数据(在本例中是文章id)传递到帖子正文中?您只需从
$\u get['id']
获取
id
文件中获取内容('php://input')
因为它不是url编码的。@enenen是否使用Ajax与问题无关。使用GET会破坏REST功能。啊哈!事实上,我可以在POST请求中使用参数,这是我缺少的一点。我认为部分原因是在POST请求中使用$GET不够清晰。谢谢