【问题标题】:RESTful API architecture: Queries over multiple resourcesRESTful API 架构:查询多个资源
【发布时间】:2025-12-12 16:00:02
【问题描述】:

我为 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 类结构中实现这个调用?

用资源Usersget()函数中的参数处理?
添加新资源UsersPosts?
Users 类的新方法中添加函数?

【问题讨论】:

    标签: php api rest


    【解决方案1】:

    如果您将“用户”视为帖子资源的过滤器,这将比同时处理 2 个不同的资源更容易。

    看起来像这样的东西:

    /api/posts/by_user/user_id
    

    通过这种方式,您可以为每个 api 页面保留一个资源,并应用任意数量的过滤器。

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

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

    /api/posts/category/videos/by_user/USER_ID/order_by/title/order_dir/asc/limit/5
    

    【讨论】:

      【解决方案2】:

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

      【讨论】: