Apollo GraphQL 服务器 + TypeScript

问题描述 投票:0回答:8

我最近在做一个项目,有node.js + express + typescript + Apollo 服务器堆栈。在研究 Apollo 客户端时,我偶然发现了 TypeScript 部分。但服务器上没有类似的东西,这让我在这种情况下可以自由选择。

所以问题是:是否有使用 TypeScript 实现 Apollo graphql 服务器的最佳实践,或者我至少应该避免什么?

typescript graphql nodes apollo apollo-server
8个回答
21
投票

我为此编写了一个小型库和一个 CLI。它为服务器(根据您的架构)和客户端(根据您的架构和 GraphQL 文档)生成 TypeScript 类型。 它还生成解析器签名并且非常可定制。

您可以在这里尝试:https://github.com/dotansimha/graphql-code-generator

其背后的想法是让开发人员能够充分利用 GraphQL 和生成的类型,并更轻松地自定义生成的输出。


5
投票

我正在使用 GraphQL CLI。你会像这样安装它

npm install -g graphql-cli

然后生成支持 TypeScript 的 GraphQL 项目

更多信息:https://oss.prisma.io/content/graphql-cli/05-Boilerplates.html


3
投票

我已经使用 typescript + apollo graphql 服务器相当长一段时间了,并启动了一个模板,其中包含 dotan's graphql-code-generator 以及一些定义的文件夹结构和方法,使所有内容都能很好地协同工作。重点是保持简单,但当我发现好的实践和有用的库时,我会继续添加它。

github 存储库位于这里


2
投票

我一直在使用 apollo-server-express 和 Typescript 进行一些项目,并且我在 gitHub 上用它做了一个小演示。

我不确定

best practices
,但是
apollo-server-express
基本上它提供了
graphqlExpress
graphiqlExpress
处理程序。

查看有关 Apollo Server with Express 的文档以了解更多详细信息。


0
投票

我写了一个名为 typescript-typedefs 的小软件包。它允许您定义类并使用 typescript 装饰器从那里生成 typescript typedef。这使得它变得超级简单,并且与 apollo 服务器的处理方式很好地配合。

示例:

@Type()
class Student {
  @Field(ID)
  id: string;

  @Field()
  name: string;

  @Field(String)
  friendNames: string[];

  @Field({ type: Int, nullable: true })
  room: number;

  @Field()
  gpa: number;

  @Field(Course)
  courses: Course[];
}


0
投票

我绝对建议使用

type-graphql + apollo-server-express


0
投票

编写 Graphql API 通常有 2 种主要方法。要么先编码,要么先架构。

模式优先在节点社区中最受欢迎。它基本上意味着编写一个 graphql 模式文件(SDL),然后导入它并将其传递到 apollo 服务器(或您使用的任何工具),然后附加解析器。要将 Typescript 添加到此流程,您可以使用像 graphql-codegenerator 这样的代码生成器来为您需要实现的解析器生成 Typescript 定义。

代码优先是大多数其他语言中 graphql API 的实现方式。它基本上只是意味着使用库编写模式,然后从代码生成模式(或模式文件)。这种方法有很多好处,包括不必在多个不同的地方定义类型。

对于代码优先的解决方案,有一些不错的选择。 Type-GraphQL 和 GraphQL nexus 都是非常可靠的库,具有良好的打字稿支持。就我个人而言,我将永远提倡 GiraphQL,因为我维护它,但我确实相信它是目前在 typescript 中构建 graphql API 的最佳方式。

GiraphQL:https://giraphql.com/

关于 Prisma 的精彩演讲以及为什么代码优先很棒 https://youtu.be/5oyWwjLpUS4


0
投票

我更喜欢使用WunderGraph。 WunderGraph 中的所有内容都是使用 TypeScript 完成的。

您启动服务器,在 TypeScript(底层是 Prisma)中检查您的数据源,然后您可以编写 Typescipt 操作来操作数据源中的数据。

© www.soinside.com 2019 - 2024. All rights reserved.