如何在 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 对休息服务有更好的支持。
我是新手,因为 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 对休息服务有更好的支持。