Luracast Restler: «Нейминг» возвращаемых объектов - PullRequest
2 голосов
/ 20 октября 2011

Я использую приятную среду Restler REST для предоставления некоторых ресурсов в базе данных различным клиентам.

Теперь при возврате результатов из сервиса формат выглядит примерно так (я использую сеть Restler).примеры сайтов приведены здесь в качестве основы):

[
 {
   "id": 1,
   "name": "Jac Wright",
   "email": "jacwright@gmail.com"
 }
]

Или в XML:

<?xml version="1.0"?>
<response>
  <item>
    <id>1</id>
    <name>Jac Wright</name>
    <email>jacwright@gmail.com</email>
  <item>
</response>

Меня немного беспокоит то, что в JSON структура является анонимной (если это правильнотермин для использования здесь?) и что в XML объект обернут в тег "item".Я хотел бы видеть возвращаемую структуру, обернутую именем типа ресурса.Например:

[
 "author": {
   "id": 1,
   "name": "Jac Wright",
   "email": "jacwright@gmail.com"
 }
]

и

<?xml version="1.0"?>
<response>
  <author>
    <id>1</id>
    <name>Jac Wright</name>
    <email>jacwright@gmail.com</email>
  <author>
</response>

Если я не до конца уловил соответствующий код, возможно ли это вообще без модификации самого Рестлера?

1 Ответ

3 голосов
/ 24 октября 2011

Пример , который вы указали , возвращает следующее

return array(
    array('id'=>1,  'name'=>'Jac Wright',   'email'=>'jacwright@gmail.com'),
    array('id'=>2,  'name'=>'Arul Kumaran', 'email'=>'arul@luracast.com'  ),
);

. Все, что нам нужно сделать, - это заключить отдельные массивы в другой массив под ключом 'author'.Например, в author.php

<?php
class Author {
    function post ($request_data){
        print_r($request_data);
        return $request_data;
    }
    function get() {
        return array('author'=> array(
                    array('id'=>1,  'name'=>'Jac Wright1', 'email'=>'jacwright@gmail.com'),
                    array('id'=>2,  'name'=>'Arul Kumaran3','email'=>'arul@luracast.com')
               ));
    }
}

Получается точный результат, который вы хотели получить для json и xml

author.xml:

<?xml version="1.0"?>
<response>
  <author>
    <id>1</id>
    <name>Jac Wright1</name>
    <email>jacwright@gmail.com</email>
  </author>
  <author>
    <id>2</id>
    <name>Arul Kumaran3</name>
    <email>arul@luracast.com</email>
  </author>
</response>

author.json:

{
  "author": [
    {
      "id": 1,
      "name": "Jac Wright1",
      "email": "jacwright@gmail.com"
    },
    {
      "id": 2,
      "name": "Arul Kumaran3",
      "email": "arul@luracast.com"
    }
  ]
}

Позвольте мне объяснить метод, который я также использовал, я использовал вышеуказанный метод post и опубликовал точную структуру xml, которую я хочу, ииспользовал print_r, чтобы найти соответствующую php структуру:)

Вот cURL, который я пробовал в командной строке

curl -X POST http://restler2.dev/test/naming_returned/author.xml -H "Content-Type: text/xml" -d '<response><author><id>1</id><name>Jac Wright</name><email>jacwright@gmail.com</email></author><author><id>1</id><name>Jac Wright</name><email>jacwright@gmail.com</email></author></response>'

и ответ

Array
(
    [author] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [name] => Jac Wright
                    [email] => jacwright@gmail.com
                )

            [1] => Array
                (
                    [id] => 1
                    [name] => Jac Wright
                    [email] => jacwright@gmail.com
                )

        )

)
<?xml version="1.0"?>
<response>
  <author>
    <id>1</id>
    <name>Jac Wright</name>
    <email>jacwright@gmail.com</email>
  </author>
  <author>
    <id>1</id>
    <name>Jac Wright</name>
    <email>jacwright@gmail.com</email>
  </author>
</response>

Для полноты позвольте мне поставить также шлюз index.php здесь

<?php
require_once '../../restler/restler.php';

#set autoloader
#do not use spl_autoload_register with out parameter
#it will disable the autoloading of formats
spl_autoload_register('spl_autoload');

$r = new Restler();
$r->addAPIClass('Author');
$r->setSupportedFormats('JsonFormat','XmlFormat');
$r->handle();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...