json to graphql schema: json2graphql

json2graphql

json2graphql 是一個根據(jù) json 生成 GraphQL Schema 的工具。
可在 https://luojilab.github.io/json2graphql/ 在線體驗其功能。

關于 GraphQL

GraphQL 是一個用于 API 的查詢語言,是一個使用基于類型系統(tǒng)來執(zhí)行查詢的服務端運行時(類型系統(tǒng)由你的數(shù)據(jù)定義)。GraphQL 并沒有和任何特定數(shù)據(jù)庫或者存儲引擎綁定,而是依靠你現(xiàn)有的代碼和數(shù)據(jù)支撐。由于其強類型,返回結果可定制,自帶聚合功能等特性,由 facebook 開源后,被 github 等各大廠廣泛使用。

核心概念:

更多請參考 https://graphql.cn/

為什么選用 GraphQL

相比 REST API, GraphQL 提供了更高的靈活性。接口調(diào)用方能夠精確的定義其所需數(shù)據(jù),并通知服務方只返回這部分數(shù)據(jù),該功能是 REST API 無法提供的。GraphQL 能夠使客戶端只進行一次接口調(diào)用,即可獲取多個 REST API 請求返回的數(shù)據(jù)。這種數(shù)據(jù)聚合的能力,正是我們所需要的。

json protobuf 與 GraphQL

由于 protobuf 和 GraphQL 都是強類型的,所以可以直接從 protobuf 的 schema 生成 GraphQL Schema,因而才能有自動聚合 grpc 服務生成 GraphQL 接口的框架 rejoiner。但同樣的方法不適用于 json,因為標準的 json 并不包含 schema,單純根據(jù) json 文件無法確定知道每個字段的類型(因為有空值,以及嵌套的情況)。因而目前無法實現(xiàn)類似 rejoiner for json 這樣的全自動框架。
我們雖不能生成最終的 GraphQL Schema,但是基于對 json 的解析和一些約定,我們可以生成一個 GraphQL Schema 的草稿,生成 Schema 的絕大部分內(nèi)容,并將有疑問的地方標記出來。
json2graphql 就是一個用 golang 實現(xiàn)的 json 生成 schema 的工具。如果你不熟悉 golang,可以使用其在線版本 https://luojilab.github.io/json2graphql/

在從 REST API 遷移到 GraphQL 的過程中,我們有很多接口會返回大量字段(幾十個),如果完全手動編寫這些 Schema,將是非常痛苦的,我們開發(fā) json2graphql 的初衷就是解決這個問題,大大縮短開發(fā)時間。

以下介紹該工具用法。

Usage

go run main.go -h
NAME:
   inspect - generate a graphql schema based on json

USAGE:
   main [global options] command [command options] [arguments...]

DESCRIPTION:
   inspect json and generate draft schema.graphql

COMMANDS:
     inspect  generate a graphql schema based on json
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --verbose, -v             show logs
   --input value, -i value   the json filename
   --output value, -o value  the target filename to store generated schema
   --help, -h                show help

Example

go run main.go -i example.json

Live Demo

https://luojilab.github.io/json2graphql/

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容