0

我们有一个 JSON:API 允许用户对各种类型的资源对象进行 CRUD。我们希望对我们的服务进行增强,客户端应用程序可以通过调用维护良好的外部标识符来访问对象,而无需直接引用 ID。这个事情谁有经验?

用例:

ID:1000002 External_ID:hr1234

目前,您将向 URL 发出请求:GET https://examplefirm.saas.com/api/v1/person/1000002

如何使用 External_ID:hr1234 访问 ID:1000002 而无需先进行查找?

4

1 回答 1

0

我建议对其使用过滤。

JSON:API 规范与过滤策略无关。因此,您可以实施任何适合您的用例的策略。它只建议使用filter查询参数族进行过滤(并为此目的保留查询参数)。

有一个推荐文档作为规范的附件。它描述了一个简单的过滤策略,它可能非常适合您的需求。sort它将用于规范 ( ,includefields) 中使用的其他查询参数的策略应用于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 设计是不可知的,因此从规范的角度来看这很好。但由于它不太常见,我预计现有客户端库会出现问题。

于 2021-03-26T14:13:03.183 回答