gpt4 book ai didi

flutter - 如何从 GraphQL 生成 Dart - graphql 到 dart 生成器

转载 作者:行者123 更新时间:2023-12-03 03:21:35 24 4
gpt4 key购买 nike

如何从 GraphQL 模式定义将简单的对象类型 [1](例如接口(interface)和/类)生成到 Dart 中?

  • 动机
  • 单一事实来源:GraphQL 模式
  • 从 GraphQL 所有简单的类型都生成为多种语言
  • 在我们的例子中,Typescript 和 Dart


  • 到目前为止我们已经尝试过的
  • 所有与 [2] 相关的解决方案 - 甚至 fork - 都不做简单类型

  • 我们知道的可能的DIY方法
  • GraphQL 代码生成器 [3]
  • quicktype 类似的替代品 [4]


  • GraphQL 到 Typescript 示例
    鉴于此架构定义
    type Person {
    age: Int
    name: String!
    }
    运行此脚本
    import { GraphQLDefinitionsFactory } from '@nestjs/graphql';
    import { join } from 'path';


    const definitionsFactory = new GraphQLDefinitionsFactory();

    definitionsFactory.generate({
    typePaths: ['./**/*.graphql'],
    path: join(process.cwd(), './class.ts'),
    outputAs: 'class'
    });

    definitionsFactory.generate({
    typePaths: ['./src/**/*.graphql'],
    path: join(process.cwd(), './interface.ts'),
    outputAs: 'interface'
    });

    输出
    export interface Person {
    age?: number;
    name: string;
    }
    export class Person {
    age?: number;
    name: string;
    }
    1:简单对象类型应该只是简单的普通对象类型,没有注释、编码和解码逻辑等。
    2: https://github.com/gql-dart/gql
    3: https://graphql-code-generator.com
    4: https://app.quicktype.io

    最佳答案

    我个人尝试使用Artemis或希望Apollo正在扩展,但 @Ryosukegraphql_to_dart是直向前和倾斜的。
    如果您已经有一个 GraphQL 端点并且您的架构已启动并正在运行,您只需要设置它的 graphql_config.yaml例如像这样:

    package_name: example
    graphql_endpoint: http://example.com/graphql
    models_directory_path: lib/graphql/models/
    给定模式定义
    type Person {
    age: Int
    name: String!
    }
    .dart 输出
    class Person{
    int age;
    String name;
    Person({
    this.age,this.name
    });

    Person.fromJson(Map<String, dynamic> json){
    age = json['age'];
    name = json['name'];
    }

    Map toJson(){
    Map _data = {};
    _data['age'] = age;
    _data['name'] = name;
    return _data;
    }
    }
    使用附加选项 type_override您可以根据需要设置自定义标量类型。
    编辑:
    现在有一个 expanded version作为 PR .
    可以在 lib/ 之外生成它们没有导入路径冲突,通过选择退出选项 dynamic_import_path: false . type_override键也不再需要以小写形式显式编写。

    关于flutter - 如何从 GraphQL 生成 Dart - graphql 到 dart 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62590497/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com