Prisma: Полноценный ORM для Node.js и TypeScript

от автора

Prisma — это ORM нового поколения для Node.js и TypeScript. После более чем двух лет разработки мы рады сообщить, что все инструменты Prisma готовы к эксплуатации в production!

Содержание


Новая парадигма для объектно-реляционного отображения


Prisma — это ORM нового поколения с открытым исходным кодом для Node.js и TypeScript. Она состоит из следующих инструментов:

  • Prisma Client: Автогенерируемый и типобезопасный клиент базы данных
  • Prisma Migrate: Декларативное моделирование данных и миграции с возможностью пользовательского редактирования
  • Prisma Studio: Современный пользовательский интерфейс для просмотра и редактирования данных


Эти инструменты можно использовать вместе или по отдельности в любом проекте на Node.js или TypeScript. В настоящее время Prisma поддерживает PostgreSQL, MySQL, SQLite, SQL Server, MongoDB.

Базы данных — это сложно

Работа с базами данных — одна из самых сложных областей разработки приложений. Моделирование данных, миграция схем и написание запросов к базе данных — это задачи, с которыми разработчики приложений сталкиваются каждый день.

В Prisma мы обнаружили, что экосистема Node.js — хотя и становится все более популярной для создания приложений с поддержкой баз данных — не предоставляет разработчикам приложений современных инструментов для решения этих задач.

Разработчики приложений должны думать о данных, а не о SQL

Поскольку инструменты становятся более специализированными, разработчики приложений должны иметь возможность сосредоточиться на реализации функций, приносящих пользу их бизнесу, вместо того чтобы тратить время на соединение слоев приложения путем написания программного кода.

Prisma — полноценный ORM для Node.js и TypeScript

Хотя Prisma решает те же проблемы, что и традиционные ORM, ее подход к решению этих проблем принципиально отличается.

Моделирование данных в Prisma schema

При использовании Prisma вы определяете свою модель данных в Prisma schema. Вот пример того, как выглядят ваши модели:

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

Каждая из этих моделей описывает таблицу в соответствующей базе данных и служит основой для сгенерированного доступа к данным с API, предоставляемого Prisma Client. В VS Code расширение Prisma предоставляет подсветку синтаксиса, автодополнение, быстрые исправления и множество других возможностей, чтобы сделать моделирование данных волшебным и приятным занятием ✨.

Подробнее о Prisma schema

Миграция баз данных с Prisma Migrate

Prisma Migrate преобразует Prisma schema в SQL, необходимый для создания и изменения таблиц в вашей базе данных. Его можно запустить команду prisma migrate из API Prisma CLI.

Разверните, чтобы просмотреть сгенерированный SQL для вышеуказанных моделей

PostgreSQL

CREATE TABLE "Post" (     "id" SERIAL NOT NULL,     "title" TEXT NOT NULL,     "content" TEXT,     "published" BOOLEAN NOT NULL DEFAULT false,     "authorId" INTEGER,      PRIMARY KEY ("id") );  CREATE TABLE "User" (     "id" SERIAL NOT NULL,     "email" TEXT NOT NULL,     "name" TEXT,      PRIMARY KEY ("id") );  CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");  ALTER TABLE "Post" ADD FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE; 

MySQL

