2016-02-22 135 views
2

我有一個用Java實現的GraphQL服務器和一個查詢它的JavaScript客戶端。我不喜歡的是,客戶端只需知道模式,不能從服務器獲取它,而是動態地構建對它的查詢。從非JS服務器公開GraphQL架構到JS客戶端

現在,我明白GraphiQL做到了這一點,但我猜這是因爲它的後端也是用JavaScript編寫的,因此客戶端和服務器都可以使用它。我的模式是用Java定義的,但可能有一種方法可以自動生成客戶端可以使用的JavaScript表示。

這樣的事情已經存在嗎?

回答

4

現在,我明白了GraphiQL莫名其妙地做到了這一點,但我猜這是因爲它的後臺也用JavaScript編寫這樣客戶端和服務器可以使用它。

其實,(幸運的是)情況並非如此。它是用Javascript編寫的,但它不需要實現這種行爲。

我有一些好消息給你...

自省!

關於GraphQL的一個很棒的事情是,事實上,客戶端不需要知道任何有關該模式的信息,因爲它只能使用自檢來查詢服務器。事實上,如果您沒有明確提供模式來自動填充它,GraphiQL會自動使用它。

GraphiQL README的道具部分:

架構:一個GraphQLSchema實例或者如果一個不被使用的無效。如果提供未定義,GraphiQL將使用fetcher發送一個內省查詢以產生一個模式。

官方GraphQL Introspection docs會給你很多信息和示例查詢。他們查詢他們的星球大戰示例架構的例子:

{ 
    __schema { 
    types { 
     name 
    } 
    } 
} 

這將返回所有類型的名稱。內省是GraphQL規範的一部分,因此每個GraphQL服務器都應該能夠實現它:您不需要明確添加任何功能。