Создайте Javascript API Class с несколькими базовыми URL - PullRequest
2 голосов
/ 10 июня 2019

Мой бэкэнд включает в себя несколько микросервисов, каждый со своим базовым URL.На данный момент у меня есть сервисы user и metadata, но в будущем это может расшириться.

У меня есть приложение React, и я пытаюсь создать класс-оболочку API для вызова, когда янужно что-то модифицировать.Мой первый подход состоял в том, чтобы создать несколько экземпляров API для каждой службы и импортировать их по мере необходимости:

import userApi from '../userApi'
import metadataApi from '../metadataApi'

userApi.getUser(user_id)
metadataApi.getCollections()

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

import API from '../api'

API.getUser(user_id)
API.getCollections()
API.deleteUser(user_id)

Но я не уверен, как я могу достичь этого, не раздутый класс API.Могу ли я импортировать массив методов внутри него и просто прикрепить их к прототипу класса перед экспортом?

Я хочу найти подходящую структуру, чтобы лучше отделить каждую сущность и упростить ее создание и изменение в будущем..

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Если честно, разделять ваши классы API на отдельные файлы / модули - это хорошо.Когда приложение небольшого размера, оно выглядит немного излишним, но по мере роста оно помогает упорядочить вещи.

Вы уже указали, что API-интерфейсы вашего бэкенда структурированы в микросервисы, почему бы не оставить их отдельными объектамив передней части тоже?Управлять вашими классами API будет легче, когда / если вы когда-нибудь начнете использовать разные конечные точки.

Хотя в прошлом я создавал базовый класс, который может наследовать каждый из этих классов API, гдеЯ могу настроить общую логику, такую ​​как заголовки запросов и т. Д., Если вы хотите получить возможность повторного использования таким образом.

Я даже сделал еще один шаг вперед, который создал бы другой уровень абстракции, который обрабатывает интеграциюпроисходит, то есть через HTTP, где я бы объявил, какой HTTP-клиент использовать, например.Таким образом, если я когда-нибудь изменю HTTP-клиента, я изменю его только в одном месте

Такая структура выглядела как ->

_ServiceProxy.js

Общие функции, такие каккак GET, POST, PUT, DELETE и т. д. Здесь определен клиент HTTP. Здесь определяется высокоуровневая обработка ошибок

_someBaseAPI.js

Абстрактный клиент, который определяет, как взаимодействовать с наборомраспространенные микросервисы, например, логика аутентификации и т. д.

UserAPI.js

Конкретный / статический класс, интересующийся только тем, как обрабатывать запросы / ответы для пользователей

0 голосов
/ 10 июня 2019

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

...