CREATE TABLE `Post` (     `id` INTEGER NOT NULL AUTO_INCREMENT,     `title` VARCHAR(191) NOT NULL,     `content` VARCHAR(191),     `published` BOOLEAN NOT NULL DEFAULT false,     `authorId` INTEGER,      PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  CREATE TABLE `User` (     `id` INTEGER NOT NULL AUTO_INCREMENT,     `email` VARCHAR(191) NOT NULL,     `name` VARCHAR(191), UNIQUE INDEX `User.email_unique`(`email`),      PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  ALTER TABLE `Post` ADD FOREIGN KEY (`authorId`) REFERENCES `User`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; 

SQLite

CREATE TABLE "Post" (     "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,     "title" TEXT NOT NULL,     "content" TEXT,     "published" BOOLEAN NOT NULL DEFAULT false,     "authorId" INTEGER,     FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE );  CREATE TABLE "User" (     "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,     "email" TEXT NOT NULL,     "name" TEXT );  CREATE UNIQUE INDEX "User.email_unique" ON "User"("email"); 

SQL Server

CREATE TABLE [dbo].[Post] (     [id] INT NOT NULL IDENTITY(1,1),     [title] NVARCHAR(1000) NOT NULL,     [content] NVARCHAR(1000),     [published] BIT NOT NULL CONSTRAINT [DF__Post__published] DEFAULT 0,     [authorId] INT,     CONSTRAINT [PK__Post__id] PRIMARY KEY ([id]) );  CREATE TABLE [dbo].[User] (     [id] INT NOT NULL IDENTITY(1,1),     [email] NVARCHAR(1000) NOT NULL,     [name] NVARCHAR(1000),     CONSTRAINT [PK__User__id] PRIMARY KEY ([id]),     CONSTRAINT [User_email_unique] UNIQUE ([email]) );  ALTER TABLE [dbo].[Post] ADD CONSTRAINT [FK__Post__authorId] FOREIGN KEY ([authorId]) REFERENCES [dbo].[User]([id]) ON DELETE SET NULL ON UPDATE CASCADE; 

Хотя код SQL генерируется автоматически на основе Prisma schema, вы можете легко изменить его в соответствии с вашими конкретными требованиями. Благодаря такому подходу Prisma Migrate обеспечивает оптимальный баланс между повышением продуктивности и возможностью контроля.

Подробнее о Prisma Migrate

Интуитивно понятный и типобезопасный способ работы с базой данных с Prisma Client

Основным преимуществом работы с Prisma Client является то, что он позволяет разработчикам мыслить объектами и поэтому предлагает привычный и естественный способ рассуждать о своих данных.

В Prisma Client нет концепции экземпляров модели. Вместо этого он помогает сформировать запросы к базе данных, которые всегда возвращают простые объекты JavaScript. Благодаря генерируемым типам вы получаете автозаполнение и для этих запросов.

Также в качестве бонуса для разработчиков TypeScript: Все результаты запросов Prisma Client полностью типизированы. Фактически, Prisma обеспечивает самые сильные гарантии безопасности типов среди всех ORM на TypeScript (сравнение безопасности типов с TypeORM можно прочитать здесь).

Перейдите по вкладкам этого блока кода, чтобы изучить некоторые запросы Prisma Client

или изучите полный справочник API:

Lists

// Find all posts const posts = await prisma.post.findMany() 

Relations

// Find all posts and include their authors in the result const postsWithAuthors = await prisma.post.findMany({   include: { author: true }, }) 

Nested write

// Create a new user with a new post const userWithPosts: User = await prisma.user.create({   data: {     email: 'ada@prisma.io',     name: 'Ada Lovelace',     posts: {       create: [{ title: 'Hello World' }],     },   }, }) 

Filter

// Find all users with `@prisma` emails const users = await prisma.user.findMany({   where: {     email: { contains: '@prisma' },   }, }) 

Fluent API

const postsByUser = await prisma.user.findUnique({ where: { email: 'ada@prisma.io' } }).posts() 

Pagination

const posts = await prisma.post.findMany({   take: 5,   cursor: { id: 2 }, }) 

Подробнее о Prisma Client

Современный интерфейс администратора с Prisma Studio

Prisma также поставляется с современным интерфейсом администратора для вашей базы данных — вспомните phpMyAdmin, но в 2021 году ?.

Подробнее о Prisma Studio


Prisma может быть использовано в любом стеке.


Prisma не привязывается к приложениям, которые вы создаете, и прекрасно дополнит ваш стек, независимо от того, какие технологии вы предпочитаете. Вы можете узнать больше о том, как Prisma работает с вашим любимым фреймворком или библиотекой здесь:

Если вы хотите изучить Prisma с использованием этих или других технологий, вы можете ознакомиться с нашими готовыми примерами:

Примеры проектов Prisma


Готовность к эксплуатации в критически важных приложениях


За последние три года Prisma претерпела значительные изменения, и мы невероятно рады поделиться результатами с сообществом разработчиков.

От GraphQL к базам данных

За последние годы, с тех пор как мы начали создавать инструменты для разработчиков, мы как компания прошли через ряд крупных итераций и поворотов продукта:

Prisma — это результат опыта, который мы приобрели, будучи одним из первых новаторов в экосистеме GraphQL, и наших знаний о слоях данных компаний всех размеров, от небольших стартапов до крупных предприятий.

Используемая тысячами компаний с момента первого выпуска три года назад, Prisma прошла боевые испытания и готова к эксплуатации в критически важных приложениях.

Мы заботимся о разработчиках

Prisma разрабатывается в открытом режиме. Наши команды разработчиков продуктов и инженеров отслеживают проблемы на GitHub и обычно отвечают на них в течение 24 часов после открытия проблемы.

Новые релизы выпускаются каждые две недели и содержат новые функции, исправления ошибок и множество улучшений. После каждого выпуска мы проводим прямую трансляцию на Youtube, чтобы представить новые функции и получить отзывы от нашего сообщества.

Мы также стараемся помочь разработчикам, где бы они ни поднимали вопросы о Prisma, будь то в Slack, GitHub Discussions или Stackoverflow, через специальную команду поддержки сообщества.

Наше сообщество представлено в цифрах:

WHAT? HOW MANY?
Проблемы на GitHub, решенные с момента первоначального выпуска > 2,5k
Решенные запросы в службу поддержки (GitHub, Slack, Stackoverflow, …) > 3k
Участники Prisma Slack > 40k
Соавторы GitHub по всем репозиториям > 300
Звезды в GitHub > 17k
Отправка пакетов наклеек в 2021 году (заказать наклейки можно здесь) > 100
Мероприятия для разработчиков, проведенные с 2017 года (встречи, конференции, …) > 50

Если вы хотите узнать обо всех замечательных событиях, которые произошли в 2021 году, ознакомьтесь с этой статьей в блоге: Что нового в Prisma? (Q1/21)

Компании, использующие Prisma

Мы были рады видеть, как Prisma помогла компаниям всех размеров стать более продуктивными и быстрее выпускать продукцию.

На протяжении всего нашего пути такие компании, как Adidas, HyreCar, Agora Systems, Labelbox и многие другие, предоставляли нам ценный вклад в развитие нашего продукта. Мы имели удовольствие работать с некоторыми из самых инновационных и изобретательных технологических лидеров, таких как:

Rapha

«Prisma помогает Rapha сохранять гибкость, позволяя нам оценивать варианты хранения данных, сохраняя при этом постоянный опыт разработчиков».
Tom Hutchinson – Head of Mobile

Grover

«Я вижу только преимущества использования Prisma как с точки зрения разработки, так и с точки зрения внедрения. Я внедрил ее в одном проекте, и теперь другие команды принимают ее органично».
Ricardo Almeida – Software Engineer

iopool

«Поскольку мы нашли Prisma, мы решили начать рефактор для всего проекта. Мы знали, что Prisma поможет нам работать быстрее и увереннее, тем более что время на рефактор у нас было ограничено.»
Luc Matagne — Engineering Lead

Если вы хотите узнать, как Prisma помогла этим компаниям стать более продуктивными, ознакомьтесь с этими ресурсами:

От создания прототипов до разработки и внедрения в эксплуатацию.

Лучшие инструменты разработчика — это те, которые выходят за пределы ваших возможностей и легко адаптируются с ростом сложности проекта. Именно так мы разработали Prisma.

Prisma имеет встроенные процессы для всех этапов жизненного цикла разработки, от создания прототипов, разработки, развертывания, CI/CD, тестирования и т.д. Ознакомьтесь с нашей документацией и статьями, чтобы узнать об этих процессах и о том, как их реализовать с Prisma.

Подобнее

DEVELOPMENT STAGE LINK RESOURCE
Plan Data Modeling Data Guide
Plan Prisma schema Documentation
Code Prisma Client API Documentation
Test Testing best practices with Prisma Documentation
Deploy Expand and contract pattern for database migrations Data Guide
Deploy Deployment guides for Prisma-based applications Documentation
Monitor Best practices for monitoring apps in production Blog
Operate Database troubleshooting Data Guide

Веб-фреймворки нового поколения строятся на основе Prisma

Нам особенно приятно, что многие авторы фреймворков и библиотек выбирают Prisma в качестве ORM по умолчанию для своих инструментов. Вот подборка фреймворков более высокого уровня, использующих Prisma:

  • RedwoodJS: Fullstack фреймворк на основе React и GraphQL
  • Blitz: Fullstack-фреймворк на основе Next.js
  • KeystoneJS: Headless CMS
  • Wasp: DSL для разработки полнофункциональных веб-приложений на основе React
  • Amplication: Набор инструментов для создания полнофункциональных приложений на основе React и NestJS


Открытый исходный код и не только


Мы являемся компанией с венчурным финансированием и командой, которая страстно желает улучшить жизнь разработчиков приложений. Хотя мы начинаем свой путь с создания инструментов с открытым исходным кодом, наше долгосрочное видение Prisma намного больше, чем создание «просто» ORM.

Во время недавнего мероприятия Enterprise Event и встречи Prisma Meetup мы начали делиться этим видением, которое мы называем Application Data Platform.

Концепция Prisma заключается в демократизации пользовательского уровня доступа к данным, используемого такими компаниями, как Facebook, Twitter и Airbnb, и предоставлении его командам разработчиков и организациям любого размера.

Эта идея во многом вдохновлена такими компаниями, как Facebook, Twitter и Airbnb, которые создали пользовательские уровни доступа к данным поверх своих баз данных и других источников данных, чтобы облегчить разработчикам приложений безопасный и эффективный доступ к необходимым им данным.

Цель Prisma — демократизировать идею этого пользовательского слоя доступа к данным и сделать его доступным для команд разработчиков и организаций любого размера.

Prisma Data Platform

Custom Data Access Layer


Как мы можем вам помочь?


Мы будем рады помочь вам создать ваш следующий проект с Prisma! Чтобы узнать больше о нашем предложении для предприятий и о том, как Prisma впишется в ваш стек и видение, свяжитесь с нами.


Начало работы с Prisma


Существуют различные способы начать работу с Prisma:

Быстрый старт (5 мин)

Подробнее о том, как отправлять запросы к базе данных с Prisma Client к демонстрационной базе данных SQLite — установка не требуется!
www.prisma.io/docs/getting-started/quickstart

Установка Prisma в существующий проект


Приходите ради ORM, оставайтесь ради сообщества ?.


Сообщество было невероятно важно для нас с самого начала нашей работы. От проведения встреч и конференций до помощи пользователям на Slack и GitHub Discussions мы всегда стараемся быть в тесном контакте с сообществом разработчиков. Присоединяйтесь к нам!


ссылка на оригинал статьи https://habr.com/ru/articles/588562/