我正在尝试为我的Zend 2网站创建一个rest api,我对路由,它背后的一些逻辑以及控制器的使用位置感到困惑。
假设我想获得一位用户:http://example.com/api/user/peter
这将转到ApiController,查找userAction函数,在那里我可以得到param'peter'并返回一些细节。
问题是我在userAction函数中区分方法(post,get,put ...)吗?或者我的ApiController应该包含getAction()postAction()... functions?
如果是后者,我如何区分这些网址:
http://example.com/api/user/peter
http://example.com/api/house
http://example.com/api/animal/cat
答案 0 :(得分:2)
$this->getRequest()->getMethod()
答案 1 :(得分:1)
经常讨论的事情。你所谈论的两件事都是完全有效的,但有不同的实现,优点和缺点。
实施1
使用HTTP方法(post,get,put ...)来区分userAction函数中你想要的东西(创建,读取,更新......)。
例如http://example.com/api/user/peter:
function userAction()
{
$method = $this->getRequest()->getMethod();
switch ($method)
{
case 'POST':
// Create peter user
break;
case 'GET':
// Read peter user
break;
case 'PUT':
// Update peter user
break;
case 'DELETE':
// Delete peter user
break;
}
}
实施2
在apiController中使用不同的zend动作(postAction(),getAction()...)来确定是否要创建,读取,更新......用户。在这种情况下,您需要在方法API中确定您要执行的操作。
我建议使用" api"作为MODULE和"用户"作为CONTROLLER,它将更具可扩展性。例如:
获取由一组名称
标识的用户URL: http://example.com/api/user/peter
MODULE: api
CONTROLLER: user
ACTION: index
PARAM: peter
在这种情况下,它可以与更多的获取参数组合,如页面或页面大小:
URL: http://example.com/api/user/peter?page=1&pagesize=25
MODULE: api
CONTROLLER: user
ACTION: index
PARAM: peter,page,pagesize
删除指定用户
URL: http://example.com/api/user/peter/delete
MODULE: api
CONTROLLER: user
ACTION: delete
PARAM: peter
编辑指定用户
URL: http://example.com/api/user/peter/edit
MODULE: api
CONTROLLER: user
ACTION: edit
PARAM: peter
我们在网址中使用删除或编辑字词来确定我们想要执行的操作。这是必要的,以定义正确的路线并区分网址。
总之,我更喜欢使用实现2. API的方法更易理解和清晰,您的代码不会变得更复杂。
如果您想深入了解其他API实现方式,我建议您查看Stack Exchange API