Skip to main content

🌐 REST API для IoT устройств. Как интернет-сервисы управляют железом

📋 Паспорт спринта

Параметр Значение
Предмет Интернет вещей (элективный курс)
Класс 9 класс
Спринт № 23 из 36
Тип занятия Практико-ориентированный с элементами разработки
Продолжительность 90 минут
Формат Лабораторный практикум с созданием API

🎯 Цели спринта (Sprint Goals)

Основная цель:

Понять архитектуру REST API для IoT систем и создать собственный веб-сервис для управления устройствами

Конкретные результаты спринта:

  • Понимают принципы REST архитектуры для IoT
  • Различают GET, POST, PUT, DELETE запросы и их применение
  • Создают простой REST API для управления светодиодом
  • Тестируют API через браузер и специальные инструменты
  • Понимают JSON формат данных для IoT
  • 🆕 Могут спроектировать API для реального IoT устройства
  • 🆕 Понимают вопросы безопасности и аутентификации
  • 🆕 Анализируют производительность и масштабируемость

🔄 Sprint Retrospective предыдущего спринта (0-3 мин)

Быстрая проверка:

  • “Кто настроил MQTT дома? Какие были сложности?”
  • “Поднимите руку, кто увидел MQTT сообщения от своих датчиков”
  • “Какое самое интересное MQTT устройство вы создали?”

Связка с новой темой: “MQTT отлично работает между устройствами. Но как веб-приложения управляют IoT? Как ваш смартфон включает умную лампочку? Сегодня станем создателями IoT API!”


🕐 Sprint Timeline (90 минут)

⚡ SPRINT START (3-8 мин): Демо “Магия веб-управления”

🆕 Интерактивная демонстрация:

  1. Учитель показывает: Заходит на веб-страницу с кнопкой
  2. Нажимает кнопку: Загорается светодиод на Raspberry Pi
  3. Меняет настройки: Через форму на сайте меняет яркость
  4. Показывает телефон: Та же страница, те же кнопки работают
  5. 🆕 Открывает “под капот”: Показывает Network tab в браузере

Вопросы к классу:

  • “Как вы думаете, как веб-страница ‘разговаривает’ с железом?”
  • “Что происходит между нажатием кнопки и включением светодиода?”
  • “Почему это работает и с компьютера, и с телефона?”

Проблема: “У нас есть датчики, есть веб-сайты, но как их подружить? Создадим мост между интернетом и железом!”

📚 THEORY BLOCK (8-25 мин): REST API для IoT

Микро-блок 1 (8-13 мин): Что такое API?

 1🤝 API = Application Programming Interface
 2   "Договор" между программами о том, как они общаются
 3
 4🏪 АНАЛОГИЯ: API как меню в ресторане
 5   📋 Меню = документация API
 6   🍔 Блюда = функции устройства  
 7   👨‍🍳 Повар = IoT устройство
 8   🙋‍♂️ Клиент = веб-приложение
 9
10💬 ПРИМЕР РАЗГОВОРА:
11   Клиент: "Дайте мне гамбургер" (GET /lights/1)
12   Повар: "Вот ваш гамбургер" (200 OK, {status: "on"})
13   Клиент: "Сделайте его острым" (POST /lights/1/brightness {level: 80})

Интерактив: “Какие ‘команды’ вы бы дали умной лампочке?”

Микро-блок 2 (13-18 мин): REST = правила хорошего тона

 1🌐 REST = Representational State Transfer
 2   Набор правил для создания понятных API
 3
 4📝 ОСНОВНЫЕ ПРИНЦИПЫ:
 5   1. Используем HTTP методы по назначению
 6   2. URL описывает ресурс, не действие  
 7   3. Ответы в стандартном формате (JSON)
 8   4. Каждый запрос независимый
 9
10🔧 HTTP МЕТОДЫ ДЛЯ IoT:
11   GET /devices/led1        - узнать состояние светодиода
12   POST /devices/led1       - создать новую настройку
13   PUT /devices/led1        - изменить состояние (включить/выключить)
14   DELETE /devices/led1     - удалить устройство из системы
15
16❌ ПЛОХО: /turnOnLight?id=1
17✅ ХОРОШО: PUT /lights/1 {"state": "on"}

