RESTful API架构:对多个资源进行查询

时间:2013-08-30 14:37:26

标签: php api rest

我在RESTful API中为每个资源都有PHP类。根据请求方法,它将被路由以调用正确的函数。以下是对用户进行GET调用的示例:

Class Users{
    public function get($params){
        // get information and return result
    }
}

请求所有用户/api/users/。请求单个用户/api/users/:id
到目前为止没有任何问题。

现在我的问题:在请求类似/api/users/:id/posts之类的内容时,API应该返回用户使用特定ID生成的所有帖子(Posts是另一种资源btw)

如何在上面给出的PHP类结构中实现此调用?

使用资源get()中的Users函数中的参数处理它? 添加新资源UsersPosts
Users类的新方法中添加一个函数?

2 个答案:

答案 0 :(得分:1)

您应该创建一个Router类来确定在请求中调用哪个控制器类和方法(查看一些已建立的框架,如Symfony或Kohana,以了解它们如何处理创意路由,甚至使用它们!)。从那里开始,无论你做Users::getPosts($userId)还是Posts:getByUserId($userId)取决于你(对我而言,UsersPosts类表示某种交叉引用,可能不是控制器的最佳名称或模特)。

答案 1 :(得分:0)

如果您将'user'视为posts资源的过滤器,而不是同时处理2个不同的资源,那会更容易。

看起来像这样:

/api/posts/by_user/user_id

通过这种方式,每个api页面只能保留一个资源,并根据需要应用尽可能多的过滤器。

/api/posts/by_user/USER_ID/category/videos/

就个人而言,我更进一步,并在网址方案中有其他标准,如order_by或order_dir,它们都可以相互附加,互换,如:

/api/posts/category/videos/by_user/USER_ID/order_by/title/order_dir/asc/limit/5
相关问题