使用Zend 2的Restful API

时间:2014-12-18 17:48:25

标签: php rest zend-framework2

我正在尝试为我的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

2 个答案:

答案 0 :(得分:2)

像<{3}}这样的API构建器确实简化了高质量RESTful API的创建,包括直观的URL结构。要直接回答您的问题,您可以使用以下命令从控制器操作访问HTTP方法:

$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中确定您要执行的操作。

我建议使用&#34; api&#34;作为MODULE和&#34;用户&#34;作为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