SDK и контракт OpenAPI
Вы можете обращаться к Public API по стандартному протоколу HTTP; библиотеки на этой странице берут на себя рутинную работу — управление токенами, повторные попытки запросов и пагинацию.
Машиночитаемый контракт
Спецификация OpenAPI 3.0 всегда генерируется напрямую из работающего кода. Ручных копий не ведется.
Для генераторов кода и плагинов редакторов.
YAMLschema.yamlУдобен для чтения и контроля версий в репозитории.
Swagger UIИнтерактивный интерфейсИсследуйте все операции непосредственно из схемы.
Чтобы сгенерировать клиент для языка, который мы не поддерживаем официально, передайте схему в
openapi-generator:
npx @openapitools/openapi-generator-cli generate \
-i https://api.frigolive.com/api/public/schema.json \
-g go \
-o ./frigolive-goГотовые коллекции
- Коллекция Postman / Insomnia — 13 групп, 66 запросов, преднастроенные переменные.
- llms.txt — машиночитаемый индекс для корректной работы AI-ассистентов разработки.
Схема генерируется из кода, обслуживающего API, поэтому документация, спецификация схемы и реальное поведение сервиса гарантированно согласованы.
Официальные клиенты
| Язык | Пакет | Установка |
|---|---|---|
| Python 3.9+ | frigolive | pip install frigolive |
| Node.js 18+ | @frigolive/api-client | npm install @frigolive/api-client |
| .NET 8 | Frigolive.Api | dotnet add package Frigolive.Api |
Все три клиента работают единообразно:
Токен доступа запрашивается, кэшируется в оперативной памяти и обновляется за 60 секунд до истечения срока действия. Параллельные запросы используют один и тот же вызов обновления токена.
Ответы 429 и 5xx повторяются с экспоненциальной задержкой и джиттером с учетом заголовка Retry-After. Запросы POST без ключа идемпотентности никогда не повторяются автоматически.
Заголовок Idempotency-Key автоматически добавляется к запросам POST, благодаря чему повторный запрос после сетевого сбоя не создаст дубликат записи.
HTTP-статусы преобразуются в строго типизированные исключения с сохранением request_id. Передавайте это значение при обращениях в службу поддержки.
Python
import os
from frigolive import FrigoliveClient, NotFoundError
client = FrigoliveClient(
client_id=os.environ["FRIGOLIVE_CLIENT_ID"],
client_secret=os.environ["FRIGOLIVE_CLIENT_SECRET"],
scope="devices:read telemetry:read",
)
client.account_id = client.accounts()[0]["id"]
for device in client.iterate("/devices/"):
print(device["display_serial"], device["battery_level"])Node.js
import { FrigoliveClient } from "@frigolive/api-client";
const client = new FrigoliveClient({
clientId: process.env.FRIGOLIVE_CLIENT_ID!,
clientSecret: process.env.FRIGOLIVE_CLIENT_SECRET!,
scope: "devices:read telemetry:read",
});
for await (const device of client.iterate("/devices/")) {
console.log(device);
}.NET
await using var client = new FrigoliveClient(new FrigoliveClientOptions
{
ClientId = Environment.GetEnvironmentVariable("FRIGOLIVE_CLIENT_ID")!,
ClientSecret = Environment.GetEnvironmentVariable("FRIGOLIVE_CLIENT_SECRET")!,
Scope = "devices:read telemetry:read",
});
await foreach (var device in client.IterateAsync("/devices/"))
{
Console.WriteLine(device.GetProperty("label").GetString());
}Ни один из этих клиентов не предназначен для работы в браузере или распределенном мобильном приложении. Ваш интерфейс взаимодействует с вашим бэкендом, а бэкенд вызывает Frigolive server-to-server.
Пагинация
Каждый клиент содержит вспомогательную функцию для обхода списков. Следующая страница
считывается из links.next, поэтому вам не нужно вручную увеличивать номер страницы.
Если вы не используете готовый SDK, следуйте тому же правилу: Ошибки и отказоустойчивость.