我想在 Zend Framework 1 中实现一个 RESTful 设计。我不确定如何记录资源以及允许哪些方法以及可以提供哪些额外参数。
我当前的实现使用控制器名称作为资源,HTTP 方法是操作名称。我已经在包含以下内容的标题中发送“允许”:
GET, PUT, PATCH, LINK, UNLINK, POST, DELETE, HEAD, OPTIONS
我想知道如何为客户记录可能的和必需的参数。
- 有通用的 DocBlock 约定吗?
- 使用 HTTP 标头“自动记录”可能的额外参数是否可行(如“允许”部分)
现在我正在制作 DocBlock 属性并通过“OPTIONS”请求发送它们。
/**
* @route /data/results
* @method GET
* @requiredParams pid The project ID
* @queryParams tid The team ID
*/
public function getAction()
{
$pid = $this->_getParam('pid');
$teamId = $this->_getParam('tid');
if (null === $pid) {
$this->getResponse()->setHttpResponseCode(400);
$this->getResponse()
->setBody(Zend_Json::encode(array('required parameters missing')));
} else {
$this->getResponse()->setBody(Zend_Json::encode(array($pid, $teamId)));
$this->getResponse()->setHeader('Content-Type', 'application/json');
$this->getResponse()->setHttpResponseCode(200);
}
}
public function optionsAction()
{
$reflect = new Zend_Reflection_Class($this);
foreach (explode(',',$this->getAllowedMethods()) as $method) {
$action = strtolower(trim($method)) . 'Action';
try {
$docs[] = $method.' '.$reflect->getMethod($action)
->getDocblock()->getContents();
} catch(Zend_Reflection_Exception $e) {
}
}
$this->getResponse()->setBody(implode("\n",$docs));
$this->getResponse()->setHttpResponseCode(200);
}