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

Предстои ми да проектирам уеб приложение на Zend, което, за да изобрази своите изгледи, ще използва данни, които също трябва да бъдат извличани чрез JSON-RPC api, за мобилни собствени приложения. Чудех се как да структурирам проекта, за да запазя тези две части независими. Уеб приложението е предназначено да се стартира, като отидете на следния URL адрес:

http://www.domainname.com

След това клиентът за iOS и Android трябва да може да използва JSON-RPC API чрез изпращане на заявки за публикации до

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

Трябва ли уеб приложението и api да бъдат две отделни zend приложения или не? Скептичен съм относно това, защото тъй като данните, които ще управляват, са по същество едни и същи, класовете за манипулиране на заявки и контролерите за webapp ще имат куп подобен код за извличане и манипулиране на данните, които трябва да бъдат върнати.

Има ли добър, изчистен и гъвкав начин да се използва един и същ „back end“ код както за 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