GraphQL 数据存储在哪里?

GraphQL where is data stored?

GraphQL 的全新内容。据我了解,它是 API 的查询语言。好的,我明白了。

今天阅读,GraphQL 可以与数据库一起使用,但它不需要数据库。这后面的部分是我不明白的。

如果没有数据库,这些数据存储在哪里?

来自the spec

GraphQL does not mandate a particular programming language or storage system for application servers that implement it. Instead, application servers take their capabilities and map them to a uniform language, type system, and philosophy that GraphQL encodes.

GraphQL 响应由一个或多个字段组成。被查询的 GraphQL 服务的模式描述了哪些字段可用以及可以为这些字段提供哪些参数。然而,GraphQL 服务还必须提供代码来 resolve 这些字段(即为其提供一个值)。此代码如何获取字段的值,以及它可能产生的副作用,完全取决于服务。

这是一个简单的例子。假设我们有以下架构:

type Query {
  helloWorld: String
}

这样我们就可以编写如下查询:

query {
  helloWorld
}

为了让 helloWorld 解析为 null 以外的其他内容,我们还将为其提供 resolver 函数:

function resolve (root, args, ctx, info) {
  return "Hello world!"
}

在这里,我们对将要解析的值进行了硬编码。不过,我们可以通过多种方式获得价值。例如:

  • 从变量中读取它
  • 查询数据库或其他数据存储,如 Redis
  • 从 API
  • 请求它
  • 从文件系统中读取

GraphQL 服务通常与数据库或某些 API 交互,但也有与消息队列、IMAP 收件箱、区块链等接口的服务。因此,您的数据几乎可以来自任何地方。