Практика · 75 мин

Практика: разработчик

Восемь заданий с запросами к API: описание OpenAPI, запуск расчёта и ожидание задачи, результаты в GeoJSON, OGC API Features и Processes, подпись вебхука, MCP и API v2. Числа получены на учебном стенде — копии базы Алматы 09.11.2026 (http://127.0.0.1:8090, вход выключен), фрагмент 74 «Маг. сети для расчета НС», расчёт №68. На вашем стенде номера и часть чисел будут свои; на сервере со входом добавьте заголовок Authorization: Bearer <токен>.

Практика: разработчик

Кратко. Восемь заданий с запросами к API: описание OpenAPI, запуск расчёта и ожидание задачи, результаты в GeoJSON, OGC API Features и Processes, подпись вебхука, MCP и API v2. Числа получены на учебном стенде — копии базы Алматы 09.11.2026 (http://127.0.0.1:8090, вход выключен), фрагмент 74 «Маг. сети для расчета НС», расчёт №68. На вашем стенде номера и часть чисел будут свои; на сервере со входом добавьте заголовок Authorization: Bearer <токен>.

Задания

1. Что в OpenAPI

Скачайте /openapi.json и посчитайте версию спецификации, число адресов и операций, схем, адресов /api/v1/…, /api/v2… и /api/ogc… (API v1 и OpenAPI, урок 31).

Ответ

OpenAPI 3.1.0: 510 адресов, 573 операции, 178 схем. С префиксом /api/v1/ — 299 адресов, /api/v2 — 9, /api/ogc — 11. Больше всего операций с тегами topology (52), analysis (30) и calculations (28). Многие адреса продублированы прежними путями без /v1 (/api/calculations/…, /piezometer/…), поэтому адресов больше, чем функций. Внешнему клиенту генерируйте код по /api/v2/openapi.json, а не по общему описанию. Стенд, 09.11.2026.

2. Запуск расчёта и ожидание

Запустите плановый расчёт фрагмента 74 по температурному графику с потерями при −25 °C через POST /api/v1/calculations/run и дождитесь конца через GET /api/v1/task/{task_id} (Расчёт режима, раздел «Для разработчика»). Какое тело запроса, что приходит в ответ и в итоге задачи?

Ответ

Тело: {"mode":"plan","fragment_ids":[74],"tn":-25,"tg":true,"teplopoter":true,"name":"…"} (схема SetyRunRequest, fragment_ids — до 50). Ответ сразу: task_id, request_id и строка ключей движка -Tn -25 -sopr 0 -roP 0.975 -roO 0.975 -iter 20 -tp_metod 0 -trtp 0 -tg -user_gid dev. Задача идёт стадиями PROGRESS («Расчет подсети 1 из 1», «Запись результатов») и кончается SUCCESS с protocol_id 40 и HTML протокола. Номер расчёта — из GET /api/v1/calculations?file_id=74: 68. Шёл 23 с; опрашивайте не чаще раза в 5 с. Стенд, 09.11.2026; у вас будут свои номера.

3. Протокол как данные

Получите протокол GET /api/v1/calculations/protocols/{id} и найдите число ошибок и предупреждений по категориям (Протокол расчёта).

Ответ

Протокол 40 (расчёт 68): errors: 2, warnings: 7, duration_s: 23.07. summary.by_category: fixed_head — 1 ошибка (два узла заданного напора в подсети), rs — 1 ошибка (код источника в расчётных схемах), regulator — 6 предупреждений, subnetwork — 1 (подсети без узла ЗН). У каждой записи entries есть code и fix — по ним веб строит кнопки «Исправить». Стенд, 09.11.2026.

4. Результаты в GeoJSON

Получите GET /api/calculations/{id}/results/geojson и прочитайте summary. Найдите участок 325610 (мтк9-6 — МТК-9-9) и проверьте его скорость по формуле v = 353,86·G/d² (Шпаргалка формул).

Ответ

Расчёт 68: lines_count 1686, nodes_count 1643, high_velocity_count 174, over_resistance_count 62. Участок 325610: diameter_mm 796, flow 2767,89, velocity 1,55, velocity_status high, spec_loss_mm_m 2,93, pressure_drop 1,492. 353,86·2767,89/796² = 1,546 — совпадает. Ответ около 1,8 МБ: для карты берите его, для таблиц — отчёты Excel. Стенд, 09.11.2026.

5. OGC API Features

Посмотрите /api/ogc/conformance и /api/ogc/collections, затем выгрузите участки фрагмента 74: /api/ogc/collections/pipes/items?fileid=74&limit=10000 (OGC API, урок 32). Сколько классов соответствия, коллекций и участков? Как узнать общее число объектов?

Ответ

Классов соответствия 9: Features core, geojson, oas30, запись (create-replace-delete, update, optimistic-locking-etags) и Processes core, ogc-process-description, json. Коллекций 5: pipes, nodes, consumers, heat_sources, valves. Участков фрагмента 74 — numberReturned: 3625. numberMatched сервер не отдаёт: выбирайте с limit до 10 000 и идите по ссылке next, пока она есть. Участок 325610 в коллекции — diameter_internal_mm 796, length_m 396,5, узлы 536000 и 536053. Стенд, 09.11.2026.

6. OGC API Processes

Получите /api/ogc/processes и выполните network-statistics с входами {"query":"length","fragment_ids":[74]}. Сколько процессов и какой из них асинхронный?

Ответ

Процессов 9: восемь синхронных (network-trace, valve-isolation, network-select, network-statistics, regime-analysis, thematic-summary, wear-priorities, data-quality) и один асинхронный — heat-hydraulic, настоящий расчёт: 201 и Location на /jobs/{id}. Длина сети фрагмента 74: подача 197 263,2 м, обратка 197 576,4 м, всего 394 839,6 м. Стенд, 09.11.2026.

7. Подпись вебхука

Сколько типов событий отдаёт GET /api/v1/webhooks/event-types? Посчитайте подпись запроса: секрет подписки — whsec_ и base64 от байтов строки practice-secret-0123456789abcdef, webhook-id = evt_test1, webhook-timestamp = 1794200000, тело {"type":"outage.created","data":{"id":1}} (Вебхуки).

Ответ

Типов событий 11: дефект, 2 наряда, 2 отключения, 3 телеметрии (sensor.*) и 3 баланса (balance.*). Ключ HMAC — байты после декодирования base64 из секрета, то есть сама строка practice-secret-0123456789abcdef. Подписываемое: evt_test1.1794200000.{"type":"outage.created","data":{"id":1}}; HMAC-SHA256 в base64 даёт webhook-signature: v1,7roeO57ffuwOYxXh5w8IV6pcBCzmU4+f1caB6BmkgU0=. Проверяйте байты тела как пришли, время — в пределах 5 минут, сравнение — постоянного времени. Тип событий — стенд 09.11.2026; подпись от стенда не зависит.

8. MCP и API v2

Получите /api/v1/mcp/info и /api/v2. Сколько инструментов у MCP, какие пишут в базу и какие ограничения частоты? Сколько адресов у API v2 и сколько живёт ключ? См. MCP, API v2.

Ответ

MCP: 19 инструментов, путь /mcp, токен на 30 дней. Пишет только run_calculation (право «Запуск расчётов», 5 запусков за 10 минут); всего — 60 вызовов в минуту на пользователя. API v2: 9 адресов (корень, дефекты, события, отключения, наряды с созданием заявки, приём показаний телеметрии), корень /api/v2 перечисляет те же 11 типов событий и ссылку на /api/v2/openapi.json. Ключ живёт API_TOKEN_DAYS = 365 дней по умолчанию (не больше 730), отозвать его можно только сменой пароля или блокировкой владельца. Стенд, 09.11.2026.

Разобрали задания?Ответы — под «Ответ» у каждого задания. Отметка хранится только в вашем браузере.