是否有将 JSON Schema schema(例如来自 Swagger)转换为 GraphQL schema 的适配器?甚至有一篇官方文章介绍如何包装 REST http://graphql.org/blog/rest-api-graphql-wrapper/,但通常 REST 已经被描述了,Swagger 是其中最流行的格式。如果已经存在实现,就不想自己编写。
是否有将 JSON Schema schema(例如来自 Swagger)转换为 GraphQL schema 的适配器?甚至有一篇官方文章介绍如何包装 REST http://graphql.org/blog/rest-api-graphql-wrapper/,但通常 REST 已经被描述了,Swagger 是其中最流行的格式。如果已经存在实现,就不想自己编写。
我几个月前曾花费时间尝试过这个。你可以阅读我的博文,详细了解结果:https://medium.com/apollo-stack/will-graphql-replace-rest-documentation-f1a55092ef9d#.m50im46o0
在查看了许多在线提供的Swagger模式后,我认为Swagger或类似的API描述语言可以作为定义GraphQL模式的良好起点,但它们通常不包含足够的信息来单独生成模式。具体而言,通常没有关于对象之间关系的足够数据。
如果您想从JSON格式的模式描述开始,则只需编写一些代码循环遍历Swagger中的不同数据类型,并生成GraphQLObjectType
对象。您可以在上面链接的博客文章示例存储库中看到这种简单方法:https://github.com/apollostack/swapi-rest-graphql/blob/951e50ec29732c93e7aa0bc6880210fdd1816a2f/schema.js#L28
基本上,您只是将一种数据格式转换为另一种格式,然后需要添加数据之间的关系(外键、ID等),并添加一些根查询以创建入口点。对于REST API,将单个和多个资源端点作为根查询字段通常是有意义的。
我还编写了一个库,可以让你在使用Swagger的情况下包装现有的REST API。
https://github.com/yarax/swagger-to-graphql
它基本上将Swagger模式映射到GraphQL类型。关于这种方法和库,有一篇文章https://medium.com/@raxwunter/moving-existing-api-from-rest-to-graphql-205bab22c184。目前已经开发出了几种工具,用于将JSON Schema转换为GraphQL Schema: