Apollo GraphQL 服务器 + TypeScript
Apollo GraphQL Server + TypeScript
我最近在做一个项目,有node.js + express + typescript + Apollo server stack。在研究 Apollo 客户端时,我偶然发现了 TypeScript 部分。但是对于服务器来说就不是这样了,在这种情况下我可以自由选择。
所以问题是:是否有关于使用打字稿实现 Apollo graphql 服务器的最佳实践,或者我至少应该避免什么?
我一直在用它 apollo-server-express with Typescript for some projects and I have a small demo on gitHub。
我不确定 best practices
,但 apollo-server-express
基本上它提供了 graphqlExpress
和 graphiqlExpress
处理程序。
查看有关 Apollo Server with Express 的文档了解更多详情。
我正在使用 GraphQL CLI。你会像这样安装它
npm install -g graphql-cli
然后生成支持 TypeScript 的 GraphQL 项目
更多信息:https://oss.prisma.io/content/graphql-cli/05-Boilerplates.html
我为此编写了一个小型库和一个 CLI。它为服务器(根据您的架构)和客户端(根据您的架构和 GraphQL 文档)生成 TypeScript 类型。
它还生成解析器签名并且非常可定制。
您可以在这里尝试:https://github.com/dotansimha/graphql-code-generator
其背后的想法是让开发人员能够充分利用 GraphQL 和生成的类型,并更轻松地自定义生成的输出。
我使用 typescript + apollo graphql server 已经有一段时间了,并启动了一个模板,其中包含 dotan's graphql-code-generator 以及一些定义的文件夹结构和方法,这使得一切都很好地协同工作。重点是保持简单,但我会继续添加,因为我发现了良好的实践和有用的库。
github 存储库是 here。
我写了一个叫typescript-typedefs的小包。它允许您定义 类 并使用打字稿装饰器从那里生成打字稿类型定义。这使它非常简单,并且与 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[];
}
我绝对建议使用 type-graphql + apollo-server-express
编写 Graphql API 通常有两种主要方式。代码优先或模式优先。
模式优先在节点社区中最受欢迎。它基本上意味着编写一个 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
我最近在做一个项目,有node.js + express + typescript + Apollo server stack。在研究 Apollo 客户端时,我偶然发现了 TypeScript 部分。但是对于服务器来说就不是这样了,在这种情况下我可以自由选择。
所以问题是:是否有关于使用打字稿实现 Apollo graphql 服务器的最佳实践,或者我至少应该避免什么?
我一直在用它 apollo-server-express with Typescript for some projects and I have a small demo on gitHub。
我不确定 best practices
,但 apollo-server-express
基本上它提供了 graphqlExpress
和 graphiqlExpress
处理程序。
查看有关 Apollo Server with Express 的文档了解更多详情。
我正在使用 GraphQL CLI。你会像这样安装它
npm install -g graphql-cli
然后生成支持 TypeScript 的 GraphQL 项目
更多信息:https://oss.prisma.io/content/graphql-cli/05-Boilerplates.html
我为此编写了一个小型库和一个 CLI。它为服务器(根据您的架构)和客户端(根据您的架构和 GraphQL 文档)生成 TypeScript 类型。 它还生成解析器签名并且非常可定制。
您可以在这里尝试:https://github.com/dotansimha/graphql-code-generator
其背后的想法是让开发人员能够充分利用 GraphQL 和生成的类型,并更轻松地自定义生成的输出。
我使用 typescript + apollo graphql server 已经有一段时间了,并启动了一个模板,其中包含 dotan's graphql-code-generator 以及一些定义的文件夹结构和方法,这使得一切都很好地协同工作。重点是保持简单,但我会继续添加,因为我发现了良好的实践和有用的库。
github 存储库是 here。
我写了一个叫typescript-typedefs的小包。它允许您定义 类 并使用打字稿装饰器从那里生成打字稿类型定义。这使它非常简单,并且与 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[];
}
我绝对建议使用 type-graphql + apollo-server-express
编写 Graphql API 通常有两种主要方式。代码优先或模式优先。
模式优先在节点社区中最受欢迎。它基本上意味着编写一个 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