Как стать автором
Обновить

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

Время на прочтение10 мин
Количество просмотров21K
Автор оригинала: https://twitter.com/nikolasburk
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 мы всегда стараемся быть в тесном контакте с сообществом разработчиков. Присоединяйтесь к нам!
Теги:
Хабы:
Всего голосов 10: ↑5 и ↓5+1
Комментарии20

Публикации

Истории

Работа

Ближайшие события