如何使用嵌入资源进行 DRY

How to DRY with embed resources

我目前正在设计一个将由 ReactJS 应用程序使用的 REST API。两个实际端点如下:

/species
    id
    types
        [name, name] // each specy has 2 types, contained in an array

/types
    name

我们可以看到,我们有一个端点提供了所有 type 资源的列表,而 species 端点提供了特定物种的 type

在我的 ReactJS 应用程序中,我将有一个 Select 字段,其中包含 types 的列表(通过 /types 端点获取),以及所有species取自 /species。然后,用户将能够通过在 Select 字段中选择类型来过滤物种。

在 Select 组件中维护 types 列表,并在 Specy 组件数组中维护 species 列表,这仍然是 DRY 吗?或者我应该找到一种方法来将从他们自己的端点获取的 types 注入 specy?

如果您只有一个 /species 端点并且创建了所有类型的列表,您将无法涵盖分配了零种的类型的情况。这可能是也可能不是问题。您还必须始终加载所有物种以获得完整的类型列表。这可能会浪费很多带宽。


相反,请考虑以下方法:

端点 /types 为您提供了所有可用类型的列表,这是您最初填写下拉列表所需的全部内容。现在,一旦用户选择了特定类型,您就可以调用端点 /types/{typeName}/species,它会为您提供分配给类型 {typeName} 的所有物种的列表。同样,您只是加载了用户想要查看的数据块。

使用这种方法,您既可以避免在前端聚合数据,也可以避免在应用程序实现其目的之前下载完整的数据集。


旁注:物种的单数 is also species,不是物种。 :-)