Микро-блок 3 (18-25 мин): JSON - язык IoT данных

 1🆕 ПРИМЕРЫ IoT JSON:
 2
 3// Состояние умной лампочки
 4{
 5  "id": "bedroom_light",
 6  "state": "on",
 7  "brightness": 75,
 8  "color": "#FF6B35", 
 9  "last_updated": "2025-05-25T14:23:45Z"
10}
11
12// Данные с датчика температуры
13{
14  "sensor_id": "temp_01",
15  "temperature": 23.5,
16  "humidity": 45.2,
17  "timestamp": "2025-05-25T14:23:45Z",
18  "battery_level": 87
19}
20
21// Команда для умного замка
22{
23  "action": "unlock",
24  "duration": 30,
25  "authorized_by": "mobile_app"
26}

☕ BREAK (25-30 мин): Техническая пауза

🛠️ ПРАКТИЧЕСКИЙ БЛОК (30-75 мин): Создаем IoT API

Этап 1: Знакомство с инструментами (30-35 мин)

🆕 Настройка рабочего места:

  • Редактор: VS Code или онлайн IDE
  • Тестирование: Браузер + Postman/Insomnia (или онлайн альтернатива)
  • Сервер: Node.js с Express.js (или Python Flask)
  • 🆕 Симулятор устройств: Виртуальные LED и датчики

Этап 2: Создание базового API (35-50 мин)

🆕 Пошаговое создание простого IoT API:

 1// Псевдокод для понимания концепции
 2// server.js - Создаем IoT API сервер
 3
 4// 1. Создаем "виртуальные" IoT устройства
 5let devices = {
 6  led1: { state: "off", brightness: 0 },
 7  sensor1: { temperature: 22.5, humidity: 60 },
 8  door1: { locked: true, last_opened: null }
 9};
10
11// 2. API endpoints для управления устройствами
12
13// GET /api/devices - получить список всех устройств
14function getAllDevices() {
15  return devices;
16}
17
18// GET /api/devices/led1 - получить состояние LED
19function getDeviceState(deviceId) {
20  return devices[deviceId];
21}
22
23// PUT /api/devices/led1 - изменить состояние LED  
24function updateDevice(deviceId, newState) {
25  devices[deviceId] = {...devices[deviceId], ...newState};
26  return devices[deviceId];
27}
28
29// POST /api/devices - добавить новое устройство
30function addDevice(deviceData) {
31  devices[deviceData.id] = deviceData;
32  return deviceData;
33}

🆕 Практические задания по группам:

🔵 ГРУППА “LED CONTROLLERS”:

 1ЗАДАЧА: Создать API для управления RGB светодиодом
 2
 3ENDPOINTS:
 4GET /api/led - получить текущее состояние
 5PUT /api/led/power - включить/выключить  
 6PUT /api/led/color - изменить цвет
 7PUT /api/led/brightness - изменить яркость
 8
 9ТЕСТИРОВАНИЕ:
10✓ Включить LED через браузер
11✓ Изменить цвет на красный
12✓ Установить яркость 50%
13✓ Получить состояние в JSON
14
15ДОПОЛНИТЕЛЬНО:
16• Добавить эффекты (мигание, плавное изменение)
17• Режим "радуга"

🔴 ГРУППА “SENSOR READERS”:

 1ЗАДАЧА: Создать API для чтения данных с датчиков
 2
 3ENDPOINTS:
 4GET /api/sensors - список всех датчиков
 5GET /api/sensors/temperature - текущая температура
 6GET /api/sensors/humidity - текущая влажность  
 7GET /api/sensors/history - история за час
 8
 9ТЕСТИРОВАНИЕ:
10✓ Получить данные с датчиков
11✓ Симулировать изменение температуры
12✓ Проверить формат JSON ответа
13✓ Тест производительности (много запросов)
14
15ДОПОЛНИТЕЛЬНО:
16• Добавить alerts при превышении лимитов
17• Экспорт данных в CSV

