REST:按相关资源的属性筛选主资源
我正在寻找一些关于在进行RESTAPI调用时过滤资源的概念的指导/建议/输入。假设我有用户和帖子,用户创建了一个帖子。如果我想获得所有帖子,我可能会有如下路线:REST:按相关资源的属性筛选主资源,rest,api,filter,group-by,relationship,Rest,Api,Filter,Group By,Relationship,我正在寻找一些关于在进行RESTAPI调用时过滤资源的概念的指导/建议/输入。假设我有用户和帖子,用户创建了一个帖子。如果我想获得所有帖子,我可能会有如下路线: GET /api/posts 现在,如果我想获得在某个日期之后创建的所有帖子,我可能会添加一个过滤器参数,如下所示 GET /api/posts?created_after=2017-09-01 但是,假设我想获得用户在某个日期之后创建的所有帖子。这是正确的格式吗 GET /api/posts?user.created_after=
GET /api/posts
现在,如果我想获得在某个日期之后创建的所有帖子,我可能会添加一个过滤器参数,如下所示
GET /api/posts?created_after=2017-09-01
但是,假设我想获得用户在某个日期之后创建的所有帖子。这是正确的格式吗
GET /api/posts?user.created_after=2017-09-01
当涉及到过滤、分组等问题时,我很难为RESTAPI找到正确的方法,尤其是在使用分页API时。如果我做这个客户端(这是我最初的想法),那么根据满足您的标准,您可能会得到每页可变数量的资源。通过API添加所有这些逻辑作为查询参数似乎很复杂,但我看不到任何其他方法。这类事情有标准吗?没有客观的“正确”方法。如果使用
user.created\u after
在您的API上下文中在逻辑上是合理的,那么它就没有什么问题。就我个人而言,我不会使用user.created\u after
我宁愿选择以下选项之一:
选项一:/api/posts/users/{userid}?在=2017-09-01之后创建
选项二:/api/posts/?user={userid}&created\u之后=2017-09-01
原因很简单:在我看来,创建动态查询参数是错误的。相反,您可以组合查询参数(选项II),甚至可以定义更具体的资源(选项I)
关于分页:标准方法是这样的:除了过滤器参数外,还定义以下参数:page和pageSize。构造请求时,客户端将指定类似于page=2&pageSize=25&orderBy=creationDate
的内容。
需要注意的是,服务器必须始终验证参数,并且可能忽略或覆盖不正确的参数(例如,页面不存在,或者页面大小太大可能不会返回错误,而是返回合理的输出。这取决于您的业务情况)