Отправка массивов в службы REST в CakePHP - PullRequest
0 голосов
/ 23 мая 2009

В настоящее время я пишу сервис REST с использованием CakePHP, и мне было интересно, как я могу отправить массив item_ids через REST для действия.

class ItemsController extends AppController {

var $components = array('RequestHandler');
var $helpers = array('Text', 'Xml');

function index()
{

}

function create($itemsArr)
{
        //handle $itemsArr here and sends data as xml to views.
}

}

Наверное, мой настоящий вопрос: как будет выглядеть запрос?

http://mysite/items/create/???

Полагаю, я могу передать значения в качестве 1 аргумента, используя implode(someSeperator, array), но есть ли лучшее решение?

Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 25 декабря 2009

Это не ОТДЫХ. REST - это использование HTTP, а не XML!

Типичный запрос HTTP для создания элемента будет выглядеть следующим образом

PUT http://mysite/items/ HTTP/1.1
Host: xxxxx

<myitem>
<text> asdasdas </text>
</myitem>

И вы можете использовать в теле запроса все, что захотите. XML, JSON, PHP SERIALIZE или ваш собственный формат данных.

1 голос
/ 23 мая 2009

Если вы действительно хотите быть RESTful по этому поводу, вам определенно нужно использовать POST-запрос для создания записей. Это если вы хотите быть строгими в отношении стандарта, но это также поможет вам, потому что я читаю, что длина вашего массива может сильно варьироваться - иногда 1 ID, возможно, 30 других раз и т. Д. Строки запроса URI делают (или использовали для? ) иметь максимальный лимит символов, с которым вы можете столкнуться.

Если вы выполняете запрос POST, вы легко можете передать список с разделителями-запятыми (подумайте о том, как передается имя поля с несколькими флажками) или, мой любимый механизм, массив в кодировке JSON (представленный в виде строки это может быть легко декодировано в JSON с другой стороны.

0 голосов
/ 23 мая 2009

другой вариант:

$safedata = base64_encode(serialize($arrayofdata));

и передать его в URL как безопасную строку.

затем распакуйте его:

$data = unserialize(base64_decode($safedata);
0 голосов
/ 23 мая 2009

Это действительно относится к любой веб-странице, а не только к CakePHP.

Любая веб-страница, которая хочет отправить большое количество полей, должна включить их все в свой запрос POST.

Если бы у вас была форма веб-страницы с 50 входами и отправкой внизу, страница по умолчанию сериализировала бы данные и отправила их в запросе формы.

Если вы не хотите, чтобы все данные отправлялись в отдельных столбцах, то использование разделителя также работало бы нормально и означало бы, что все они имеют 1 параметр.

Что-то вроде:

http://mysite/items/create?mydata=23-45-65-32-43-54-23-23-656-77
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...