在过滤的 API Restful 资源中添加子类别

Posted

技术标签:

【中文标题】在过滤的 API Restful 资源中添加子类别【英文标题】:Add subcategories in a filtered API Restful resource 【发布时间】:2018-04-27 13:25:59 【问题描述】:

我将举一个例子,因为标题可能听起来有点混乱。

如何为类似的东西构建资源路径:

GET /courses/?language=english&active=true/units

我想过滤课程(通常不使用 id),然后获取此结果的单位。你会怎么做?我想在路径之间使用问号是不允许的。

【问题讨论】:

取决于您的服务器设置、您使用的数据库等。 我不担心实施。我只是不确定这个资源的路径应该是什么样子的。 【参考方案1】:

这在一定程度上取决于您的数据库架构什么是“课程”和“单元”。使用 RESTful 方式的重点是始终构建特定于资源的请求和 url。

但是假设一门课程上有 X 个单元。以下是我为该请求创建 RESTful 路径的方法:

由于过滤课程和使用 /unit 后缀的路径问题,可以通过添加另一个查询参数来完成,该参数指定请求应该返回哪些字段。像这样的:

GET /courses?language=english&active=true&fields=units

这将过滤课程,然后在响应中仅返回“单位”字段。正如我所说,根据您的数据库和模型,如果这些单元没有存储在课程中,那么通过请求 /courses 路径来获取它们将是一个不好的做法。在这种情况下,首先请求匹配所需过滤器的课程,然后向 /units 上下文发出另一个请求,发送即课程 ID 作为查询参数。

【讨论】:

我有 2 个不同的表,一个用于课程,一个用于单元。存在一对多的关系(一门课程可以有多个单元)。正如您所说,我想获得我想要的最终结果的唯一“Restful 方式”是发送 2 个请求,尽管它似乎效率不高。 你也可以只用 /units 创建一个新的上下文。我假设“英语”和“活跃”课程中的每个单元也自动成为“英语”和“活跃”。因此,您将制作一个 GET /units?language=english&active=true,留给后端处理这两个表,但只发送单位资源。例如,在 GitHub API 中,您可以执行 /user/issues、/organization/issues 或简单地执行 /issues。

以上是关于在过滤的 API Restful 资源中添加子类别的主要内容,如果未能解决你的问题,请参考以下文章

用于过滤的多个资源上的 RESTful API 多个查询字符串

RESTful设计要素

Restful api 和搜索和邀请等操作

通过 BigCommerce RESTful API 从商店中提取类别

restful架构风格设计准则资源识别的注意事项

RESTful