LoopBack - это высоко расширяемая платформа Node.js с открытым исходным кодом на основе Express, которая позволяет быстро создавать API и микросервисы, состоящие из серверных систем, таких как базы данных и службы SOAP или REST.

В этом посте мы собираемся создать простой API, взаимодействующий с API обменных курсов с помощью прокси-сервера, немного исследуя клиентские инструменты LoopBack 4.

Создание проекта

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

Установите loopback с помощью npm:
$ npm install -g strongloop

Поместите параметр -g для глобальной установки, loopback будет добавлен в ваш PATH, чтобы вы могли работать везде.

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

Давайте создадим наше приложение:
Откройте свой терминал, перейдите в каталог проекта и просто введите:

$ lb4 app

А теперь настройте свой проект, например:

? Project name: currency-converter
? Project description: easy currency conversion
? Project root directory: currency-converter
? Application class name: CurrencyConverterApplication

Очень просто! Ваше приложение создано.

Создание других артефактов

После создания нашего приложения пришло время создать другие классы для нашего проекта.

Источник данных:
LoopBack предоставляет множество коннекторов, которые можно легко подключить к базам данных SQL / NoSQL. Для этого API мы собираемся использовать REST Service Connector.

В вашем терминале введите:

$ lb4 datasource

? Datasource name: exchangerate
? Select the connector for exchangerate:
 PostgreSQL (supported by StrongLoop)
 Oracle (supported by StrongLoop)
 Microsoft SQL (supported by StrongLoop)
❯ REST services (supported by StrongLoop) -> Select this one
 SOAP webservices (supported by StrongLoop)
 Couchbase (provided by community)
 Neo4j (provided by community)
(Move up and down to reveal more choices)

Нажмите Enter для любого вопроса, не беспокойтесь.

Будет создан файл с именем src/datasources/exchangerate.datasource.json, перейдите туда и измените все содержимое для этого:

{
"name": "exchangerate",
"connector": "rest",
"options": {
   "headers": {
        "accept": "application/json",
        "content-type": "application/json"
   }
},
"operations": [{
   "template": {
       "method": "GET",
       "url": "https://api.exchangeratesapi.io/latest?base={base}"
   },
   "functions": {
      "getdata": ["base"]
   }
 }]
}

Как видите, мы создали функцию с именемgetdata, которая вызывает API https://api.exchangeratesapi.io/latest, передавая параметр с именем base.
Вы можете использовать другие методы или даже создать несколько datasources.

Служба:
Теперь нам нужно создать нашу службу, которая будет отвечать за вызов API, настроенного выше.

В вашем терминале введите:

$ lb4 service

С последующим:

? Service type: (Use arrow keys)
❯ Remote service proxy backed by a data source -> Select this one
 Local service class bound to application context
 Local service provider bound to application context
? Service name: Exchangerate -> The name

Контроллер
LoopBack дает вам мощный способ подключить ваш REST API к контроллеру, и самое лучшее: код не требуется. Это автоматически!

В вашем терминале введите:

$ lb4 controller

С последующим:

? Controller class name: Exchangerate -> Controller's name
Controller Exchangerate will be created in src/controllers/exchangerate.controller.ts
? What kind of controller would you like to generate? (Use arrow keys)
❯ Empty Controller -> Select this
 REST Controller with CRUD functions

Будет создан контроллер. Давайте создадим наш первый метод GET для возврата всех обменных курсов:

import {inject} from '@loopback/context';
import {ExchangeRateService} from '../services/exchange-rate.service';
import {get, param} from '@loopback/rest';
export class ExchangeRateController {
   constructor(
     @inject('services.ExchangeRate')
     private exchangeRateService: ExchangeRateService,
   ) {}
@get('/exchange-rate')
   getall() {
    return this.exchangeRateService.getdata();
   }
}

Так просто! Если вы видите приведенный выше код, мы создали конечную точку с именем /exchange-rate, которая будет возвращать все данные из service, подключенного к datasource, вызывая API ExchangeRate.

Создадим еще один!

@get('/exchange-rate/{base}')
get(@param.path.string('base') base: string) {
  return this.exchangeRateService.getdata(base);
}

Мы создали параметр base, отправив его нашему сервису. Все это благодаря loopback / rest, который дает вам множество инструментов для ускорения разработки вашего API.

Запуск вашего проекта

Пришло время увидеть, как творится волшебство!

В вашем терминале введите:

$ npm start

Server is running at http://[::1]:3000
Try http://[::1]:3000/ping

Одна из вещей, которые мне больше всего нравятся в Loopback, - это проводник API. Если вы наберете в своем браузере http://127.0.0.1:3000/explorer/, вы увидите пользовательский интерфейс Swagger, уже подключенный к вашим методам в вашем контроллере.

Пытаться

Вы можете увидеть полный код здесь: https://github.com/irineul/lb4-currency