Рестлер: Сложные типы объектов в качестве параметров
Привет, друзья-рестлеры,
В настоящее время я пытаюсь переключиться на Restler в качестве нашего основного фреймворка Rest. Что действительно мотивировало мое решение, так это соблюдение чванства. Я нахожу весьма важным иметь хорошую автоматически созданную документацию для растущей системы.
Итак, моя проблема в том, что я не могу найти способ использовать "сложные объекты" в качестве параметров публикации, как указано в swagger здесь: https://github.com/wordnik/swagger-core/wiki/Parameters.
Уверен, что ты можно было бы просто извлечь все из "массива post assoc", а затем проверить на соответствие структурам объектов, но это не было бы задокументировано, и клиент не знал бы, какие структуры от него ожидаются. Следовательно, мне пришлось бы написать спецификацию от руки...
Пример:
/**
* Create a new Account, based on the structure of the Account Object
*
* @param Account $account {@from body}
*
* @return string
*
*/
protected function post(Account $account){...}
Это было бы просто указано как неопределенный "объект" в файле resource.json, а не как "сложный тип", связанный с объектом учетной записи (это отлично работает для возвращаемых объектов способ)
Ресурс.json
"parameters": [
{
"name": "REQUEST_BODY",
"description": "Paste JSON data here with the following property.<hr/><mark>account</mark> <i>(required)</i>: add <mark>@param {type} $account {comment}</mark> to describe here",
"paramType": "body",
"required": true,
"allowMultiple": false,
"dataType": "Object",
"defaultValue": "{\n \"account\": \"\"\n}"
}
],
Я что-то пропустил или эта функция не реализована?
Заранее спасибо, что помогли мне!
ОБНОВЛЕНИЕ: Мне удалось получить сериализованные объекты непосредственно из метода post изначально, что, хотя и было невозможно. Это не решает проблему автоматического документирования, но все равно очень ценно.
2 answers
Restler 3 RC4 выпущен вчера с функцией пользовательских параметров класса
Прочитать http://restler3.luracast.com/param.html#type для примера и тестирования кода
@igoru для вашего вопроса в комментарии используйте PHPDOC перед документацией функции
* @param {type} $variable {comment} **{@from body}**
Это **{@from body}**
сделает переменную, отправленную телом запроса.
Если вы хотите отправить его с php, используйте следующее:
<?php
$data = array("name" => "Another", "email" => "[email protected]");
$data_string = json_encode($data);
$ch = curl_init("http://restler3.luracast.com/examples/_007_crud/index.php/authors");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
echo($result);