🟢 ГРУППА “SMART HOME”:

 1ЗАДАЧА: Создать API для системы умного дома
 2
 3ENDPOINTS:
 4GET /api/rooms - список комнат
 5GET /api/rooms/bedroom - состояние спальни
 6PUT /api/rooms/bedroom/lights - управление светом
 7PUT /api/rooms/bedroom/temperature - термостат
 8
 9ТЕСТИРОВАНИЕ:
10✓ Включить свет в спальне
11✓ Установить температуру 22°C
12✓ Получить состояние всего дома
13✓ Режим "Уехал в отпуск"
14
15ДОПОЛНИТЕЛЬНО:  
16• Сценарии (утро, вечер, сон)
17• Безопасность (коды доступа)

🟡 ГРУППА “SECURITY SYSTEM”:

 1ЗАДАЧА: Создать API для системы безопасности
 2
 3ENDPOINTS:
 4GET /api/security/status - статус охраны
 5PUT /api/security/arm - включить охрану
 6PUT /api/security/disarm - выключить охрану
 7GET /api/security/events - журнал событий
 8
 9ТЕСТИРОВАНИЕ:
10✓ Включить охрану
11✓ Симулировать срабатывание датчика
12✓ Проверить журнал событий
13✓ Экстренное отключение
14
15ДОПОЛНИТЕЛЬНО:
16• Уведомления на email/SMS
17• Камеры наблюдения

Этап 3: Тестирование API (50-65 мин)

🆕 Мультиплатформенное тестирование:

 1🖥️ БРАУЗЕР (GET запросы):
 2http://localhost:3000/api/devices/led1
 3
 4📱 POSTMAN/INSOMNIA (все методы):
 5PUT http://localhost:3000/api/devices/led1
 6{
 7  "state": "on",
 8  "brightness": 75
 9}
10
11🧪 CURL (командная строка):
12curl -X PUT localhost:3000/api/devices/led1 \
13  -H "Content-Type: application/json" \
14  -d '{"state":"on"}'
15
16📲 МОБИЛЬНОЕ ПРИЛОЖЕНИЕ (симуляция):
17Создать простую HTML страницу с кнопками

Этап 4: Создание веб-интерфейса (65-70 мин)

🆕 Простой HTML + JavaScript клиент:

 1<!-- Псевдокод веб-интерфейса -->
 2<!DOCTYPE html>
 3<html>
 4<head>
 5    <title>IoT Control Panel</title>
 6</head>
 7<body>
 8    <h1>🏠 Smart Home Control</h1>
 9    
10    <!-- LED Control -->
11    <div class="device">
12        <h3>💡 Bedroom Light</h3>
13        <button onclick="toggleLED()">Toggle</button>
14        <input type="range" onchange="setBrightness(this.value)">
15        <div id="led-status">Status: Loading...</div>
16    </div>
17    
18    <!-- Sensor Data -->
19    <div class="device">
20        <h3>🌡️ Temperature Sensor</h3>
21        <div id="temperature">--°C</div>
22        <div id="humidity">--%</div>
23    </div>
24
25    <script>
26        // JavaScript для работы с API
27        async function toggleLED() {
28            const response = await fetch('/api/devices/led1', {
29                method: 'PUT',
30                headers: {'Content-Type': 'application/json'},
31                body: JSON.stringify({state: 'toggle'})
32            });
33            updateStatus();
34        }
35        
36        async function updateStatus() {
37            const response = await fetch('/api/devices/led1');
38            const data = await response.json();
39            document.getElementById('led-status').textContent = 
40                `Status: ${data.state}, Brightness: ${data.brightness}%`;
41        }
42    </script>
43</body>
44</html>

🎯 API SHOWCASE (70-83 мин): Демонстрация проектов

🆕 Формат: “IoT API Expo 2025”

  • Время на группу: 3 минуты демо + 30 секунд вопросы
  • Формат: Живая демонстрация работающего API

