json2graphql

json2graphql 是一个根据 json 生成 GraphQL Schema 的工具。
可在 https://luojilab.github.io/js... 在线体验其功能。

关于 GraphQL

GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。由于其强类型,返回结果可定制,自带聚合功能等特性,由 facebook 开源后,被 github 等各大厂广泛使用。

核心概念:

  • Type
  • Field
  • Query/Mutation
  • Arguments
  • Input
  • Variables
  • Aliases

更多请参考 https://graphql.cn/

为什么选用 GraphQL

相比 REST API, GraphQL 提供了更高的灵活性。接口调用方能够精确的定义其所需数据,并通知服务方只返回这部分数据,该功能是 REST API 无法提供的。GraphQL 能够使客户端只进行一次接口调用,即可获取多个 REST API 请求返回的数据。这种数据聚合的能力,正是我们所需要的。

json protobuf 与 GraphQL

由于 protobuf 和 GraphQL 都是强类型的,所以可以直接从 protobuf 的 schema 生成 GraphQL Schema,因而才能有自动聚合 grpc 服务生成 GraphQL 接口的框架 rejoiner。但同样的方法不适用于 json,因为标准的 json 并不包含 schema,单纯根据 json 文件无法确定知道每个字段的类型(因为有空值,以及嵌套的情况)。因而目前无法实现类似 rejoiner for json 这样的全自动框架。
我们虽不能生成最终的 GraphQL Schema,但是基于对 json 的解析和一些约定,我们可以生成一个 GraphQL Schema 的草稿,生成 Schema 的绝大部分内容,并将有疑问的地方标记出来。
json2graphql 就是一个用 golang 实现的 json 生成 schema 的工具。如果你不熟悉 golang,可以使用其在线版本 https://luojilab.github.io/js...

在从 REST API 迁移到 GraphQL 的过程中,我们有很多接口会返回大量字段(几十个),如果完全手动编写这些 Schema,将是非常痛苦的,我们开发 json2graphql 的初衷就是解决这个问题,大大缩短开发时间。

以下介绍该工具用法。

Usage

go run main.go -h
NAME:inspect - generate a graphql schema based on jsonUSAGE:main [global options] command [command options] [arguments...]DESCRIPTION:inspect json and generate draft schema.graphqlCOMMANDS:inspect  generate a graphql schema based on jsonhelp, h  Shows a list of commands or help for one commandGLOBAL 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/js...

TODO

  • [x] build it as a web service that render schema on the fly like json.cn
  • [ ] support to read from multi json files.
  • [ ] get input from http request rather than local file.
  • [ ] integrate with graphql server frameworks like gqlgen and auto generate resolver

json to graphql schema: json2graphql相关推荐

  1. [GraphQL] Create a GraphQL Schema

    we'll take a look at the GraphQL Language and write out our first GraphQL Schema. We'll use the grap ...

  2. 从graphql endpoint获取schema文件

    graphql server端有更新,client端需要重新获取schema文件用于创建新的api request,下面简要记录如何从graphql endpoint获取schema文件 You ca ...

  3. json schema如何约束为小数_如何使用jsonschema进行接口响应断言

    一,JSONSchema的概念 JSONSchema是一种用来描述JSON数据的一种JSON数据结构.JSON Schema也有版本,目前的版本有 Draft 7,Draft 6,Draft 4 和D ...

  4. 比较 REST、JSON:API 和 GraphQL

    这篇算是翻译.摘录和转写,原文:Headless CMS: REST vs JSON:API vs GraphQL,是Drupal项目的创始人Dries Buytaert和他同事一起在2019初写的, ...

  5. JSON Schema 详解

    简介 要真正理解 JSON Schema,首先需要知道什么是 JSON. JSON 代表 "JavaScript对象表示法",是一种简单的数据交换格式.它最初是万维网的一个符号.因 ...

  6. JSON Schema入门

    使用Json的好处(什么是Schema): 描述现有的数据格式 提供清晰的人工和机器可读文档 完整的数据结构,有利于自动化测试 完整的数据结构,有利于验证客户端提交数据的质量 什么是JSON Sche ...

  7. JSON Schema校验数据

    参考 JSON Schema 规范(中文版)官方网站JSON Schema 对于数据对接系统来说,接口的数据入参校验尤为重要,使用javax.validation相关注解进行校验对于java对象的关联 ...

  8. fcm和firebase_我如何最终使Netlify Functions,Firebase和GraphQL一起工作

    fcm和firebase In a previous post I confessed defeat in attempting to get an AWS Lambda GraphQL server ...

  9. 如何使用FaunaDB + GraphQL

    I have one or two projects I maintain on Netlify, in addition to hosting my blog there. It's an easy ...

最新文章

  1. 【Java例题】2.1复数类
  2. openresty获取nginx 请求方法
  3. 鸿蒙杀戮手机电脑版,鸿蒙杀戮单职业最新版
  4. 用VisualVM和JConsole监控tomcat性能
  5. 5.3Python数据处理篇之Sympy系列(三)---简化操作
  6. 使用idea工具进行反编译
  7. 0基础入门VTD-实操静态道路建模3
  8. java 通过身份证判断性别
  9. 混合高斯模型Gaussian Mixture Model(GMM)的EM(Expectation Maxium)求解代码
  10. 中国熊果苷市场运营效益及投资盈利预测报告(新版)2022-2027年
  11. java抽象类有什么用_java中抽象类的作用是什么?抽象类作用的例子
  12. 【深度学习】01 - 图像识别
  13. Excel文件打开后不能编辑,可以这样处理
  14. camera调试基础经验分享
  15. java-php-python-旅游景区预约管理系统计算机毕业设计
  16. javaScript基础面试题 ---闭包
  17. 小型企业局域网搭建(一)
  18. 渗透信息收集 子域名查询
  19. 十次方需求分析与技术架构、Node.js、包资源管理器NPM、Webpack
  20. MacBook苹果笔记本M芯片功耗测试软件Asitop

热门文章

  1. php 怎么查看文件类型信息,php获取文件类型和文件信息的方法
  2. 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
  3. 小程序 微信统计表格_微信小程序登录机制
  4. java 图片操作_Java对图片的操作
  5. Java21天打卡Day11-字符串3
  6. python判断火车票座位是否靠窗_python如何判断购买火车有没有对应的列车,没有就输出未查询到对应的车次?...
  7. python个位怎么表示_如何在django管理中表示位标志int字段?
  8. tracepro应用实例详解_十大行业气动设备 120个典型气动系统应用实例
  9. Matlab箱线图Boxplot横坐标x轴设置
  10. php编辑工具绿色,php编写软件下载|