Совместное использование файлов Json Schema среди проектов с контролем версий - PullRequest
0 голосов
/ 19 мая 2019

Задача

У нас есть несколько независимых проектов (микросервисов), которые в какой-то момент своей жизни будут ссылаться на некоторые файлы схемы JSON, что говорит о том, что каждый проект имеет свой собственный стек программирования (в основном это Nodejs и Golang).

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

Ниже я опишу свое собственное решение, но я бы тоже хотел получить ваши отзывы.

мое решение

  1. Я настроил проект github и поместил туда файлы схемы json
  2. Для каждого изменения схем я обновляю репозиторий и отмечаю его новой версией
  3. Я использую jsdelivr для доступа к нему следующим образом: https://cdn.jsdelivr.net/gh/[GITHUB-ID]/[GITHUB-PROJECT]@[TAG]/schema.js
  4. Когда я хочу клонировать код случайного микросервиса, которому требуются файлы схемы, в рамках процесса сборки я загружаю файл схемы из jsdelivr и сохраняю его в локальном репозитории, однако скачанные файлы схемы git игнорируются.

Что вы думаете об этом, есть ли лучший и более плавный способ справиться с этим делом?

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Обработка множественных зависимостей является (по крайней мере, на мой взгляд) одной из основных проблем при работе с несколькими микросервисами.Вот несколько способов, которые я могу придумать или увидеть:

  1. Наличие Monorepo -

    Становится намного легче, если у вас есть всеВаши услуги расположены в одном хранилище.Это означает, что вы можете использовать помощников монорепо, таких как lerna (для проектов JS) или аналогичных.В этом случае вы можете иметь структуру папок, например -

- root
---- файлы общей схемы (с версиями)
----сервис 1
---- сервис 2

Наличие службы, предоставляющей файлы схемы -

Идея состоит в том, чтобы создать отдельный репозиторий для файлов схемы и обслуживать их при загрузке любого приложения.Это можно сделать несколькими способами -

а).Поддерживая разные пакеты для разных языков - например, gems для ruby ​​и node_modules для проектов Node.Затем эти модули отвечают за выбор соответствующих схем из центрального репо.

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

PS: вы также можете захотеть взглянутьв таких инструментах, как prototool .

0 голосов
/ 20 мая 2019

С моей точки зрения, лучший способ - поместить схему JSON в отдельный файл (в вашем проекте или в обычном репозитории в Github и т. Д.), А затем обратиться к нему из документации, которую вы используете для описания своих API.Например, если вы используете Swagger, вы можете включить ссылку на внешний URL (или путь к файлу). Пример 1 , пример 2 .

Управление версиями в любом случае зависит от вас, просто назовите ваши JSON-файлы как some-entity-response-v2.json, и ваши API, вероятно, будут иметь то же самоеверсия.Держите каждую версию обратно совместимой, и все будет в порядке.

...