Недавно я искал фреймворк 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. Наиболее важными являются следующие четыре:

Как мы можем создать вышеуказанные отношения в приложении 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.