Большинство разработчиков пишут REST API с различными методами HTTP, такими как GET, POST, PUT, DELETE и HEAD. Предположим, у нас есть микросервис, где он должен обрабатывать различные состояния и переходы, поэтому для этого он должен быть структурирован в конечном автомате. По сути, все, что нужно сделать, это определить все состояния внутри машины и описать переходы из одного состояния в другое.

Эта статья посвящена обработке различных состояний и переходов в REST API через конечный автомат javascript.

Что такое REST API

REST расшифровывается как RE презентационный S tate T ransfer.

RESTful API - это архитектурный стиль интерфейса (API) прикладной программы, который использует HTTP-запросы для доступа и использования данных. Эти данные могут использоваться для типов данных GET, PUT, POST и DELETE, которые относятся к чтению, обновлению, созданию и удалению операций, касающихся ресурсов.

Особенности REST API:

  1. Масштабируемость
  2. Гибкость и портативность
  3. Независимость

Принципы проектирования REST API:

  1. Единый интерфейс: Единый интерфейс позволяет клиенту разговаривать с сервером на едином языке, независимо от архитектурного бэкэнда того или другого.
  2. Клиент-сервер: слабая связь клиента и сервера, чтобы он мог развиваться индивидуально и независимо.
  3. Без сохранения состояния: вызовы REST API могут выполняться независимо друг от друга, они не должны полагаться на данные, хранящиеся на сервере.
  4. Кэширование: чтобы управлять огромным количеством входящих и исходящих вызовов, дизайн должен иметь возможность обрабатывать кэшируемые данные. Кеширование выполняется на стороне клиента.
  5. Многоуровневая система: несколько уровней работают вместе, чтобы построить иерархию, которая обеспечивает более масштабируемое и гибкое приложение.
  6. Код по запросу: он позволяет передавать код или апплет через API для использования в приложении.

что такое государственная машина?

Диаграмма конечного автомата моделирует поведение отдельного объекта, определяя последовательность событий, через которые объект проходит в течение своего времени существования в ответ на события.

Диаграмма конечного автомата состоит из:

  1. состояния
  2. Переходы

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

диаграмма конечного автомата для создания ресурса:

Архитектура:

Состояния:

  • Инициализация: начальное состояние ресурса
  • В очереди: состояние ресурса, когда он находится в очереди.
  • Создано: ресурс создан
  • Запуск: ресурс в рабочем режиме.
  • Остановка: в случае сбоя остановите ресурс.
  • Остановлено: ресурс очищен

Переходы:

  • Первоначально ресурс находится в состоянии инициализации, он может перейти в состояние «Остановлен» или «Поставлен в очередь».
  • После постановки в очередь он может перейти в состояние «Создано» или «Остановлено».
  • После создания возможен переход «Выполняется» или «Остановлен».
  • После выполнения возможный переход останавливается в случае сбоя.

библиотека npm для работы с конечным автоматом: javascript-state-machine

const StateMachine = require('javascript-state-machine');

let fsm = new StateMachine({
  init: 'Initializing',
  transitions: [
    {
      name: 'updateState',
      from: '*',
      to: function (n) {
        return n;
      }
    },
    {
      name: 'queue', from: 'Initializing', to: 'Queued'
    },
    {
      name: 'create', from: 'Queued', to: 'Created'
    },
    {
      name: 'start', from: 'Created', to: 'Running'
    },
    {
      name: 'stop', from: ['Created', 'Running'], to: 'Stopping'
    },
    {
      name: 'stopped', from: ['Initializing', 'Queued', 'Stopping'], to: 'Stopped'
    }
  ],
  methods: {
    onStopped: function() { console.log('State transition to Stopped') }
  },
  data: {
    endState: 'Stopped',
  }
});

События жизненного цикла: для отслеживания действий при любом переходе.

  • onBeforeTransition
  • onAfterTransition
  • onTransition
  • onEnterState
  • onLeaveState

Вспомогательные методы:

  • is (состояние): возвращает истину, если состояние является текущим состоянием
  • can (t): возвращает истину, если переход t возможен
  • transitions (): возможные переходы из текущего состояния

Полный код репозитория GitHub: state-machine

Заворачивать:

  • Понимание REST API
  • Возможности REST API
  • Понимание государственной машины
  • Диаграмма конечного автомата обработки ресурсов
  • Библиотека конечного автомата Javascript и ее методы

Источник: