【问题标题】:How to structure MVC controllers when writing a RESTful API编写 RESTful API 时如何构造 MVC 控制器
【发布时间】:2013-10-08 13:01:10
【问题描述】:

我目前正在使用 MVC 框架实现 RESTful API。我设置了一些控制器,允许我访问一些常规集合的数据,例如:

GET /products
GET /products/1
GET /users
GET /users/1

我的控制器的结构使其具有get()post()put()delete() 的方法,这些方法与传入请求的 HTTP 动词相匹配。然后在 get() 函数中,例如,我检查 id 是否存在并测试是否获取单个对象或数组,如下所示:

public function action_get()
{
    $id = (int) $this->request->param('id');
    if (empty($id))
    {
        // return an array of everything
    }
    else
    {
         // return a specific object
    }
}

这一切都很好。然而,下一步是与我的产品或用户建立关系,例如:

GET /users/1/transactions
GET /users/1/transactions/1

现在显然我可以将它添加到上面的 action_get() 方法中,但这会使它变得臃肿。那么我是否应该为事务创建一个单独的控制器,并通过一些巧妙的路由将用户 ID 作为参数传递?

【问题讨论】:

    标签: php rest model-view-controller restful-url


    【解决方案1】:

    您的users 可以有多个transactions 对吗?所以最好有一个单独的控制器来处理事务。就像您为您的用户所做的那样,为交易做这件事。 Separation of Concerns

    GET /transactions
    GET /transactions/1
    

    通过这种方式,您不仅可以在控制器中使用 GET 的简单性,还可以将控制器构造为接受 POSTDELETEPUT

    【讨论】:

    • 嗯,是的,这在简单性方面有效,但就 RESTful 端点设计而言,哪个更好:GET /users/1/transactionsGET /transactions?user=1
    • 第二个。我建议您观看this 并阅读this
    猜你喜欢
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2015-04-24
    • 2011-04-16
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2022-11-15
    相关资源
    最近更新 更多