使用 Prisma 和 GraphQL 构建现代化的 API

随着互联网的快速发展,现代化的 API 已经成为了前端开发的必备技能之一。而使用 Prisma 和 GraphQL 构建 API,不仅可以提高开发效率,还可以让 API 更加灵活和易于维护。

Prisma 简介

Prisma 是一个开源的数据库 ORM,它可以通过简单的命令行工具来管理数据库的结构和数据。使用 Prisma 可以避免手动编写 SQL 语句,从而提高开发效率。

Prisma 支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 SQL Server。同时,Prisma 还支持多种编程语言,包括 TypeScript、JavaScript 和 Rust。

GraphQL 简介

GraphQL 是一种用于 API 的查询语言和运行时环境。它可以让前端开发者自由地查询和获取需要的数据,从而避免了传统 REST API 中的 over-fetching 和 under-fetching 问题。

GraphQL 的查询语言非常灵活,可以根据前端的需求来进行精确的查询。同时,GraphQL 还支持多种数据源,包括数据库、第三方 API 和本地计算机等。

使用 Prisma 和 GraphQL 构建 API

下面我们来介绍如何使用 Prisma 和 GraphQL 构建 API。

第一步:安装 Prisma

首先,我们需要安装 Prisma CLI。可以通过以下命令来安装:

安装完成后,可以通过以下命令来创建一个新的 Prisma 项目:

第二步:定义数据模型

接下来,我们需要定义数据模型。可以在 prisma/schema.prisma 文件中定义数据模型。例如,我们定义一个简单的数据模型,包括 UserPost 两个实体:

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model User {
  id    Int    @id @default(autoincrement())
  name  String
  email String @unique
  posts Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String
  published Boolean @default(false)
  author    User?   @relation(fields: [authorId], references: [id])
  authorId  Int?
}

第三步:生成 Prisma Client

接下来,我们需要使用 Prisma CLI 生成 Prisma Client。可以通过以下命令来生成:

生成完成后,可以在项目中使用 Prisma Client 来操作数据库。

第四步:定义 GraphQL API

最后,我们需要定义 GraphQL API。可以使用任何支持 GraphQL 的框架,例如 Apollo Server 或者 Nexus。这里我们以 Apollo Server 为例,来定义一个简单的 GraphQL API:

const { ApolloServer, gql } = require('apollo-server');
const { PrismaClient } = require('@prisma/client');

const prisma = new PrismaClient();

const typeDefs = gql`
  type Query {
    users: [User!]!
    posts: [Post!]!
  }

  type User {
    id: Int!
    name: String!
    email: String!
    posts: [Post!]!
  }

  type Post {
    id: Int!
    title: String!
    content: String!
    published: Boolean!
    author: User
  }
`;

const resolvers = {
  Query: {
    users: async () => {
      return await prisma.user.findMany();
    },
    posts: async () => {
      return await prisma.post.findMany();
    },
  },
  User: {
    posts: async (parent) => {
      return await prisma.post.findMany({
        where: {
          authorId: parent.id,
        },
      });
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

server.listen().then(({ url }) => {
  console.log(`🚀 Server ready at ${url}`);
});

在上面的代码中,我们定义了两个查询,分别是 usersposts。同时,我们也定义了 UserPost 两个类型,分别对应数据库中的 UserPost 实体。

在查询 User 的时候,我们也查询了该用户的所有 Post。这是通过 Prisma Client 来实现的,可以看到代码非常简洁和易于理解。

总结

本文介绍了如何使用 Prisma 和 GraphQL 构建现代化的 API。通过使用 Prisma 和 GraphQL,我们可以提高开发效率,同时也可以让 API 更加灵活和易于维护。

在实际开发中,我们可以根据具体的需求来定义数据模型和 GraphQL API。同时,我们也可以使用其他支持 GraphQL 的框架来实现 API。无论是什么样的项目,使用 Prisma 和 GraphQL 都可以让开发更加高效和愉悦。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65be197eadd4f0e0ff7aadad