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 находитесь в одном проекте):

  1. закодируйте всю логику вашего приложения в библиотеке или в помощниках контроллера. Таким образом, один и тот же код можно повторно использовать в основном веб-приложении и на уровне API.
  2. код вашей логики веб-приложения в модуле по умолчанию
  3. код вашего слоя API в выделенном модуле под названием "API"
  4. 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-аутентификацию, добавив несколько строк кода в абстрактный контроллер или даже создать плагин контроллера безопасности.

Удачи.

Другие вопросы по тегам