http-api
:::info Это мини-спецификация HTTP API, который может использоваться браузерными клиентами для взаимодействия с устройствами Meshtastic. :::
Почему protobuf'ы
- Нет необходимости в парсинге JSON на ресурсоограниченном встроенном сервере.
- Компактные.
- Уже используются для всех остальных транспортов (общее покрытие тестами/инструментами).
- Обратная и прямая совместимость.
Заголовки запроса
Content-Type: application/x-protobuf- Указывает на содержимое protobuf (protobuf Meshtastic)
Заголовки ответа
Content-Type: application/x-protobuf- Указывает на содержимое protobuf (protobuf Meshtastic)
X-Protobuf-Schema: <URI to the .proto schema file>- Не обязательно, но рекомендуется для целей документации/рефлексии
Конечные точки
Указаны две конечные точки:
/api/v1/toradio
Поддерживает запросы PUT и OPTION.
PUT
Запрос PUT к этой конечной точке должен содержать серию полезных нагрузок ToRadio в формате protobuf.
Protobuf'ы передаются в бинарном виде в теле запроса.
Поддерживается только одно сообщение ToRadio на запрос.
OPTIONS
Запрос OPTIONS к этой конечной точке вернёт код статуса ответа 204 и только заголовки.
/api/v1/fromradio
Поддерживает запросы GET.
GET
Запрос GET к этой конечной точке вернёт серию protobuf'ов FromRadio.
Protobuf'ы передаются в бинарном виде в теле запроса.
Параметры
/api/v1/fromradio?all
all=false(не установлен по умолчанию)- Возвращается только один protobuf.
all=true- Возвращаются все доступные protobuf'ы.
/api/v1/fromradio?chunked
chunked=false(не установлен по умолчанию, пока не реализовано)- Запрос возвращает все protobuf'ы, которые могут быть доставлены для сессии клиента (это позволит клиенту опрашивать, выполняя серию запросов). Это единственный поддерживаемый вариант в начальном релизе.
chunked=true(пока не реализовано)- Если
chunked=true, ответ будет потоком чанков, который сервер будет держать открытым столько, сколько захочет клиент. Это позволит эффективно стримить новые protobuf'ыFromRadioпо мере их генерации радиоприёмником.
Аутентификация
Никакой аутентификации пользователей нет. Мы предполагаем, что доступ к HTTP-серверу достаточен для установления доверия.
Клиент
JavaScript
См.: https://github.com/meshtastic/meshtastic.js
Справочный клиент на JavaScript предоставит JavaScript API для использования этого транспорта. Этот клиент будет выполнять HTTP-соединения, использовать сгенерированный код protobuf на JavaScript и предоставит API, скрывающий всю эту REST-разводку. Два ключевых метода: sendToRadio(packet) и onFromRadio(callback).
Protoman
См.: https://github.com/spluxx/Protoman
Protoman способен работать с REST API Meshtastic из коробки. Это полезно для ручного тестирования конечных точек.
Безопасность
На ESP32 поддерживаются как HTTP, так и HTTPS с использованием самоподписанных сертификатов для HTTPS.
Связанные документы
- Интересная презентация по концепции: https://www.slideshare.net/mokeefe/javaone-2009-ts5276-restful-protocol-buffers