英文原版地址:https://www.howtographql.com/...api
您可能已经意识到,GraphQL生态系统正在以惊人的速度增加。之因此如此,缘由之一是GraphQL使咱们很容易开发出优秀的工具。在本节中,咱们将看到为何会这样,以及已经存在生态系统中有的一些惊人的工具。浏览器
若是您熟悉GraphQL基础知识,您可能知道GraphQL的类型系统如何帮助咱们快速定义API的最外层。它容许开发人员清楚地定义API的功能,还能够根据Schema去验证传入的查询内容。服务器
GraphQL神奇的是,这些功能不单单是服务器所知道的。GraphQL容许客户端向服务器询问其Schema的信息。 GraphQL调用这个introspection。curl
模式的设计者已经知道模式是什么样的,但客户端如何得知,能够经过GraphQL API访问哪些数据?咱们能够经过查询__schema
元字段来询问GraphQL,该元字段始终在符合规范的查询根类型上可用。编辑器
query { __schema { types { name } } }
以此Schema为例:工具
type Query { author(id: ID!): Author } type Author { posts: [Post!]! } type Post { title: String! }
若是咱们发送上述的introspection查询,咱们会获得如下结果:post
{ "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元字段来查询一个类型,咱们获得它的名字和描述。此查询的结果:url
{ "data": { "__type": { "name": "Author", "description": "The author of a post.", } } }
如你所见,introspection是GraphQL很是强大的功能,咱们只是了解了一点皮毛。在规范中,会详细介绍introspection模式中哪些字段和类型是可用的。
GraphQL生态系统中的许多工具都是经过introspection系统提供了神奇的功能。例如文档浏览器,自动补全,代码生成,和其余一切可能!在构建和使用GraphQL API时,当你重度使用introspection ,最有用的工具是GraphiQL。
GraphiQL是用于编写,验证和测试GraphQL查询的运行在浏览器中的IDE。它有用于GraphQL查询的编辑器,配有自动补全和验证以及文档浏览,能够快速呈现出模式的结构(由introspection提供)。
这是一个很是强大的开发工具。它容许您在GraphQL服务器上调试和尝试查询,而无需经过curl去写GraphQL查询。