Platformatic是一种新工具,可帮助Node.js开发人员更快地运送API。在这个三部分的系列中,我们将探讨为什么Prisma和Platformatic如此适合,以及Prisma如何帮助您改善您的数据建模,迁移和使用Platformatic时查询工作流程。
。什么是平台DB
Platformatic DB是一种开源工具,可自动为您的数据库生成CRUD API。它支持GraphQL和REST(带有OpenAPI模式)API。
它还允许您使用plugins扩展API,并添加身份验证以及授权您的API。平台数据库支持SQLITE,MYSQL,MARIADB和POSTGRESQL数据库。
什么是Prisma
Prisma是一个开源ORM(对象关系映射器)。它提供了一种使用Prisma schema language定义数据库结构的声明性方法。它还提供了通过自动生成完全可定制的SQL迁移来发展数据库模式的工具。
Prisma提供了一个类型和直观的客户端,用于与您的数据库进行交互,称为Prisma Client。
Prisma如何通过平台DB改善您的开发工作流程
虽然平台上可以从数据库中加速构建REST和GRAPHQL API,但Prisma可以通过多种方式补充您的开发工作流程。
在以下各节中,我们将探讨Prisma使使用平台DB的三种具体方式。
直观数据建模语言
Prisma提供了Prisma架构 - 对数据库模式的直观,可读性的声明性定义。 Prisma模式通过描述其所需的最终状态来充当您数据库模式的真实源。
使用PRISMA模式的好处之一是自动完成,借助Prisma扩展,在建模数据库模式时进行类型检查,使您能够尽早发现错误。
。以下模式表示:
-
User
和Post
模型 -
User
和Post
模型之间的一对多关系
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
name String?
email String @unique
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
title String
content String
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
请参阅Prisma docs以了解有关数据建模的更多信息。
自动生成和可自定义的SQL迁移
要使用Platformatic生成API,您必须首先定义数据库架构。数据库架构是在一组手动编写的迁移文件中使用SQL定义的。但是,通过手动保持SQL迁移可能很乏味,易碎且容易出错。
我还认为写自己的迁移会引入用户错误的风险,例如忘记创建外键。
Kishan Gajera来自Generate Up and Down Migrations for Platformatic DB using Prisma
编辑器通常在使用SQL时不提供自动完成和类型检查。这可能使发现错误等错误(例如外国键)等错误。
。prisma可以通过使用CLI的定义模式生成完全可抑制的迁移来帮助自动化此过程。
将根据previous section中的模式生成以下SQL迁移:
-- CreateTable
CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"email" TEXT NOT NULL,
"name" TEXT,
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Post" (
"id" SERIAL NOT NULL,
"title" VARCHAR(255) NOT NULL,
"content" TEXT NOT NULL,
"published" BOOLEAN NOT NULL DEFAULT false,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"authorId" INTEGER,
CONSTRAINT "Post_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
-- AddForeignKey
ALTER TABLE "Post" ADD CONSTRAINT "Post_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
数据库查询的类型安全和自动完成
Platformatic提供用于扩展API的plugins。它还提供了一个用于查询数据库的SQL mapper。
除了开箱即用的SQL映射器外,您还可以使用Prisma客户端扩展平台API来查询数据库。 Prisma Client提供基于您的Prisma架构的丰富类型定义的完全类型安全查询。
Platformatic还提供打字稿支持。您可以从数据库中使用CLI到generate TypeScript types进行实体。
如果您正在使用VS代码编辑器,则VS代码的Intellisense和建议在定义查询时会弹出。
此外,VS代码还可以运行您的JavaScript文件,该文件使用Prisma客户端通过Typescript编译器并在违反类型时抛出错误。
了解更多信息,您可以在this article中使用JSDOC编写类型安全JavaScript
包起来
平台速度加快了REST和GRAPHQL API的开发。 Prisma通过提供直观的数据建模,自动生成可定制的迁移,类型安全和自动完成来进一步推动开发体验。
请注意第2部分和第3部分建模,自动生成数据库迁移,并使用Prisma Client使用Prisma Client进行平台的插件扩展API。 ðÖ¾