【问题标题】:How to generate Kotlin and or Java data model from GraphQL schema如何从 GraphQL 模式生成 Kotlin 和/或 Java 数据模型
【发布时间】:2020-05-17 02:10:11
【问题描述】:

我当前的项目已切换到 GraphQL API,我希望自动生成与 Query/Mutations 请求/响应匹配的模型对象。

我只需要模型类,我不想在我的应用程序运行时使用 Apollo 等工具。

我要求模型类是 Java 或 Kotlin。

我找到了这个https://www.graphql-java-kickstart.com/tools/schema-definition/

但这似乎需要我自己创建模型类...

基于此声明“GraphQL Java Tools will expect to be given three classes that map to the GraphQL types: Query, Book, and Author. The Data classes for Book and Author are simple:

我错过了什么?

当我尝试使用 Apollo-cli 下载我的架构时,我收到了这个错误

~ -  $ npx apollo-cli download-schema $https://my.graphql.end.point/graphql --output schema.json
Error while fetching introspection query result: only absolute urls are supported

这当然是使用 GraphQL 时的基本要求

【问题讨论】:

  • 我的回答是否解决了您的问题,或者还有什么我可以补充的吗?
  • @realAlexBarge,不,我看不到生成 Kotlin 数据类或 Java POJO
  • 你能说得更具体些吗?你用的是哪个插件。你遵循了什么步骤。你在哪里收到了意想不到的结果。请详细说明。

标签: graphql


【解决方案1】:

因此,如果我正确理解您,您要做的是 a) 从现有的 graphql 端点下载并在本地创建模式,然后 b) 从该模式创建 java 模型对象。

要下载架构,您可以使用graphql-cli。首先通过npm install -g graphql-cli 安装并运行graphql init 来设置您的.graphqlconfig。最后运行graphql get-schema 从定义的端点下载模式。

接下来,您要利用采用 GraphQL 模式并创建的 Java 代码生成器:

  • GraphQL 查询、突变和订阅的接口
  • GraphQL 联合接口
  • GraphQL 类型的 POJO 类
  • 每个 GraphQL 枚举的枚举类

根据您的设置/偏好(例如 gradle vs maven)有多种选择:

我建议您查看第一个选项,因为它看起来非常有据可查,并且在生成所需的帮助器后还提供了完全的灵活性:

graphql-java-generator 生成样板代码,并让您 专注于特定于您的用例的内容。然后,奔跑 代码不依赖于来自 graphql-java-generator 的任何依赖项。 因此,您可以随时摆脱 graphql-java-generator:只需将 在您的 SCM 中生成代码,就是这样。

在客户端模式下,您只需一行代码即可查询服务器 代码。

例如:

Human human = queryType.human("{id name appearsIn homePlanet friends{name}}", "180");

在这种模式下,插件生成:

一个用于查询对象的 java 类,一个用于 Mutation 的 java 类 对象(如果有),GraphQL 的每个标准对象一个 POJO 对象,所有必要的运行时实际上都作为源代码附加 进入您的项目:生成的代码是独立的。所以,你的 项目,当它运行时,不依赖于任何外部依赖 graphql-java-generator.

【讨论】:

    猜你喜欢
    • 2019-09-08
    • 2020-12-05
    • 1970-01-01
    • 2020-05-28
    • 2023-03-25
    • 2011-01-16
    • 2023-04-01
    • 2020-01-15
    相关资源
    最近更新 更多