Этот вопрос проверяет понимание опционального ограничения REST и его практического применения в веб-архитектуре.
Code on Demand (код по требованию) - это опциональное ограничение REST, которое позволяет серверу передавать клиенту исполняемый код для расширения его функциональности. Клиент может загружать и выполнять код, отправленный сервером, что уменьшает необходимость предварительных знаний о сервере.
Code on Demand - это единственное опциональное ограничение в архитектуре REST, которое позволяет серверу расширять функциональность клиента динамически.
Сервер может передавать клиенту исполняемый код, который клиент выполняет:
Клиент загружает код с сервера во время выполнения
Код расширяет функциональность клиента
Уменьшает количество предварительных знаний клиента о сервере
html
<!-- Сервер отправляет HTML с JavaScript -->
<script src="/api/widgets/search.js"></script>Браузер загружает и выполняет JavaScript код, который добавляет новую функциональность.
html
<applet code="DynamicChart.class" width="300" height="200">
</applet>javascript
// Сервер может отправить конфигурацию с логикой
{
"validationRules": {
"email": "function(email) { return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email); }"
}
}Гибкость - сервер может изменять поведение клиента без его переустановки
Экономия полосы пропускания - вместо данных можно отправлять логику их обработки
Расширяемость - новые функции могут добавляться динамически
Безопасность - выполнение кода с сервера создает риски
Сложность отладки - динамически загружаемый код сложнее отлаживать
Нарушение прозрачности - клиент должен доверять серверу
Редкое использование - в современных API почти не применяется
javascript
// Сервер определяет кастомные элементы
class SearchWidget extends HTMLElement {
connectedCallback() {
this.innerHTML = `<input type="search" placeholder="Поиск...">`;
}
}
customElements.define('search-widget', SearchWidget);javascript
// Сервер отправляет правила валидации
const validationScript = `
function validateUser(user) {
return user.age >= 18 && user.email.includes('@');
}
`;
eval(validationScript); // Осторожно с eval!Вместо Code on Demand обычно используются:
Well-defined API - четко определенные контракты API
Webhooks - сервер инициирует взаимодействие
SDK и библиотеки - предустановленный клиентский код
Вывод: Code on Demand - это мощная, но редко используемая возможность REST, которая позволяет серверу динамически расширять функциональность клиента. Из-за проблем безопасности и сложности отладки она уступила место более предсказуемым подходам с четко определенными API контрактами.