【发布时间】:2012-11-02 20:08:49
【问题描述】:
我正在开发我的第一个 Web 应用程序并且有这个基本的疑问。
我有一组帖子,我希望允许用户对其进行投票。我正在使用 PHP,所以我有一个 article.php 脚本,其中包含处理 HTTP 请求的代码。
目前,我实现了使用通过 POST HTTP 请求(使用 html 表单)发送的数据的文章创建。返回的文章 id 是我从存储文章的数据库中得到的。
同样,我处理 GET 请求并根据作为参数发送的 id 返回一篇文章。如果没有定义参数,我返回所有文章的列表。
目前我还没有进行任何 url 重写,所以请求的格式为 article.php?id=xxx
现在我想实施投票,这就是我面临的问题。根据 REST,我应该在特定资源上使用 POST(鉴于投票不是幂等的),因此我会向 /article/1234 发送一个带有正文 "+1" 的 POST 请求以获得赞成票。
问题是,如何将上述内容映射到我的用例?假设进行了 url 重写,那将转化为什么?对article.php?id=1234 进行重写是行不通的,因为 POST 不接受 URI (AFAIK) 中的参数。
另外,我如何将这个动作与其他动作区分开来?我是否还应该添加一些“动作”参数,例如article.php?id=1234&action=vote?
【问题讨论】:
-
重写不保留POST正文吗?
-
确实如此,但是如何将 url 中的数据(在本例中为文章 ID)传递到 POST 正文中?
-
您只需从
$_GET['id']获取id并从file_get_contents('php://input')获取正文,因为它不是url 编码的。 -
@enenen 是否使用 Ajax 与问题无关。
-
使用 GET 会破坏 REST 的目的。
标签: php web-services rest web-applications