Zend Framework +我的应用程序的API

时间:2009-03-16 07:20:00

标签: zend-framework

如何为我的网络应用程序创建API?我正在研究Zend_Rest,但我无法理解它背后的想法。

基本上,我想要这样的例子:

$technorati = new Zend_Rest_Client('http://api.technorati.com/bloginfo');
$technorati->key($key);
$technorati->url('http://pixelated-dreams.com');
$result = $technorati->get();
echo $result->firstname() .' '. $result->lastname();

但我完全迷失了如何使用Zend Framework实现它。我需要使用Zend_Rest_Server吗?任何形式的指导如何做到这一点将不胜感激......

1 个答案:

答案 0 :(得分:2)

Zend Framework documentation on Zend_Rest_Server有什么问题?关于如何使用Zend_Rest_Server有一个绝对简约的例子:

/**
 * Say Hello
 *
 * @param string $who
 * @param string $when
 * @return string
 */
function sayHello($who, $when)
{
    return "Hello $who, Good $when";
}

$server = new Zend_Rest_Server();
$server->addFunction('sayHello');
$server->handle();

或者您有任何具体问题吗?

修改 关于你关于MVC集成的问题,我认为,这会引入极端开销以及web服务不需要的许多功能。尽管如此,我应该可以将服务集成到MVC中而不会出现任何重大问题(除了开销)。

class Hello
{
    /**
     * Say Hello
     *
     * @param string $who
     * @param string $when
     * @return string
     */
    function sayHello($who, $when)
    {
        return "Hello $who, Good $when";
    }
}

class ApiController extends Zend_Controller_Action
{
    /**
     * @var Zend_Rest_Server
     */
    protected $_server;

    public function init()
    {
        // disable view rendering
        $this->_helper->viewRenderer->setNeverRender(true);
        // disable layout (if you use layouts)
        $this->_helper->layout->disableLayout();

        $this->_server = new Zend_Rest_Server();
        $this->_server->setClass('Hello');
    }

    public function __call($method, $args)
    {
        $params = $this->_getAllParams();
        $params['method'] = $method;
        $this->_server->handle($params);
    }
}

/*
 * This should allow you to call http://www.example.com/api/sayHello/who/MyName/when/morning
 * By defining custom routes you're able to control the urls.
 */

请注意,代码未经测试,肯定需要进行一些调整,尤其是有关错误处理的问题,但它可以作为一个简单的MVC服务示例。