Zend Framework1.12 Услуги для отдыха для веб и мобильных приложений
Я новичок в Zend Framework и хотел бы создать веб-портал, который предлагает услуги. Услуги будут использоваться как веб-приложением, так и мобильным приложением. Я использую статью Криса Дэниелсона
http://www.chrisdanielson.com/2009/09/02/creating-a-php-rest-api-using-the-zend-framework/) в качестве основы для.
Мой вопрос заключается в том, иду ли я в правильном направлении. В настоящее время я обращаюсь к услугам как http://www.zendrestexample.com/version.
1) Мне нужно использовать URL-адрес как http://www.zendrestexample.com/api/version
вместо.
2) Нужно ли мне использовать Zend Restserver для написания сервисов?
3) Могу ли я использовать один и тот же сервис для мобильного приложения и веб-приложения?
4) Нужно ли мне использовать Zend Rest Client, чтобы использовать эти услуги?
Пожалуйста, помогите мне..
1 ответ
Ну, вы не используете кучу файлов PHP, чтобы сделать это... поэтому я думаю, что вы на правильном пути =). Реализация в статье хорошо, но очень старая... была написана> 4 года назад. Я бы предложил посмотреть на Zend_Soap_Server, Zend_Json_Server или Zend_Rest_Server. На мой взгляд, решение для мобильных устройств немного тяжелое для мобильных устройств.
Просто определитесь с реализацией и мало занимайтесь планированием!
Я написал веб-приложение, а затем мне пришлось добавить слой служб, чтобы добавить интерфейс мобильного приложения в приложение. К сожалению, это не было частью первоначальных требований, поэтому пришлось многое переделать.
Мой совет заключается в следующем (если вы web app и api находитесь в одном проекте):
- закодируйте всю логику вашего приложения в библиотеке или в помощниках контроллера. Таким образом, один и тот же код можно повторно использовать в основном веб-приложении и на уровне API.
- код вашей логики веб-приложения в модуле по умолчанию
- код вашего слоя API в выделенном модуле под названием "API"
- phpdoc должен быть идеальным, чтобы Zend мог автоматически генерировать SMD
Для API используется стандартный протокол JSON-RPC 2.0, есть клиенты для Android / iPhone, которые используют это и обеспечивают автоматическое обнаружение (SMD, как WSDL, но для json). Все запросы, отправленные через GET, приводят к отображению SMD, а все остальные - к обработке запроса.
Используйте Zend_Json_Server для своего уровня API. Вот функциональный пример:
<?php
// API Controller Example
class ApiController extends Zend_Controller_Action
{
public function init()
{
parent::init();
$this->getHelper('ViewRenderer')->setNoRender();
}
public function helloWorldAction()
{
$this->_handleRequest('App_Api_HelloWorld');
}
protected function _handleRequest($handlerClassName)
{
//
$this->getHelper('ViewRenderer')->setNoRender();
//
$server = new Zend_Json_Server();
$server->setClass($handlerClassName);
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
$cfg = Zend_Registry::get('config');
$req = $this->getRequest();
$reqUrl = $cfg->paths->basehref . $req->getControllerName() . '/' . $req->getActionName();
$server->setTarget($reqUrl)
->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
$smd = $server->getServiceMap();
header('Content-Type: application/json');
echo $smd;
} else {
// handle request
$server->handle();
}
}
}
// HANDLER Class Example
class App_Api_HelloWorld extends App_Api_ApiHandlerAbstract
{
/**
* says "hello world"
*
* @return string
*/
public function hello()
{
return 'hello world';
}
/**
* says "hello $name"
*
* @param string $name
* @return string
*/
public function hello2($name)
{
return "hello $name";
}
/**
*
* @return string
* @throws Exception
*/
public function hello3()
{
throw new Zend_Json_Server_Exception('not allowed');
return '';
}
}
Вот пример запроса (я добавил магию начальной загрузки в сессию по идентификатору)
https://domain.com/api/hello-world
{
"session_id": "4ggskr4fhe3lagf76b5tgaiu57",
"method": "hello2",
"params": {
"name" : "Alex"
},
"id": 123
}
Просмотрите документацию JSON RPC 2.0.
Я нашел Advanced REST Client для Google Chrome как ЛУЧШЕЕ расширение для разработки и тестирования веб-сервисов JSON.
Для дополнительной безопасности вы можете ограничить ВСЕ запрос через HTTP-аутентификацию, добавив несколько строк кода в абстрактный контроллер или даже создать плагин контроллера безопасности.
Удачи.