GraphQL BEST PRACTICES:缓存Cache

本文主要介绍GraphQL提供对象标识符允许客户端构建丰富的缓存。

在基于客户端的API中,客户端可以使用HTTP缓存来轻松避免资源的重新获取,并用于标识两个资源何时相同这些api中的URL是客户端可以用来构建缓存的全局唯一标识符。不过,在GraphQL中,没有类似URL的原语为给定对象提供这种全局唯一标识符。因此,API公开给客户机使用唯一的标识符是一种最佳实践。

全局唯一ID
一种可能的模式是将字段(如id)保留为全局唯一标识符这些文档中使用的示例架构使用以下方法:

Snip20191108_7
这是一个强大的工具交给客户开发人员。与基于资源的API的url提供全局唯一键的方式相同,该系统中的id字段提供全局唯一键。

如果后端使用类似uuid的东西作为标识符,那么公开这个全局唯一的ID可能非常简单!如果后端对每个对象都没有全局唯一的ID,GraphQL层可能必须构造这个。通常,这就像将类型的名称附加到ID并将其用作标识符一样简单;然后服务器可能通过base64编码使该ID不透明。

与现有API的兼容性
使用ID字段为此目的的一个问题是使用图形化API的客户端如何与现有API一起工作。例如,如果我们现有的API接受了特定于类型的ID,但是我们的Gracql API使用全局唯一的IDS,那么同时使用这两个ID可能很棘手。

在这些情况下,GraphQL API可以在单独的字段中公开先前API的id。这给了我们最好的两个世界:

GraphQL客户端可以继续依赖一致的机制来获取全局唯一的ID。
需要使用我们以前的API的客户机也可以从对象中获取previousapid并使用它。

选择
虽然全球唯一的IDs在过去已经被证明是一个强大的模式,但它们并不是唯一可以使用的模式,也不适合任何情况。客户机真正需要的关键功能是为其缓存派生全局唯一标识符的能力在让服务器派生该ID简化客户机的同时,客户机还可以派生该标识符通常,这只需将对象的类型(用typename查询)与某种类型唯一标识符组合起来就可以了。

此外,如果用一个GAPQL API替换现有的API,如果GoDQL中的所有字段都是相同的,除了ID,它会变成全局唯一的,它可能会令人困惑。这也是为什么人们可能选择不使用id作为全局唯一字段的另一个原因。

推荐文章

沪公网安备 31010702002009号