🌐 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 мин): Демо “Магия веб-управления”
🆕 Интерактивная демонстрация:
- Учитель показывает: Заходит на веб-страницу с кнопкой
- Нажимает кнопку: Загорается светодиод на Raspberry Pi
- Меняет настройки: Через форму на сайте меняет яркость
- Показывает телефон: Та же страница, те же кнопки работают
- 🆕 Открывает “под капот”: Показывает 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
Структура презентации:
- “Наш IoT сервис решает проблему…” (30 сек)
- Демонстрация API endpoints (90 сек)
- Показ веб-интерфейса (30 сек)
- “Самая крутая фича…” (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 мин): Анализ и выводы
🆕 Технический анализ:
- Какой HTTP метод оказался самым полезным? Почему?
- Что сложнее - создать API или его протестировать?
- 🆕 Как масштабировать API на 1000 устройств?
- 🆕 Какие проблемы безопасности вы заметили?
🆕 Практические выводы:
- Где в реальной жизни встречали подобные API?
- Какой IoT сервис хотели бы создать дома?
- Что было неожиданно в процессе разработки?
📝 Sprint Backlog (Домашнее задание)
🆕 Основное задание: “IoT API Architect”
Сценарий: Местная компания заказала IoT систему. Выберите один проект:
- Мониторинг школьного здания (температура в классах, освещение, безопасность)
- Умная остановка общественного транспорта (табло, камеры, датчики погоды)
- Система для спортзала (доступ, бронирование тренажеров, климат)
- Умная библиотека (система возврата книг, климат, безопасность)
Требования к решению:
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
🚀 КЛЮЧЕВЫЕ ОСОБЕННОСТИ СПРИНТА:
- ✅ Практико-ориентированный - больше кода, меньше теории
- ✅ Реальные технологии - современный стек веб-разработки
- ✅ Масштабируемость - от простого к сложному
- ✅ Связь с реальностью - анализ существующих IoT API
- ✅ Безопасность с самого начала - не как дополнение
- ✅ Междисциплинарность - веб + железо + UX