Задать вопрос

Как типизировать обмен данными между микросервисами?

Итак: Имеется несколько сервисов на разных языках (например Python, Node.JS)
Все эти сервисы работают +/- с одной и той же структурой данных.

Для примера:

interface UserInfo {
  id: number;
  username: string;
  name: string;
  date_joined: string;
  birth_year: number;
  gender: string;
}

export enum MessageTypes {
  assistant = "assistant",
  user = "user",
  error = "error",
}


export interface MessageEntity {
  type: MessageTypes;
  user_id?: number;
  text: string;
}


В каждом языке / сервисе приходится писать свою типизацию и декларировать эти структуры данных.

Проблема: В ходе разработки постоянно расширяются эти стртуктры данных -> приходится во всех сервисах проверять/добавлять изменения в эти структуры.

Хочется:

1) централизованно объявлять/декларировать типы данных и их структур на каком-либо языке.
2) В каждом языке понимать версию этого описания. И если она отстала, то по новой генерить структуру данных. Например в python на dataclass или pydantic. Для Node - типы в TypeScript.

Знаете ли вы решение этой задачи? Есть какие либо фрмейворки или паттерны проектирования?
Я Знаю что эту проблему пытался решить gRPC + protobuf. Есть ли где то манифест как это правильно организовать?
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
AshBlade
@AshBlade
Просто хочу быть счастливым
gRPC

У него есть свой собственный язык для описания типов. Для многих ЯП есть свои генераторы типов.
Также богатая библиотека.

Общий файл с определением структур можешь хранить в отдельном репозитории. А другие репозитории будут на него ссылаться (гит такое умеет)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Можно спецификацию в формате OpenAPI хранить для всей системы централизовано или в каждом микросервисе хранить спецификацию его API отдельно, а при сборке вытаскивать спецификации зависимостей и из них собирать DTO'шки.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Почитай про GraphQL https://graphql.org/ . Многим - нравится. Можно декларировать гетерогенные структуры и типы данных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы