英文原版地址: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查詢。