Недавно я искал фреймворк REST API для предоставления надежного API в Node.js. Мне нужно было что-то, что позволило бы мне быстрее создавать модели, отношения, контроллеры CRUD API и поставлялось со встроенным слоем ORM.
Loopback 4 удовлетворил все мои потребности.
Loopback — это фреймворк Node.js с открытым исходным кодом, который помогает подключать данные, поступающие из запроса API, к внутренним ресурсам с готовыми интеграциями.
Так что вам просто нужно сосредоточиться на логике вашего приложения.
В этой статье мы углубимся в основы проекта Loopback. Мы изучим архитектуру, основные уровни, части примера приложения и в конечном итоге увидим, насколько легко и быстро можно создать приложение Loopback с помощью моделей, отношений и интеграцию с базой данных без написания единой строки кода!
CLI и создание проекта
Loopback предоставляет очень удобный интерфейс командной строки, который упрощает, автоматизирует и генерирует вещи для нас. Мы можем установить его глобально с помощью:
npm i -g @loopback/cli
Первая команда, которую мы можем использовать, это lb4 app
: она проведет нас через создание нового проекта Loopback. Мы сможем выбрать имя проекта, описание проекта, имя основного класса приложения и многие другие функции, которые могут понадобиться в нашем приложении.
Когда все готово, мы можем запустить приложение, используя npm или (в моем случае) yarn: yarn start
Слои проекта
Если мы посмотрим на проект, созданный lb4 app
, мы увидим разные папки. Они представляют наиболее важные слои приложения обратной связи:
- Модели
- Контроллеры
- Источники данных
- Репозитории
Модели
Mмодели представляют объекты бизнес-домена и их отношения. Мы можем создать их двумя способами, самый распространенный — с помощью кода с помощью декоратора @model
.
но самый простой и быстрый способ — использовать интерфейс командной строки с помощью команды: lb4 model
CLI позволит нам определить имя модели и все необходимые свойства.
Объект домена является сущностью(объектом домена с идентификатором), если он расширяет сущность Class, в противном случае, если он расширяет Model Class, это Model(объект предметной области без удостоверения личности).
Примечание. При работе с базой данных постоянными объектами приложения будут сущности. Мы также можем назвать их модели базы данных.
Объекты домена могут быть связаны друг с другом в Loopback с помощью Relations. Наиболее важными являются следующие четыре:
- HasMany: обозначает соединение один ко многим.
- HasOne: обозначает соединение один к одному.
- BelongsTo: обозначает соединение многие к одному.
- HasManyThrough: обозначает соединение многие ко многим.
Как мы можем создать вышеуказанные отношения в приложении Loopback4?
С CLI это занимает всего несколько секунд! Команда lb4 relation
CLI предложит модели, уже представленные в приложении, и создаст для нас отношения.
Примечание: для создания отношений между моделями нам нужен репозиторий для этих моделей. Далее в этой статье мы рассмотрим репозитории.
Контроллеры
Контроллеры — это объекты, содержащие конечные точки API. Они реализуют определенную бизнес-логику приложения и связывают данные, поступающие из запроса API, с моделями домена/базы данных.
Пустое приложение, созданное CLI (с использованием lb4 app
), содержит пример Controller с именем PingController
. Это очень просто: оно просто предоставляет одну GET
конечную точку с именем ping
, которая показывает некоторую информацию в виде ответ (если ваше приложение запущено, вы можете найти его здесь: http://localhost:3000/ping).
Благодаря Шаблону декоратора и широкому использованию Loopback, мы можем добавлять логику и встроенные помощники к нашим контроллерам декларативным способом.
Наиболее важными декораторами в контроллере являются декораторы OpenAPI. они позволяют Loopback автоматизировать маршрутизацию, генерировать определения запросов и ответов и создавать документацию.
Итак, давайте углубимся в Контроллеры замыкания на себя, взглянув на класс PingController
, предоставляемый примером приложения.
Приведенный выше код позволяет нам обнаружить три важных декоратора:
- @inject: запрашивает контейнер Loopback IoC для конкретной службы или свойства, ранее связанного с ключом привязки.
В приведенном выше коде мы внедряем каждый HTTP-запрос в приватную переменную req, поэтому мы можем каким-то образом использовать ее в нашей логике.
Loopback предоставляет различные встроенные службы, которые мы можем внедрить в наши классы. Общие доступны по следующим привязкам:
- AuthenticationBindings
- BootBindings
- CoreBindings
- RestBindings. - @get: это сокращение от декоратора @operation, который используется для определения команды, пути, параметров и ответа конечной точки. С помощью этого сокращения мы выставляем запрос
GET
с конечной точкой/ping
. Конечно, Loopback предоставляет такое же сокращение для других HTTP-глаголов:
-Post
- Put
- Исправить
- Удалить - @response: это еще один удобный декоратор, используемый для определения того, как будет реагировать ваша конечная точка. Мы можем установить объект ответа вручную (используя тип
ResponseObject
) или используя объект домена.
Чтобы создать пустой Контроллер, как обычно, мы можем использовать CLI с командой: lb4 controller
.
Приведенная выше команда создает пустой контроллер, но с помощью той же команды мы также можем создавать контроллеры CRUD для выполнения основных операций CRUD над моделью базы данных.
Для этого нам сначала понадобится Репозиторий и Источник данных.
Итак, давайте изучим их.
Источники данных
Источник данных использует Connector для представления данных во внешней системе. Благодаря источникам данных мы можем подключать к нашему приложению соединители баз данных SQL и NoSQL, службы SOAP или любые другие встроенные соединители, предоставляемые Loopback или сообществом.
Чтобы создать источник данных, мы можем использовать CLI с командой: lb4 datasource
Команда поможет нам выбрать тип коннектора, его конфигурацию и сгенерирует для нас весь необходимый код.
Есть дюжина встроенных соединителей, и создание одного занимает несколько секунд!
Репозитории
Репозиторийпредоставляет операции доступа к данным (например, CRUD API) для манипулирования объектом домена в отношении базы данных или службы (или более общего источника данных).
Таким образом, в то время как модели описывают форму объекта предметной области, репозитории добавляют поведение, отражая каждую операцию с источником данных.
Loopback предоставляет несколько встроенных репозиториев для создания CRUD или операций ключ-значение. Эти реализации в основном связывают модели баз данных(сущности)с источником данных
Как мы можем создать базовый репозиторий для операций CRUD?
CLI снова приходит нам на помощь. Используя команду lb4 repository
, мы пройдем через выбор источника данных и сущности, и в конечном итоге для нас будет сгенерирован код.
Теперь, с этим недавно созданным Репозиторием, у нас есть API для выполнения операций CRUD над Entity, которые будут отражены в источник данных.
Место, откуда эти API могут быть вызваны, например, Controller.
На самом деле обе команды lb4 controller
и lb4 relation
генерируют контроллеры, которые используют API-интерфейсы репозитория для манипулирования сущностями и прозрачной подачи данных в источник.
Приложение для управления билетами за 5 шагов
Теперь мы собираемся создать очень простое приложение, которое позволит пользователям получать свои билеты или карты покупок безбумажным способом. Это будет очень быстро, и мы даже не будем открывать редактор для этого. Давайте посмотрим шаги:
1. Запустите проект с lb4 app
.
2. Создайте с помощью lb4 model
следующие объекты домена: Пользователь и Заявка.
Атрибуты могут быть минимальными: email и имя для Пользователя и название и описание для Заявки. Затеммы хотим, чтобы они сохранялись в базе данных, поэтому они должны быть объектами и иметь идентификатор.
3. Создайте источник данных с соединителем базы данных (например, MongoDB), используя lb4 datasource
.
4. Создайте два репозитория, чтобы добавить операции CRUD для моделей баз данных с помощью lb4 repository
: UserRepository и TicketRepository.
5. Создайте отношения с lb4 relation
:
. Пользовательимеет многобилетов
. Билетпринадлежитпользователю
Вот и все! Как видите, все можно сделать с помощью Loopback CLI, не написав ни единой строчки кода!
Теперь запустите проект с yarn start
и откройте проводник API по адресу http://localhost:3000/explorer/.
И вуаля! На создание наших REST API ушло 5 минут и 0 строк кода!
Конечно, в этом приложении отсутствуют некоторые (очень) важные службы, такие как Аутентификация и Авторизация, но мы рассмотрим их в следующий раз, написав немного больше кода. 😁
Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.