Структура презентации:

  1. “Наш IoT сервис решает проблему…” (30 сек)
  2. Демонстрация API endpoints (90 сек)
  3. Показ веб-интерфейса (30 сек)
  4. “Самая крутая фича…” (30 сек)

🆕 Критерии оценки от других групп:

  • 🚀 Простота использования - понятно ли неспециалисту?
  • 🔧 Техническое качество - правильные HTTP методы?
  • 💡 Креативность - есть ли неожиданные возможности?
  • 🏠 Практичность - можно ли использовать дома?

🔍 API DESIGN WORKSHOP (83-87 мин): Проектирование API

🆕 Быстрые дизайн-кейсы:

 1🎯 КЕЙС 1: "API для умной теплицы"
 2Устройства: 5 датчиков почвы, 3 клапана полива, 1 камера
 3Задача: Спроектировать RESTful endpoints
 4
 5🎯 КЕЙС 2: "API для умного офиса" 
 6Устройства: 20 рабочих мест, климат-контроль, система бронирования
 7Задача: Учесть права доступа разных пользователей
 8
 9🎯 КЕЙС 3: "API для городской парковки"
10Устройства: 200 датчиков мест, 10 информационных табло
11Задача: Обеспечить высокую производительность

Формат: Команды за 3 минуты создают список endpoints, другие оценивают

🔄 SPRINT RETRO (87-90 мин): Анализ и выводы

🆕 Технический анализ:

  1. Какой HTTP метод оказался самым полезным? Почему?
  2. Что сложнее - создать API или его протестировать?
  3. 🆕 Как масштабировать API на 1000 устройств?
  4. 🆕 Какие проблемы безопасности вы заметили?

🆕 Практические выводы:

  • Где в реальной жизни встречали подобные API?
  • Какой IoT сервис хотели бы создать дома?
  • Что было неожиданно в процессе разработки?

📝 Sprint Backlog (Домашнее задание)

🆕 Основное задание: “IoT API Architect”

Сценарий: Местная компания заказала IoT систему. Выберите один проект:

  1. Мониторинг школьного здания (температура в классах, освещение, безопасность)
  2. Умная остановка общественного транспорта (табло, камеры, датчики погоды)
  3. Система для спортзала (доступ, бронирование тренажеров, климат)
  4. Умная библиотека (система возврата книг, климат, безопасность)

Требования к решению:

 1📋 ТЕХНИЧЕСКОЕ ЗАДАНИЕ:
 2
 31. АНАЛИЗ ТРЕБОВАНИЙ:
 4   • Какие устройства нужны?
 5   • Какие данные собираем?
 6   • Кто будет пользователями API?
 7
 82. ДИЗАЙН API:
 9   • Список всех endpoints (минимум 8)
10   • HTTP методы для каждого
11   • Примеры JSON запросов/ответов
12   • Коды ошибок
13
143. БЕЗОПАСНОСТЬ:
15   • Кому можно что делать?
16   • Как защитить от несанкционированного доступа?
17   • Что делать при сбоях?
18
194. МАСШТАБИРОВАНИЕ:
20   • Сколько запросов в секунду?
21   • Как хранить данные?
22   • План развития на 5 лет
23
24ФОРМАТ ОТВЕТА: Документ с примерами кода (псевдокод)

🆕 Бонус-задания:

🔍 API Explorer: Найти в интернете 3 реальных IoT API (Philips Hue, Tesla, Nest, etc.). Сравнить их подходы к REST дизайну. Что можно улучшить?

💻 Code Practitioner:
Развернуть свой API на бесплатном хостинге (Heroku, Vercel, etc.). Поделиться ссылкой для тестирования одноклассниками.

🔒 Security Researcher: Исследовать вопросы безопасности IoT API. Какие уязвимости существуют? Как их избежать? Что такое rate limiting и CORS?


📊 Sprint Metrics (Система оценивания)

🆕 Критерии оценки практической работы:

