GraphQL 项目结构

Posted

技术标签:

【中文标题】GraphQL 项目结构【英文标题】:GraphQL project structure 【发布时间】:2018-12-19 12:04:35 【问题描述】:

构建 graphQL 项目/服务器端的最佳方式是什么? 这是我目前的结构

源代码

配置

型号

设置 架构 查询 索引 用户查询 解析器 索引 用户解析器 类型 索引 用户类型

【问题讨论】:

看起来不错!而且,here's another example 很相似,我认为 ???? 【参考方案1】:

我认为没有最好的方式来构建 GraphQL 服务器。你的看起来不错!

查看此GraphQL APIs repo,其中包含多个示例和具有许多不同实现的存储库。

在我的 TypeScript 项目中,我通常使用这样的结构:

src/
├── user/
│   ├── data.ts
│   ├── mutation.ts
│   ├── query.ts
│   └── type.ts
├── bananas/
│   ├── data.ts
│   ├── mutation.ts
│   ├── query.ts
│   └── type.ts
├── utils/
│   ├── database.ts
│   └── config.ts
├── index.ts
└── schema.ts

【讨论】:

你在data.ts文件中处理什么? @jastor_007 它只是处理来自数据库的数据请求/响应的函数。 @MarcoDaniel 您好,您如何将所有突变和查询连接到单个文件中? ? @Dan,我将它们全部连接到 schema.ts 文件中。这里我做了一个非常古老的例子,它仍然显示了这个想法:github.com/MarcoDaniels/graphql-demo/blob/master/services/API/…【参考方案2】:
src
  schema
     Product
        model.js
        query.js
        mutation.js
        type.js
        resolvers.js
        index.js
     Order
        query.js
        mutation.js
        model.js
        types.js
        resolvers.js
        index.js
     index.js

让我们探索一下 Product 目录中的内容

query.js:与产品相关的所有查询解析器

mutations.js:与产品相关的所有突变解析器

types.js:所有与 Product 相关的 GraphQL 类型也包括查询和变异(导出包含 GraphQL 类型的字符串)。

mode.js:产品数据库架构。

resolvers.js:与产品类型相关的所有解析器。 例如:

let Product = 
    comments: (user: id) => 
        // whatever
    

Product/index.js:合并所有文件并导出为QueryMutationtypes , Product(产品类型字段解析器)。

注意:您还可以将 query.js 或其中任何一个转换为一个文件夹,然后将每个查询和突变解析器写入其自己的文件中。

schema/index.js:将所有导出的QueryMutationtype合并到index.js里面并将它们导出为 resolverstypeDefs

例如

export const resolvers = 
    Query: 
      ...ProductQueries,
      ...OrderQueries,
    ,
    Mutation: 
      ...ProductQueries,
      ...OrderMutations,
    ,
    // schema/Proudct/resolvers.js
    Product,
    Order

有关完整说明,请点击此链接 https://theehsansarshar.hashnode.dev/scalable-graphql-architecture

【讨论】:

【参考方案3】:

我创建了具有标准文件夹结构的最简单的 GraphQL TypeScript 项目。可以参考一下。

https://github.com/JayeshGatkal/typescript-graphql-demo

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review

以上是关于GraphQL 项目结构的主要内容,如果未能解决你的问题,请参考以下文章

用于可扩展项目的 graphql 代码组织

graphql-yoga 项目简单使用&&集成docker

swagger api 转graphql npm 包试用

使用 GraphQL 封装 REST API / 仅使用 GraphQL

graphql-yoga interface && union 使用

GraphQL是新的API网关