Как PHP REST API может получать PUTted данные? - PullRequest
3 голосов
/ 05 октября 2010

Я пишу API и хочу следовать REST-подходу.Насколько я понимаю, если я хочу позволить пользователям API обновлять определенные записи, должен поддерживаться запрос типа PUT <a href="http://server/specific" rel="nofollow">http://server/specific</a>_resource.Конечно, они не делают GET, и им нужно будет передать новые данные, и мой вопрос заключается в том, как это сделать (в моем конкретном случае я обновляю только некоторые поля указанной записи, но это не так.так актуально тут).Я могу придумать два подхода: включить данные в тело запроса (используя curl: curl -X PUT -d "key=value" <a href="http://server/specific" rel="nofollow">http://server/specific</a>_resource) или в строку запроса (используя curl: curl -X PUT <a href="http://server/specific" rel="nofollow">http://server/specific</a>_resource?key=value).

К сожалению, независимо от подходаЯ беру, кажется, очень трудно получить предоставленные данные.Кажется, проблема в том, что PHP действительно полностью понимает только два HTTP-метода, GET и POST, причем PUT считается для загрузки файлов .Если я включу данные в тело, то единственный способ получить к ним доступ, по-видимому, будет через fopen('php://input') вызов .Например, http_get_request_body() не предоставляет данные.Аналогично, информация не может быть найдена в суперглобальном $_REQUEST.Если я не хочу обрабатывать необработанное тело запроса с помощью fopen('php://input'), тогда получается, что я должен отправить данные в виде параметров строки запроса, так как данные будут отображаться как элементы суперглобального $_GET (и так же $_REQUEST).

Я специально использую CakePHP, и он, похоже, заполняет массив form массива params в методе моего контроллера , если запрос был POST .Параметры строки запроса помещаются в массив params 'url независимо от метода запроса, если он используется в URL-адресе запроса.Не удивительно, что я не единственный , кто столкнулся с этим.

Какое решение вы бы предложили?Обрабатывать входной поток?Использовать параметры строки запроса?Просто забудьте PUT глагол и используйте POST вместо этого?

Ответы [ 2 ]

2 голосов
/ 05 октября 2010
0 голосов
/ 26 февраля 2014

Используйте переменную метода http сервера, чтобы проверить, является ли это PUT.

Я предлагаю вам взглянуть на исходный код SLIM, чтобы проверить, как они его обрабатывают

cheer!

...