Критерий Отлично (5) Хорошо (4) Удовлетворительно (3)
REST принципы Правильные HTTP методы + статус коды Основные методы корректны Базовое понимание GET/POST
JSON структура Консистентный, валидный JSON Корректный JSON, мелкие недочеты JSON с ошибками синтаксиса
API функциональность Все endpoints работают + error handling Основные endpoints работают Частично работающий API
Веб-интерфейс Полноценный UI + обработка ошибок Рабочий интерфейс Минимальный HTML
🆕 Безопасность Учитывает аутентификацию и валидацию Базовая валидация входных данных Не учитывает безопасность
🆕 Практичность Решает реальную IoT задачу Понятное применение Академический пример

🆕 Sprint Badges:

  • 🌐 REST Master - за правильное использование HTTP методов
  • 📡 API Designer - за продуманную архитектуру endpoints
  • 🔧 Integration Expert - за работающий веб-интерфейс
  • 🎯 Problem Solver - за решение реальной IoT задачи
  • 🔒 Security Aware - за учет вопросов безопасности
  • Performance Guru - за оптимизацию скорости работы
  • 💡 Innovation Award - за самое креативное применение

🎒 Sprint Resources

Необходимое ПО:

  • Редактор кода: VS Code (или онлайн IDE)
  • Среда выполнения: Node.js + npm (или онлайн платформа)
  • Тестирование API: Postman/Insomnia (или онлайн альтернатива)
  • Браузер с Developer Tools

🆕 Подготовленные шаблоны:

  • Базовый Express.js сервер с примерами
  • HTML шаблон для веб-интерфейса
  • Коллекция Postman для тестирования
  • Документация API в формате OpenAPI/Swagger

🆕 Резервные планы:

Если нет возможности программировать:

  • Использовать готовые API тренажеры (JSONPlaceholder, httpbin.org)
  • Фокус на дизайне API через документацию
  • Больше времени на анализ реальных IoT API

Если проблемы с сетью:

  • Локальная среда разработки без интернета
  • Готовые примеры API на USB флешках
  • Бумажные макеты интерфейсов

🔧 Sprint Facilitation Tips

🆕 Подготовка к спринту:

  • За неделю: Протестировать всю среду разработки на школьных компьютерах
  • За день: Подготовить готовые шаблоны кода для экономии времени
  • За час: Проверить работу всех инструментов и резервных вариантов

🆕 Поддержка во время практики:

  • Начинающие: Предложить готовые заготовки, фокус на понимании концепций
  • Продвинутые: Дополнительные вызовы (аутентификация, rate limiting, WebSockets)
  • Отстающие: Парное программирование, упрощенные задачи

🆕 Типичные проблемы и решения:

“API не отвечает” → Проверить порт, firewall, показать Developer Tools “JSON не парсится” → Валидатор JSON, примеры правильного формата
“Не понимаю REST” → Аналогии с обычными веб-сайтами, CRUD операции “Слишком сложно” → Упростить до одного endpoint, постепенно добавлять


🔗 Связь со следующими спринтами

Sprint #24 Preview: “📱 Мобильные интерфейсы и responsive design”

Мостик:

  • “Вы создали API. Теперь создадим красивые интерфейсы для любых экранов!”
  • Использование созданного API в мобильных приложениях
  • Адаптивный дизайн для управления IoT

Развитие концепций:

1Спринт #23 → Спринт #24 → Спринт #25
2REST API → Мобильный UI → MQTT интеграция
3HTTP/JSON → Responsive CSS → Broker protocols  
4Веб-сервер → Progressive Web App → Real-time data
5Безопасность → UX для IoT → Publisher/Subscriber

🚀 КЛЮЧЕВЫЕ ОСОБЕННОСТИ СПРИНТА:

  1. Практико-ориентированный - больше кода, меньше теории
  2. Реальные технологии - современный стек веб-разработки
  3. Масштабируемость - от простого к сложному
  4. Связь с реальностью - анализ существующих IoT API
  5. Безопасность с самого начала - не как дополнение
  6. Междисциплинарность - веб + железо + UX