TGViewer
Спасибо, я лайкнул Спасибо, я лайкнул @thxilikeit · 230 subscribers
Post #113 152
🌐 eXternal Adapter — последний ключевой элемент матричной архитектуры.

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

🧩 Что считается внешней системой?
Чаще всего — это другой бекенд-сервис (микросервис), который принимает запросы и возвращает данные.

Но также внешней системой может быть:
* файловая система
* шина данных
* вебхуки
* или любые другие источники вне нашего приложения.

Соответственно, протокол взаимодействия будет зависеть от типа системы:

* для бэкендов — HTTP или gRPC
* для файлов — локальное чтение, S3 и т.д.

Поэтому внутри адаптера обычно выделяют подслой транспорта, который отвечает за конкретную коммуникацию.


⚙️ Пример: взаимодействие с бекендом

Слой адаптера, как и любой другой слой, должен иметь свой интерфейс.
Для сетевых запросов мы можем свести всё к двум операциям — query и mutation (да, почти как в GraphQL).

Где бы нам ни понадобилось обратиться к внешнему сервису, мы используем эти два метода, а уже адаптер решает, как именно выполнить запрос — через REST, GraphQL или что-то ещё.


🧱 Как сделать транспорт стабильным?

Проблема: параметры запроса в fetch (method, body, headers) и в GraphQL (query, variables) — разные.
Решение: развернуть зависимость на стабильный импорт.

Создаём свой интерфейс TransportRequest, в котором обобщаем параметры:

* вместо resource для REST используем query для GraphQL
* вместо bodygraphql query string

Так мы создаём единый контракт, не зависящий от конкретного транспорта.


📁 Пример с файловой системой

Здесь тоже появляется дополнительный уровень:
создаём интерфейс FileMeta с полем baseDir, где локально это корень проекта, а для S3 — сервер с файлами.

Дальше — транспорты:

* node:fs для локальной работы
* s3-sdk для облака

При этом сам адаптер FS может иметь минимальный набор методов, например:

* files()
* write()
* read()

То же самое и с API-адаптером — он просто предоставляет query() и mutation().


💡 В итоге eXternal Adapter — это граница между вашим приложением и внешним миром,
которая изолирует сложность коммуникации и делает систему по-настоящему стабильной и расширяемой.
  • 🔥 3
  • ❤ 1
  • 👍 1
More from @thxilikeit
  1. Jun 20, 2026Если не можешь остановить бесконечную генерацию слопа — возглавь её, как грится. Оказалось…
  2. Nov 7, 2025Директивы захватывают React-экосистему! 🎯 JavaScript годами жил с одной директивой — use…
  3. Nov 5, 2025🎭 Лебедь, рак и щука: три философии React Осень в React-экосистеме как никогда напоминает…
  4. Oct 31, 2025Искать сеньера в конце 2025-го, конечно, впечатляет. Процентов 80 кандидатов на сеньорские…
  5. Oct 30, 2025Тайлер Виген — человек, который превратил статистический троллинг в искусство. 🖼 С 2014 г…
  6. Oct 29, 2025🎯 А вот и гайды для Next.js подъехали: как запустить фреймворк внутри ChatGPT Next.js не…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →