Acasă/Ghiduri/Dezvoltatori
Dezvoltatori

Disponibilitatea bicicletelor în timp real: cum să o afișați într-o aplicație?

Afișați disponibilitatea bicicletelor cu API-ul ROOTE: marcaj temporal, actualitate, valori necunoscute, reîmprospătare și date expirate în aplicația dvs.

By ROOTE·7 minute de lectură
Disponibilitatea bicicletelor în timp real: cum să o afișați într-o aplicație?
O disponibilitate observată, împreună cu contextul său.

Esentialul în câteva secunde

Prezentați cantitatea disponibilă împreună cu starea sa de actualitate, marcajele temporale și condițiile de preluare a bicicletei. O valoare necunoscută rămâne necunoscută; o observație veche nu devine în timp real doar pentru că aplicația dvs. tocmai a primit-o.

Pentru a afișa disponibilitatea bicicletelor în timp real într-o aplicație, asociați numărul returnat cu starea sa de actualitate și cu posibilitățile de preluare a vehiculului. O observație descrie ceea ce sursa știa la un moment dat; aceasta nu garantează că o bicicletă va mai fi prezentă la sosire.

Contractul de mobilitate ROOTE diferențiază stațiile, vehiculele individuale și stările acestora. Interfața trebuie să reflecte aceste diferențe fără a confunda o valoare necunoscută, o stație goală și o sursă temporar indisponibilă.

Separarea unei stații de un vehicul individual

O stație poate oferi contoare pentru biciclete și locuri de returnare. Un vehicul individual are un statut de disponibilitate și alte informații eventuale. Evitați să numărați o stație ca pe o bicicletă sau să adunați contoare care reprezintă același stoc.

În DTO-ul de mobilitate ROOTE, availability.bikes și availability.docks pot fi necunoscute. Câmpurile legate de propulsie sau baterie trebuie afișate doar dacă există și sunt interpretate conform contractului.

Contract OpenAPI ROOTE

Citirea actualității și a marcajelor temporale

CâmpInterpretare
freshness.stateStare comunicată: fresh (proaspăt), stale (vechi), unknown (necunoscut) sau static
freshness.source_updated_atData ultimei actualizări a sursei, dacă este cunoscută
freshness.received_atData recepției indicată de contract
freshness.expires_atData de expirare indicată, dacă este cunoscută
availability.bikesCantitate cunoscută sau valoare necunoscută
pickup.enabled și pickup.stateInformații despre preluarea unei biciclete la stație

Ora apelului dvs. nu este automat aceeași cu cea a observației. Un rezultat primit la ora 10:00 poate conține o sursă actualizată la 9:45. Nu afișați „actualizat acum” doar pe baza orei de recepție din interfața dvs.

Pregătiți stări de afișare distincte

Date primiteAfișare recomandată
Cantitate cunoscută și date proaspeteCantitate observată și indicație temporală
Cantitate egală cu zeroNici o bicicletă observată, cu contextul temporal al acesteia
Cantitate nullDisponibilitate necunoscută
Stare stale (veche) sau dată de expirare depășităDate vechi; sugerați o actualizare
pickup.enabled=falsePreluare indisponibilă chiar dacă un contor este pozitiv
Eroare de interogareDisponibilitate temporar indisponibilă, fără a o transforma în zero

Nu clasificați o stare unknown (necunoscută) sau static (statică) ca fiind proaspătă. O informație despre stație poate fi stabilă, în timp ce contorul evoluează rapid. Păstrați și avertismentele și atribuțiile cerute de răspuns.

Un exemplu de normalizare înainte de redare

Funcția următoare produce o stare de prezentare pornind de la o stație deja validată conform schemei ROOTE. Nu este un validator complet de răspuns. Etichetele vizibile trebuie să provină din cheile de traducere ale interfeței dvs.

function availabilityView(station, now = Date.now()) {
  const freshness = station.freshness;
  const expiresAt = freshness.expires_at
    ? Date.parse(freshness.expires_at) : null;
  const expired = expiresAt !== null &&
    Number.isFinite(expiresAt) && expiresAt <= now;
  if (station.pickup.enabled === false ||
      station.pickup.state === 'unavailable_now') {
    return { state: 'pickup_unavailable', count: null };
  }
  if (expired || freshness.state === 'stale') {
    return { state: 'stale', count: null };
  }
  const count = station.availability.bikes;
  if (freshness.state !== 'fresh' || count === null ||
      !Number.isFinite(count) || count < 0) {
    return { state: 'unknown', count: null };
  }
  return {
    state: count === 0 ? 'empty' : 'observed', count,
    sourceUpdatedAt: freshness.source_updated_at,
    receivedAt: freshness.received_at,
    pickupState: station.pickup.state
  };
}

Chiar și cu o stare observed (observată), nu transformați pickupState=unknown (necunoscut) în preluare confirmată. Contorul rămâne o observație. Afișați contextul de preluare dacă produsul dvs. ajută utilizatorul să aleagă o stație.

Reîmprospătare fără a multiplica inutil apelurile

Adaptați reîmprospătarea la expirarea publicată, la condițiile serviciului și la comportamentul utilizatorului. Grupează cererile identice, evitați apelurile în fundal pe o pagină inactivă și anulați cele ale unei căutări înlocuite.

Un timp local de caching nu dovedește actualitatea sursei. După o eroare, puteți păstra o ultimă observație datată dacă interfața dvs. o prezintă explicit ca fiind veche. Nu eliminați această distincție la prima reluare reușită dacă sursa rămâne stale (veche).

Înțelegerea legăturii cu GBFS

GBFS descrie serviciile de mobilitate partajată și stările lor publicate. O integrare directă trebuie să interpreteze fișierele, versiunea și marcajele temporale ale fluxului. Cu un API normalizat, folosiți contractul API; nu adăugați un câmp GBFS presupus absent din răspuns.

Alegerea între GTFS, GTFS Realtime și GBFS

Testați situațiile care pot induce în eroare utilizatorul

Testați un zero real, o valoare necunoscută, o expirare depășită, o preluare dezactivată și o eroare după un rezultat valid. Verificați și fusurile orare pentru afișare. Un contor pozitiv nu trebuie să producă niciodată „bicicletă rezervată”, iar o indisponibilitate nu trebuie să genereze niciodată un zero inventat.

Gestionarea răspunsurilor goale și a erorilor

Aplicarea acestor reguli într-un asistent AI

Ghid al utilizatorului pentru găsirea unei biciclete

Pentru dezvoltatoriROOTE Mobility API

Mobilitatea în jurul unui punct.
Direct în aplicația ta.

  • Caută
    în jurul unei poziții
  • Accesează
    datele de mobilitate
  • Integrează în
    aplicația ta

De la hartă la date: caută mijloacele de mobilitate și serviciile din apropiere cu API-ul ROOTE.

Întrebări frecvente

O cantitate pozitivă garantează o bicicletă la sosirea mea?

Nu. Ea descrie o observație, care se poate modifica între căutare și sosirea dvs.

Se poate înlocui null cu zero?

Nu. null indică o valoare necunoscută; zero este o cantitate cunoscută și are alt sens.

Trebuie actualizat la fiecare câteva secunde?

Folosiți indicațiile de valabilitate, limitele serviciului și nevoile interfeței dvs. O frecvență arbitrară nu garantează o sursă mai proaspătă.

Ce-ar fi să te uiți în jurul tău?

Explorează cartierul cu ROOTE și identifică informațiile disponibile pentru a-ți pregăti deplasarea.

Explorează harta ROOTE ↗