Повторное использование функций HTTP REST на нескольких языках программирования - PullRequest
2 голосов
/ 25 апреля 2019

Фон

Я работаю над проектом, в котором нескольким независимым системным службам необходимо взаимодействовать с центральной службой через четко / полностью определенный REST API (т.е. через запросы HTTP GET, PUT и POST). Существует несколько сложных наборов операций, которые мы хотели бы свести к одной функции и сделать доступными для всех сервисов, выступающих в качестве клиентов для сервисов REST (т. Е. GET от нескольких разных конечных точек, объединить результаты и выполнить POST и PUT для другой / новой конечной точки).


Задача

Все эти системные службы написаны на разных языках программирования (например, C, C ++, Go, Node.js и Python), и мы хотели бы повторно использовать одни и те же функции в этих различных проектах. Пока что наиболее жизнеспособным подходом является написание библиотеки и предоставление ее другим проектам.

  • Тем не менее, использование C в качестве языка для размещения кода приведет к тому, что при использовании некоторых функций, поддерживаемых большинством других / более новых языков, будет упущено использование, и чрезмерно усложнит код.
  • Если бы мы собирались сделать библиотеку на C ++, теперь возимся с генераторами привязок, что еще больше усложняет).
  • Мы могли бы потенциально создать дополнительную службу REST (нам не разрешено изменять текущую), которая действует как промежуточный «агент» для «перевода запросов» для других системных служб, но мы бы предпочли использовать библиотека, а не добавление другой службы, если это возможно (так как тогда мы должны переопределить / перефакторизовать модель аутентификации / безопасности, добавив в соединение «прокси-службу»).

Вопрос

Существует ли более элегантный / поддерживаемый способ повторного использования кода между несколькими проектами и языками программирования, поскольку всем им просто нужен способ интерпретировать HTTP-вызовы одинаковым образом? Например, это то, что буферы протокола (или что-то подобное) может управлять?

...