2

英文原版地址:https://www.howtographql.com/...

您可能已经意识到,GraphQL生态系统正在以惊人的速度增长。之所以如此,原因之一是GraphQL使我们很容易开发出优秀的工具。在本节中,我们将看到为什么会这样,以及已经存在生态系统中有的一些惊人的工具。

如果您熟悉GraphQL基础知识,您可能知道GraphQL的类型系统如何帮助我们快速定义API的最外层。它允许开发人员清楚地定义API的功能,还可以根据Schema去验证传入的查询内容。

GraphQL神奇的是,这些功能不仅仅是服务器所知道的。GraphQL允许客户端向服务器询问其Schema的信息。 GraphQL调用这个introspection。

introspection

模式的设计者已经知道模式是什么样的,但客户端如何得知,可以通过GraphQL API访问哪些数据?我们可以通过查询__schema元字段来询问GraphQL,该元字段始终在符合规范的查询根类型上可用。

query {
  __schema {
    types {
      name
    }
  }
}

以此Schema为例:

type Query {
  author(id: ID!): Author
}

type Author {
  posts: [Post!]!
}

type Post {
  title: String!
}

如果我们发送上述的introspection查询,我们会得到以下结果:

{
  "data": {
    "__schema": {
      "types": [
        {
          "name": "Query"
        },
        {
          "name": "Author"
        },
        {
          "name": "Post"
        },
        {
          "name": "ID"
        },
        {
          "name": "String"
        },
        {
          "name": "__Schema"
        },
        {
          "name": "__Type"
        },
        {
          "name": "__TypeKind"
        },
        {
          "name": "__Field"
        },
        {
          "name": "__InputValue"
        },
        {
          "name": "__EnumValue"
        },
        {
          "name": "__Directive"
        },
        {
          "name": "__DirectiveLocation"
        }
      ]
    }
  }
}

我们可以看到,我们查询了Schema上的所有类型。我们得到我们定义的对象类型和预定义类型。我们甚至可以再查询introspection类型!

对于introspection类型,不仅仅能拿到名字。看下面的例子:

{
  __type(name: "Author") {
    name
    description
  }
}

在这个例子中,我们使用__type元字段来查询一个类型,我们得到它的名字和描述。此查询的结果:

{
  "data": {
    "__type": {
      "name": "Author",
      "description": "The author of a post.",
    }
  }
}

如你所见,introspection是GraphQL非常强大的功能,我们只是了解了一点皮毛。在规范中,会详细介绍introspection模式中哪些字段和类型是可用的。

GraphQL生态系统中的许多工具都是通过introspection系统提供了神奇的功能。例如文档浏览器,自动补全,代码生成,和其他一切可能!在构建和使用GraphQL API时,当你重度使用introspection ,最有用的工具是GraphiQL。

GraphiQL

GraphiQL是用于编写,验证和测试GraphQL查询的运行在浏览器中的IDE。它有用于GraphQL查询的编辑器,配有自动补全和验证以及文档浏览,可以快速呈现出模式的结构(由introspection提供)。

这是一个非常强大的开发工具。它允许您在GraphQL服务器上调试和尝试查询,而无需通过curl去写GraphQL查询。

试一试吧! http://graphql.org/swapi-grap...


恒1910
477 声望35 粉丝

战五渣,刷怪打钱阶段,等着上天


引用和评论

0 条评论