使用 Prisma & Apollo 輕鬆實現型別安全的資料庫訪問

透過 Prisma(一個更好的 JavaScript 和 TypeScript ORM),使用 GraphQL 查詢 MySQL、PostgreSQL 和 SQL Server 資料庫中的資料。

tech

什麼是 Prisma?

Prisma 提供資料庫工具,是構建高效能 Next.js 應用程式並帶來出色開發體驗 (DX) 的完美伴侶。

ORM

Prisma ORM 是最流行的 TypeScript ORM。它具有人類可讀的 schema、自動化遷移和直觀、完全型別安全的查詢 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 schema 使用 Prisma 的建模語言來定義您的資料庫 schema。它使資料建模變得簡單直觀,尤其是在建模關係方面。

您還可以透過我們的附加工具增強 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 查詢和變更 (mutations)。

它與 Apollo 原生的 SDL-優先方法或由 Nexus 或 TypeGraphQL 等庫提供的程式碼優先方法相容。

Apollo Server (SDL-優先)

Apollo Server — SDL-優先

當使用 Apollo 原生的 SDL-優先方法構建您的 GraphQL schema 時,您將 GraphQL schema 定義作為字串和實現此定義的解析器對映提供。在您的解析器內部,您可以使用 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 schema 時,您將 GraphQL schema 定義作為字串和實現此定義的解析器對映提供。在您的解析器內部,您可以使用 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 內建的資料載入器 (dataloader) 確保最佳化和高效能的資料庫查詢,甚至對於 N+1 查詢也是如此。

型別安全的資料庫客戶端

Prisma Client 確保完全型別安全的資料庫查詢,並提供自動補全等好處——即使在 JavaScript 中也是如此。

直觀的資料建模

Prisma 的建模語言受到 GraphQL SDL 的啟發,讓您能夠直觀地描述您的資料庫 schema。

輕鬆資料庫遷移

將您的 Prisma schema 對映到資料庫,這樣您就不需要編寫 SQL 來管理您的資料庫 schema。

篩選、分頁和排序

Prisma Client 透過為常見資料庫功能提供方便的 API 來減少樣板程式碼。

精選 Prisma & Apollo 示例

如何構建和部署 GraphQL API

一個全面的教程,解釋如何使用 Apollo Server 和 Prisma 構建 GraphQL API 並將其部署到 DigitalOcean 的應用平臺。

SDL-優先入門套件

一個可直接執行的示例專案,包含 SDL-優先 schema 和 SQLite 資料庫

Nexus 入門套件

一個可直接執行的示例專案,包含 Nexus (程式碼優先) 和 SQLite 資料庫

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