Как использовать один и тот же внутренний код как с веб-приложением Zend, так и с сервером Zend JSON-RPC?

Я собираюсь разработать веб-приложение Zend, которое для отображения своих представлений будет использовать данные, которые также должны быть получены через API JSON-RPC для собственных мобильных приложений. Мне было интересно, как структурировать проект, чтобы эти две части были независимыми. Веб-приложение предназначено для запуска по следующему URL-адресу:

http://www.domainname.com

Затем клиент iOS и Android должен иметь возможность использовать API JSON-RPC, отправляя почтовые запросы на

http://www.domainname.com/api/

Должны ли веб-приложение и API быть двумя отдельными приложениями Zend или нет? Я скептически отношусь к этому, потому что, поскольку данные, которыми они будут управлять, практически одинаковы, классы обработчиков запросов и контроллеры для веб-приложения будут иметь кучу похожего кода для извлечения и обработки возвращаемых данных.

Есть ли хороший, чистый и гибкий способ использовать один и тот же «бэкэнд» код как для сервера JSON-RPC, так и для веб-приложения?

Я хотел бы избежать дублирования кода, но также сделать вызовы API максимально быстрыми.

Спасибо всем, кто поможет!


person Andrea Sprega    schedule 20.12.2011    source источник


Ответы (1)


На самом деле вы можете достичь этого довольно легко.

Когда контроллер справится с этим, используйте...

if ($this->_request->isXmlHttpRequest())
{
     // Code here
}

Если вы сохраняете данные, процедура может быть такой же. Обычно вы просто используете это, чтобы вернуть представление или JSON. Например...

// Save the data here

if ($this->_request->isXmlHttpRequest())
{
     die(Zend_Json::encode(array('success' => true)));
}
else
{
     // View specific data here
}

Я надеюсь, что это помогает и имеет смысл!

person Oomta    schedule 20.12.2011
comment
Спасибо, это полезно. Поскольку я еще не на 100% освоился с Zend, я также просил совета по поводу структуры папок. Что, если я хочу сохранить веб-приложение и API в одном проекте, но получить к ним доступ, используя два разных URL-адреса? (пожалуйста, обратитесь к исходному вопросу) Все учебники, которые я видел, предполагают, что приложение Zend будет доступно только через index.php в папке web_root. - person Andrea Sprega; 20.12.2011
comment
Извините, пропустил эту часть! Возможно, вы могли бы сделать плагин, который достиг бы этого? Ознакомьтесь с процессом отправки Zend Framework MVC Controller. Вероятно, вы могли бы написать что-то, что проверяло бы URL-адрес и обрабатывало его соответствующим образом. В качестве альтернативы, вы могли бы сделать два отдельных модуля? Поместите весь код, который вы хотите для веб-приложения, в отдельную папку с именем api. Доступно множество подходов. Ознакомьтесь с документацией Zend Controller, она может пролить свет. - person Oomta; 21.12.2011