Рестлер: Сложные типы объектов в качестве параметров


Привет, друзья-рестлеры,

В настоящее время я пытаюсь переключиться на 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 изначально, что, хотя и было невозможно. Это не решает проблему автоматического документирования, но все равно очень ценно.

Author: Gingonic, 2013-05-10

2 answers

Restler 3 RC4 выпущен вчера с функцией пользовательских параметров класса

Прочитать http://restler3.luracast.com/param.html#type для примера и тестирования кода

 1
Author: Arul Kumaran, 2013-08-16 02:56:28

@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);
 0
Author: SafeY, 2013-06-04 11:29:48