Подпишитесь на рассылку полезных материалов
Содержание
Ведущий разработчик Lad подробно описал особенности CMS Payload
В нашей компании мы использовали Payload для создания быстрых прототипов и MVP-проектов. Payload мы выбрали как весьма гибкий и интересный инструмент, предоставляющий большой функционал из коробки, админ-панель и базовую работу с пользователями.
В основном статья будет касаться взаимодействия со стороны backend-части.
Плюсы и преимущества Payload
- Упрощает разработку проекта, а это быстрая и простая начальная установка и готовая структура проекта (что в целом может быть и минусом).
- Поддержка мультиязычности из коробки.
- Предоставляет авторизацию из коробки.
- Аутентификация происходит по классической связке «email — password». Для авторизации используется Bearer-токен.
Также это может быть расширено посредством PassportJs, но на практике у нас не было необходимости его использовать.
- Access control на CRUD операции.
- Удобен для быстрого прототипирования. Если хочется за 30 минут запустить проект, описать несколько сущностей — решение крайне удобно.
- Предоставляет базовый CRUD.
После описания сущности для нее создается набор рутов, готовый для работы:
- Query-запросы (GraphQL).
Со стороны frontend появляется возможность выполнять простые запросы, включая сортировки и фильтрацию (equals, less_then, in и т. д.). - Стандартизация запросов. Ошибки, пагинация, ответы и прочее — все находится в едином стиле.
- Поддержка Mongodb и Postgres и простая быстрая базовая работа с ними (в нашем случае мы использовали только mongo).
- Быстрое описание коллекции и генерация интерфейсов на ее основе:
export const Clients: CollectionConfig = { slug: 'clients', auth: { depth: 1, tokenExpiration: 28800, maxLoginAttempts: 5, lockTime: 30 * 1000, }, labels: { plural: 'Клиенты', singular: 'Клиент', }, admin: { useAsTitle: 'name', }, fields: [ { name: 'name', type: 'text', label: 'Имя', }, { name: 'favoriteNumber', type: 'number', label: 'Любимое число', }, { type: 'date', label: 'Дата рождения', name: 'dateOfBirth', }, ], };
Интерфейс на выходе:
/** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "clients". */ export interface Client { id: string; name?: string | null; favoriteNumber?: number | null; dateOfBirth?: string | null; }
- Система предоставляет множество хуков на сущности и на поля. Часто это может быть очень удобно.
hooks: { afterRead: [afterReadUser], afterDelete: [afterDeleteUser], }
Источник: Хабр
Подпишитесь на рассылку полезных материалов