3

我正在编写一个 API,并希望遵循 REST 方法。据我了解,如果我想让 API 用户更新特定记录,则应该支持类型请求。当然,他们没有做,他们需要传递新数据,我的问题是如何做到这一点(在我的具体情况下,只更新指定记录的一些字段,但这在这里不那么相关)。我可以想到两种方法:在请求正文中包含数据(使用 curl: )或在查询字符串中(使用 curl: )。PUT http://server/specific_resourceGETcurl -X PUT -d "key=value" http://server/specific_resourcecurl -X PUT http://server/specific_resource?key=value

不幸的是,无论我采用何种方法,似乎都很难获得所提供的数据。问题似乎是 PHP 只真正完全理解了两种 HTTP 方法,并且GET认为是用于文件上传。如果我在正文中包含数据,那么访问它的唯一方法似乎是通过调用。例如,不提供数据。同样,在超全球中也找不到信息。如果我不想处理原始请求正文,那么看来我必须将数据作为查询字符串参数发送,因为数据将显示为超全局的元素(等等)。POSTPUTfopen('php://input')http_get_request_body()$_REQUESTfopen('php://input')$_GET$_REQUEST

我专门使用 CakePHP,如果请求是 POST ,它似乎只会在我的控制器方法中填充form数组的数组。如果在请求 URL 中使用,无论请求方法如何,查询字符串参数都放在'数组中。毫不奇怪,我不是唯一遇到这种情况的人。paramsparamsurl

您建议的解决方案是什么?处理输入流?使用查询字符串参数?只是忘记PUT动词并POST改用?

4

2 回答 2

2

试试这个关于在 PHP 中为 REST 接口解析 PUT 数据的博客条目

于 2010-10-05T00:46:46.207 回答
0

使用服务器 http 方法变量来检查它是否是 PUT。

我建议您查看 SLIM 源代码以检查他们如何处理它

欢呼!

于 2014-02-26T10:44:34.310 回答