Skip to Content
DokümantasyonSDK'lar ve OpenAPI

SDK’lar ve OpenAPI Sözleşmesi

Public API’yi doğrudan HTTP ile de kullanabilirsiniz; bu sayfadaki istemciler token yönetimi, tekrar deneme ve sayfalama gibi tekrar eden işleri üstlenir.

Makine-okunur sözleşme

API’nin OpenAPI 3.0 tanımı her zaman canlı koddan üretilir; elle güncellenen bir kopya yoktur.

Kendi diliniz için istemci üretmek isterseniz şemayı openapi-generator’a verebilirsiniz:

npx @openapitools/openapi-generator-cli generate \ -i https://api.frigolive.nl/api/public/schema.json \ -g go \ -o ./frigolive-go

Hazır koleksiyonlar

Sözleşme kaynağı tektir

Şema, API’yi çalıştıran kodun kendisinden üretilir. Bu sayfadaki referans, şema ve gerçek davranış birbirinden ayrışamaz.

Resmî istemciler

DilPaketKurulum
Python 3.9+frigolivepip install frigolive
Node.js 18+@frigolive/api-clientnpm install @frigolive/api-client
.NET 8Frigolive.Apidotnet add package Frigolive.Api

Üçü de aynı davranışı uygular:

Token yönetimi otomatiktir

Access token alınır, bellekte tutulur ve süresi dolmadan 60 saniye önce yenilenir. Eşzamanlı istekler tek bir token çağrısını paylaşır.

Tekrar denemeler güvenlidir

429 ve 5xx yanıtlarında üstel bekleme ve rastgele sapma ile tekrar denenir; Retry-After başlığına uyulur. Anahtarsız POST istekleri asla tekrar denenmez.

Idempotency yerleşiktir

POST isteklerine otomatik Idempotency-Key eklenir; ağ hatası sonrası tekrar denemede ikinci kayıt oluşmaz.

Hatalar tiplidir

HTTP durumu istisna tipine eşlenir ve request_id korunur. Destek talebinde bu değeri iletin.

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()); }
Secret sunucuda kalır

Bu istemcilerin hiçbiri tarayıcıda veya dağıtılmış bir mobil uygulamada çalıştırılmak üzere tasarlanmamıştır. Arayüzünüz kendi backend’inize konuşur; backend Frigolive’a sunucudan sunucuya gider.

Sayfalama

Üç istemcide de liste uçları için bir dolaşma yardımcısı vardır. Sonraki sayfa links.next üzerinden okunur; sayfa numarasını elle artırmanız gerekmez.

İstemci kullanmıyorsanız aynı kuralı kendiniz uygulayın: Hatalar ve Dayanıklılık.