透過 Prisma 和 Apollo 輕鬆且類型安全地存取資料庫

透過 Prisma(適用於 JavaScript 和 TypeScript 的更佳 ORM),在 GraphQL 中查詢來自 MySQL、PostgreSQL 和 SQL Server 資料庫的資料。

tech

什麼是 Prisma?

Prisma 讓資料處理變得輕鬆!它提供類型安全的 Node.js 和 TypeScript ORM、全域資料庫快取、連線池和即時資料庫事件。

查詢
// Creating a new record
await prisma.user.create({
firstName: “Alice”,
email: “alice@prisma.io”
})
表格
id firstName email
1 Bobby bobby@tables.io
2 Nilufar nilu@email.com
3 Jürgen jums@dums.edu
4 Alice alice@prisma.io

Prisma 和 Apollo 如何結合

Apollo 為使用 GraphQL 建構應用程式提供了一個絕佳的生態系統。當使用 Apollo Server 針對資料庫建構 GraphQL API 時,您需要在 GraphQL 解析器內傳送資料庫查詢 — 這就是 Prisma 的用武之地。

Prisma 是一個 ORM,用於 Apollo Server 的 GraphQL 解析器內,以查詢您的資料庫。 它與 GraphQL 生態系統中您所有喜愛的工具和程式庫完美搭配。深入了解Prisma 與 GraphQL

Prisma Schema

Prisma schema 使用 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 為定義您的資料庫提供了出色的建模語言,以及用於在 JavaScript 和 TypeScript 中使用 SQL 的強大 ORM。它是 Apollo Server 的完美搭配,並使使用資料庫建構 GraphQL API 感覺愉快。」

Kurt Kemple Kurt Kemple -
DevRel 經理 of Apollo

為什麼選擇 Prisma 和 Apollo?

端對端類型安全

取得從資料庫到前端應用程式的連貫類型,以提高生產力並避免錯誤。

最佳化的資料庫查詢

Prisma 的內建 dataloader 可確保最佳化且高效能的資料庫查詢,即使是 N+1 查詢也是如此。

類型安全的資料庫用戶端

Prisma Client 確保完全類型安全的資料庫查詢,並具有自動完成等優點 — 即使在 JavaScript 中也是如此。

直觀的資料建模

Prisma 的建模語言受到 GraphQL SDL 的啟發,讓您可以直觀地描述您的資料庫結構描述。

輕鬆的資料庫遷移

將您的 Prisma 結構描述映射到資料庫,讓您無需編寫 SQL 來管理您的資料庫結構描述。

篩選、分頁和排序

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

精選 Prisma 和 Apollo 範例

如何建構和部署 GraphQL API

一個綜合教學課程,說明如何使用 Apollo Server 和 Prisma 建構 GraphQL API,並將其部署到 DigitalOcean 的 App Platform。

SDL 優先入門套件

一個可立即執行的範例專案,具有 SDL 優先結構描述和 SQLite 資料庫

Nexus 入門套件

一個可立即執行的範例專案,具有 Nexus(程式碼優先)和 SQLite 資料庫