如何在 Zend 框架中创建 RESTful web 服务?

How to create RESTfull webservice in Zend framework?

我是新手,因为 zend.i 需要使用 Zend_Json_Server 和 JSON 响应在 zend 中创建网络服务。我在这里定义了 api 控制器..

<?php
class ApiController extends Zend_Controller_Action
{

    public function init()
    { }
    public function indexAction()
    { }
    public function restAction()
    {

      // disable layouts and renderers
          $this->getHelper('viewRenderer')->setNoRender ( true );

          // initialize REST server
          $server = new Zend_Json_Server();
          // set REST service class
          $server->setClass('Test_Return');

          // handle request
          if ('GET' == $_SERVER['REQUEST_METHOD']) {
               $server->setTarget('/json-rpc.php')
                       ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
                $smd = $server->getServiceMap();

                // Set Dojo compatibility:
               // $smd->setDojoCompatible(true);

                header('Content-Type: application/json');
                echo $smd;

            }
          $server->handle();
    }
}
?>

和Test_Return在Library/Test中定义 Test_Return 代码在这里..

<?php
class Test_Return {

    public function add($x, $y)
    {
        return $x + $y;
    }
    public function subtract($x, $y)
    {
        return $x - $y;
    }
    public function multiply($x, $y)
    {
        return $x * $y;
    }
      public function divide($x, $y)
    {
        return $x / $y;
    }
} ?>

如何调用特定的表达式。

here 中所述,您在索引上创建了一个实例 zend_rest_server 添加您的方法并 运行 它。方法应在 url 中指定。我建议您选择 zend 2 以获得更好的实施

Zend_Json_Server初始化应该在你的public/index.php

defined('APPLICATION_PATH') ||
    define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

defined('APPLICATION_ENV') ||
    define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

set_include_path(implode(PATH_SEPARATOR, array(
    dirname(dirname(__FILE__)) . '/libs',
    get_include_path(),
)));



require_once 'Zend/Application.php';

   $application = new Zend_Application(
      APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');


   $application->getBootstrap()->bootstrap();
   // Instantiate server ...
   $server = new Zend_Json_Server();
   include_once APPLICATION_PATH . '/Calculator.php';
   $server->setClass(new Calculator());
   if ('GET' == $_SERVER['REQUEST_METHOD'])
   {
        // Indicate the URL endpoint, and the JSON-RPC version used:
        $server->setTarget('/api/1.0/jsonrpc.php')->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
        // Grab the SMD
        $smd = $server->getServiceMap();
        // Return the SMD to the client
        header('Content-Type: application/json');
        echo $smd;
        return;
   }
   $server->handle();

$application->bootstrap()->run();

在命令行上使用 curl,您将看不到任何东西 ;-)。这让我有点沮丧。

curl -H "Content-Type: application/json" -d '{"method":"add","x":5,"y":10}' http://zend.rest.server/api/1.0/jsonrpc.php

在浏览器上你可以使用这个 jQuery plugin

app = jQuery.Zend.jsonrpc({url: '/api/1.0/jsonrpc'});
app.add(5, 5);

{"result":10,"id":"1","jsonrpc":"2.0"}

您可能需要按照 here 中描述的步骤进行操作。

我建议您尽可能升级您的 zend 版本,因为 zend2.X.X 对休息服务有更好的支持。