gRPC
Per client tipizzati, streaming e sincronizzazione ad alto volume, comunica con Openbeehive tramite gRPC. Il server è realizzato con Connect-RPC, quindi un singolo endpoint parla tre protocolli di trasporto compatibili:
- gRPC (HTTP/2) — il protocollo classico, per client gRPC in qualsiasi linguaggio.
- gRPC-Web — per browser e client gRPC-Web.
- Connect — il protocollo proprio di Connect (unario su HTTP/1.1 o HTTP/2).
Il server esegue HTTP/2 in chiaro (h2c) oltre a TLS, quindi gRPC funziona con o senza HTTPS davanti.
Il contratto è la fonte di verità
L'API è definita in Protocol Buffers sotto
proto/openbeehive/v1.
Genera un client per il tuo linguaggio a partire da quel contratto con
buf:
# fetch the proto contract, then generate (example: Go + TypeScript)
buf generate
Il file buf.gen.yaml del repository collega già gli stub per Go
(protoc-gen-connect-go) e TypeScript (protoc-gen-connect-es); punta il tuo
buf.gen.yaml ai plugin per il tuo linguaggio.
Esempio: una chiamata unaria (Go)
client := openbeehivev1connect.NewApiaryServiceClient(
http.DefaultClient, "https://app.openbeehive.org",
)
res, err := client.ListApiaries(ctx, connect.NewRequest(&apiaryv1.ListApiariesRequest{}))
Esempio: chiamata rapida dalla shell
Puoi raggiungere gli endpoint gRPC senza scrivere codice usando
buf curl o grpcurl:
buf curl --schema . \
--data '{"hiveId":"h-7","tempHive":34.6,"humidityHive":55}' \
https://app.openbeehive.org/openbeehive.v1.InspectionService/CreateInspection
Streaming: aggiornamenti in tempo reale
SyncService.Subscribe è un metodo server-streaming: aprilo una volta e il
server invia un evento leggero ogni volta che qualcosa cambia in un ambito che
puoi leggere. È la base degli aggiornamenti multi-dispositivo quasi in tempo
reale.
rpc Subscribe(SubscribeRequest) returns (stream SubscribeEvent);
La correttezza non dipende mai dallo stream — è un "sollecito" per estrarre i
dati prima. Consulta il protocollo di sincronizzazione
per i dettagli su Pull / Push.
Autenticazione
Invia la sessione come metadati della richiesta (header)
Authorization: Bearer <token>, esattamente come per
HTTP/JSON. Le istanze self-hosted a utente singolo non ne
hanno bisogno.
Quando scegliere gRPC invece di HTTP/JSON
- Vuoi un client tipizzato e generato e la sicurezza in fase di compilazione.
- Hai bisogno di streaming (
Subscribe). - Stai spostando molti dati (sincronizzazione, importazione in blocco) e vuoi un framing efficiente.
Per script occasionali, sensori e webhook, HTTP + JSON è di solito più semplice — ed è la stessa API.