使用 Prisma 和 Apollo 轻松、类型安全地访问数据库

使用 Prisma(适用于 JavaScript 和 TypeScript 的更好 ORM),在 GraphQL 中查询 MySQL、PostgreSQL 和 SQL Server 数据库中的数据。

tech

什么是 Prisma?

Prisma 提供了数据库工具,这些工具是使用出色的 DX 构建高性能 Next.js 应用程序的完美伴侣。

ORM

Prisma ORM 是最受欢迎的 TypeScript ORM。它带有一个人类可读的模式、自动化迁移和一个直观的、完全类型安全的查询 API。

了解有关 Prisma ORM 的更多信息

Postgres

Prisma Postgres 是第一个没有冷启动的无服务器数据库。它基于unikernels,在裸机上运行,并带有一个内置缓存、高性能查询和无缝扩展——所有这些都具有出色的 DX。

了解有关 Prisma Postgres 的更多信息

Prisma 和 Apollo 如何协同工作

Apollo 为使用 GraphQL 构建应用程序提供了出色的生态系统。当使用 Apollo Server 针对数据库构建 GraphQL API 时,您需要在 GraphQL 解析器中发送数据库查询——这就是 Prisma 发挥作用的地方。

Prisma 是一个 ORM,用于 Apollo Server 的 GraphQL 解析器中来查询您的数据库。 它与 GraphQL 生态系统中的所有您喜欢的工具和库完美配合。了解更多关于Prisma 和 GraphQL

Prisma Schema

Prisma 模式使用 Prisma 的建模语言来定义您的 数据库模式。它使数据建模变得简单直观,尤其是在建模 关系 时。

您还可以通过我们的附加工具来增强 Prisma ORM 的使用
Prisma Accelerate 是一个全球数据库缓存和可扩展连接池,可以加速您的数据库查询。
Prisma Pulse 使您能够以类型安全的方式构建响应式、实时应用程序。Pulse 是实现 GraphQL 订阅或实时查询的完美伴侣。

1// Define the `User` table in the database
2model User {
3 id String @id @default(cuid())
4 email String @unique
5 password String
6 name String?
7 posts Post[]
8}
9
10// Define the `Post` table in the database
11model Post {
12 id String @id @default(cuid())
13 title String
14 content String?
15 authorId String
16 author User
17}

Prisma 和 Apollo 的用例

Prisma 可以用于 Apollo Server 的 GraphQL 解析器中,通过在数据库中读写数据来实施 GraphQL 查询和变更。

它兼容 Apollo 原生的 SDL-优先方法或由 Nexus 或 TypeGraphQL 等库提供的代码优先方法。

Apollo Server (SDL-优先)

Apollo Server — SDL-优先

当使用 Apollo 原生的 SDL-优先方法构建您的 GraphQL 模式时,您将提供 GraphQL 模式定义 作为字符串和一个实现此定义的 解析器映射。在您的解析器内部,您可以使用 Prisma Client 来读写数据库中的数据,以解析传入的 GraphQL 查询和变更。

1import { PrismaClient } from '@prisma/client';
2import { ApolloServer } from 'apollo-server'
3
4const prisma = new PrismaClient();
5
6const typeDefs = `
7 type User {
8 email: String!
9 name: String
10 }
11
12 type Query {
13 allUsers: [User!]!
14 }
15`;
16
17const resolvers = {
18 Query: {
19 allUsers: () => {
20 return prisma.user.findMany();
21 }
22 }
23};
24
25const server = new ApolloServer({ resolvers, typeDefs });
26server.listen({ port: 4000 });
Nexus (代码优先)
TypeGraphQL (代码优先)

Apollo Server — SDL-优先

当使用 Apollo 原生的 SDL-优先方法构建您的 GraphQL 模式时,您将提供 GraphQL 模式定义 作为字符串和一个实现此定义的 解析器映射。在您的解析器内部,您可以使用 Prisma Client 来读写数据库中的数据,以解析传入的 GraphQL 查询和变更。

1import { PrismaClient } from '@prisma/client';
2import { ApolloServer } from 'apollo-server'
3
4const prisma = new PrismaClient();
5
6const typeDefs = `
7 type User {
8 email: String!
9 name: String
10 }
11
12 type Query {
13 allUsers: [User!]!
14 }
15`;
16
17const resolvers = {
18 Query: {
19 allUsers: () => {
20 return prisma.user.findMany();
21 }
22 }
23};
24
25const server = new ApolloServer({ resolvers, typeDefs });
26server.listen({ port: 4000 });

“Prisma 提供了一种出色的建模语言来定义您的数据库,以及一个强大的 ORM,用于在 JavaScript 和 TypeScript 中使用 SQL。它与 Apollo Server 完美匹配,使使用数据库构建 GraphQL API 变得令人愉快。”

Kurt Kemple
Kurt Kemple -
开发关系经理
Apollo

为什么选择 Prisma 和 Apollo?

端到端类型安全

为您的应用程序获取一致的类型,从数据库到前端,以提高生产力并避免错误。

优化的数据库查询

Prisma 内置的数据加载器确保优化和高性能的数据库查询,即使是 N+1 查询。

类型安全的数据库客户端

Prisma Client 确保完全类型安全的数据库查询,并具有自动完成等优势 - 即使在 JavaScript 中也是如此。

直观的数据建模

Prisma 的建模语言受 GraphQL SDL 启发,让您可以直观地描述您的数据库模式。

简便的数据库迁移

将您的 Prisma 模式映射到数据库,这样您就不需要编写 SQL 来管理您的数据库模式。

筛选、分页和排序

Prisma Client 通过提供方便的 API 来减少样板代码,以实现常见的数据库功能。

精选的 Prisma 和 Apollo 示例

如何构建和部署 GraphQL API

一份全面的教程,解释如何使用 Apollo Server 和 Prisma 构建 GraphQL API 并将其部署到 DigitalOcean 的应用程序平台。

SDL-优先入门工具包

一个带有 SDL-优先模式和 SQLite 数据库的即用型示例项目

Nexus 入门工具包

一个带有 Nexus(代码优先)和 SQLite 数据库的即用型示例项目

© . This site is unofficial and not affiliated with Prisma Data, Inc.