什么是 Prisma 和 GraphQL
Prisma 是一个现代化的 Node.js ORM(对象-关系映射器),它可以用于管理数据库的结构和数据。Prisma 对象模型是通过定义模型(Model)和连接(Connection)来表示的。模型定义数据库的数据结构,连接定义模型之间的关系。Prisma 提供了一个友好的命令行工具,用于创建、部署和管理数据库。Prisma 在数据访问和性能方面都表现出色。
GraphQL 是一种用于 API 的查询语言和运行时。它使客户端能够请求需要的数据,而服务器只返回这些数据。GraphQL 允许客户端指定数据的结构和内容,这意味着客户端不会收到不需要的数据。GraphQL 还提供了一个强大的类型系统,可以确保客户端请求的数据类型正确。GraphQL 的灵活性、可重用性和可扩展性使其成为构建 API 的理想选择。
Prisma 和 GraphQL 如何一起工作
Prisma 和 GraphQL 可以一起工作,可以使用 GraphQL API 读取和写入 Prisma 数据库中的数据。GraphQL 作为 API 提供商,可以通过创建 GraphQL 服务器轻松地将 Prisma 数据库与客户端连接起来。这可以通过使用 Prisma Client 导入 Prisma 模型并编写查询来实现。
以下是一个示例,该示例演示了如何使用 Prisma 和 GraphQL 生成一个简单的用户管理系统:
- 安装 Prisma 和 graphql-yoga:
npm install prisma graphql-yoga
- 引入 Prisma 和 graphql-yoga:
const { PrismaClient } = require('@prisma/client')
const { GraphQLServer } = require('graphql-yoga')- 创建 Prisma Client:
const prisma = new PrismaClient()
- 定义 GraphQL Schema:
// www.javascriptcn.com code example
type Query {
users: [User!]!
user(id: ID!): User
}
type Mutation {
createUser(name: String!, email: String!): User!
updateUser(id: ID!, name: String, email: String): User!
deleteUser(id: ID!): Boolean!
}
type User {
id: ID!
name: String!
email: String!
}- 实现 GraphQL Resolvers:
// www.javascriptcn.com code example
const resolvers = {
Query: {
users: () => prisma.user.findMany(),
user: (_, { id }) => prisma.user.findUnique({ where: { id } })
},
Mutation: {
createUser: (_, { name, email }) => prisma.user.create({ data: { name, email } }),
updateUser: (_, { id, name, email }) => prisma.user.update({ where: { id }, data: { name, email } }),
deleteUser: (_, { id }) => prisma.user.delete({ where: { id } })
}
}- 创建 GraphQL Server:
const server = new GraphQLServer({ typeDefs, resolvers })- 启动服务器:
server.start(() => console.log(`Server is running on http://localhost:4000`))
现在,您可以访问 http://localhost:4000 来测试您的 GraphQL API。您可以使用 Playground 工具测试查询和变异。
小结
使用 Prisma 和 GraphQL 可以快速构建数据库服务,并提供强大的数据访问能力和性能。Prisma 提供了一个友好的命令行工具,可以轻松地创建、部署和管理数据库。GraphQL 提供了强大的查询和类型系统,可以确保客户端请求的数据类型正确。Prisma 和 GraphQL 的结合为构建现代化数据库服务提供了一个理想的解决方案。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d62ea0a941bf7134bdb7c0