我建议对其使用过滤。
JSON:API 规范与过滤策略无关。因此,您可以实施任何适合您的用例的策略。它只建议使用filter
查询参数族进行过滤(并为此目的保留查询参数)。
有一个推荐文档作为规范的附件。它描述了一个简单的过滤策略,它可能非常适合您的需求。sort
它将用于规范 ( ,include
和fields
) 中使用的其他查询参数的策略应用于filter
.
查询参数构造为?filter[KEY]=value
。使用属性名称或路径作为键有很好的论据。但你不限于这样做。它对其进行相等的比较。
对于您的示例,这看起来像?filter[externalId]=hr1234
假设包含外部 ID 的资源上的属性为 named externalId
。如果您遵循另一种命名策略(例如,多个单词之间的下划线或破折号),我建议您也将其反映在过滤键中。
请记住,使用过滤通过外部 ID 查找记录与通过 ID 查找资源的工作方式不同:
- 它总是返回一个资源集合。
- 如果不存在具有该外部 ID 的资源,它不会返回。
404 Not Found
而是返回一个空集合。
- 如果不能保证外部 ID 是唯一的,它可能会返回多个资源。
如果这对您来说是可以接受的,那么使用过滤是最简单的方法。如果没有,您可以考虑使用特殊端点通过外部 ID 查找资源。例如,您可能有一个/api/v1/persons-by-external-id/:externalId
端点,它直接返回 JSON:API 资源或临时重定向到/api/v1/persons/:idForPersonWithExternalId
. 由于 JSON:API 规范对 URL 设计是不可知的,因此从规范的角度来看这很好。但由于它不太常见,我预计现有客户端库会出现问题。