Открыть сервис

Код по требованию

Код по требованию (англ. Code on Demand, CoD) — архитектурный стиль или парадигма взаимодействия в распределённых системах и программировании, при которой исполняемый код (например, скрипты, апплеты, компоненты) динамически загружается на клиентский узел с сервера и выполняется на стороне клиента. Этот подход противопоставляется классической модели «тонкого клиента», где всё исполнение происходит на сервере, а клиент лишь отображает результат. «Код по требованию» является одним из ключевых принципов REST (архитектуры состояния передачи репрезентаций), хотя его применение в рамках REST является опциональным (описан как «ограничение уровня 6» в модели зрелости REST). Основная идея состоит в том, чтобы гибко расширять функциональность клиентского программного обеспечения без необходимости его предварительной установки или обновления.

История

Концепция кода по требованию уходит корнями в ранние дни эры мейнфреймов, когда терминалы выполняли минимальную обработку, а основной код хранился и выполнялся на центральном компьютере. Однако термин и систематическое применение получили развитие в 1990-х годах с появлением веба. Изначально статические HTML-страницы со временем начали дополнять встроенными сценариями, такими как JavaScript и апплеты Java. Ключевым моментом стала публикация диссертации Роя Филдинга в 2000 году, где он формализовал REST-архитектуру и выделил «код по требованию» как необязательное ограничение. Филдинг отмечал, что CoD позволяет серверу динамически настраивать поведение клиента, изменяя логику приложения «на лету», что особенно ценно для снижения нагрузки на сервер и обеспечения офлайновой работы. В последующие годы популярность Java-апплетов спала, но принцип CoD обрёл новую жизнь в виде AJAX (асинхронный JavaScript и XML), WebAssembly (выполнение высокопроизводительного кода в браузере) и сервис-воркеров, которые позволяют загружать скрипты в фоне и выполнять их при отсутствии сети.

Механизм работы

Базовая схема взаимодействия

Типичная реализация кода по требованию выглядит следующим образом:

  1. Клиент (например, веб-браузер) инициирует запрос к серверу, передавая идентификатор ресурса и, возможно, данные для выполнения.
  2. Сервер обрабатывает запрос и в ответе возвращает не только данные (обычно в формате HTML, JSON или XML), но и исполняемый код (чаще всего JavaScript, но это может быть Lua, Python, WebAssembly-модуль и др.). Этот код может быть встроен в тело ответа или ссылаться на внешний ресурс.
  3. Клиент получает ответ, загружает и выполняет полученный код в своей среде исполнения (в браузере — это виртуальная машина JavaScript, в мобильном приложении — интерпретатор скриптов).
  4. После выполнения клиент может, но не обязан, сообщить серверу о результатах. Код может оставаться в кэше клиента для повторного использования или быть отброшенным.

Условия для реализации CoD

Для успешной реализации кода по требованию необходимо соблюдение ряда условий:

Преимущества и недостатки

Преимущества

Недостатки

Применение

«Код по требованию» широко используется в современных веб-приложениях, мобильных приложениях (например, React Native, Flutter используют динамическую загрузку JavaScript-модулей), а также в микросервисных архитектурах. Среди наиболее типичных примеров:

Примеры из экосистемы

Отношение к REST и альтернативы

Рой Филдинг в своей диссертации определил «код по требованию» как необязательное ограничение REST (пятое из шести). Он утверждал, что CoD позволяет создавать более гибкие системы, однако его применение усложняет симуляцию и тестирование, а также может нарушать абстракцию интерфейса. Многие реализации REST (например, в микросервисах с использованием JSON/HTTP) намеренно избегают CoD, предпочитая «толстый клиент» с предустановленной бизнес-логикой.

Альтернативами CoD служат:

Безопасность

Поскольку «код по требованию» подразумевает выполнение кода из ненадёжного источника, особое внимание уделяется безопасности. Основные атаки включают:

Для защиты применяются:

Перспективы

С развитием платформ PWA (Progressive Web Apps) и WebAssembly значение кода по требованию растёт. Ожидается, что CoD частично вытеснит традиционные нативные приложения в тех областях, где важны скорость развёртывания и кроссплатформенность. Однако ограничения безопасности и зависимость от производительности браузерных движков остаются ключевыми вызовами. В рамках архитектуры REST CoD продолжает оставаться опциональным, но его применение в индустрии (прежде всего в форме динамических JavaScript-загрузок) является повсеместным.

Источники

  1. Fielding, R. T. (2000). Architectural Styles and the Design of Network-based Software Architectures (PhD dissertation). Chapter 5: Representational State Transfer (REST).
  2. Fielding, R. T., & Taylor, R. N. (2002). Principled design of the modern Web architecture. ACM Transactions on Internet Technology (TOIT), 2(2), 115–150.
  3. Tilkov, S. (2010). RESTful Web Services: A Practical Guide. O'Reilly Media.
  4. W3C. (2021). Content Security Policy Level 3. W3C Candidate Recommendation.
  5. Mozilla Developer Network (MDN). WebAssembly.
  6. Google Developers. Service Workers: an Introduction.
  7. Раздел «Code on Demand» в документации REST API от Microsoft, Oracle, и других поставщиков.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →