我在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
类的新方法中添加一个函数?
答案 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