Domů/Průvodci/Vývojáři
Vývojáři

Dostupnost kol v reálném čase: jak ji zobrazit v aplikaci?

Zobrazte dostupnost kol s API ROOTE: označení času, čerstvost, neznámé hodnoty, aktualizace a prošlá data ve vaší aplikaci.

By ROOTE·7 minut čtení
Dostupnost kol v reálném čase: jak ji zobrazit v aplikaci?
Pozorovaná dostupnost s jejím kontextem.

Podstatné během pár sekund

Zobraďte dostupné množství spolu s jeho čerstvostí, časovými značkami a podmínkami vyzvednutí kola. Neznámá hodnota zůstává neznámá; starší pozorování se nestává reálným časem jen proto, že je právě vaše aplikace přijala.

Pro zobrazení dostupnosti kol v reálném čase v aplikaci spojte počet vrácený s jeho čerstvostí a možnostmi vyzvednutí vozidla. Pozorování popisuje, co zdroj věděl v daný okamžik; nezaručuje, že kolo bude stále k dispozici při vašem příchodu.

Mobilitní kontrakt ROOTE odlišuje stanice, jednotlivá vozidla a jejich stavy. Rozhraní musí tyto rozdíly rozlišovat, aniž by zaměňovalo neznámou hodnotu, prázdnou stanici a dočasně nedostupný zdroj.

Oddělení stanice od jednotlivého vozidla

Stanice může zobrazovat počty kol a volných míst pro vrácení. Jednotlivé vozidlo má stav dostupnosti a případné další informace. Vyhněte se počítání stanice jako kola nebo sčítání počtů představujících stejný sklad.

V DTO mobility ROOTE mohou být availability.bikes a availability.docks neznámé. Pole pohonu nebo baterie by se měla zobrazovat jen pokud existují a jsou interpretovány dle kontraktu.

OpenAPI kontrakt ROOTE

Čtení čerstvosti a časových značek

PoleInterpretace
freshness.stateOznámený stav: fresh, stale, unknown nebo static
freshness.source_updated_atDatum aktualizace zdroje, pokud je známo
freshness.received_atDatum přijetí dle kontraktu
freshness.expires_atUvedená platnost do, pokud je známa
availability.bikesZnámé množství nebo neznámá hodnota
pickup.enabled a pickup.stateInformace o možnosti odebrání kola na stanici

Čas vašeho dotazu není automaticky časem pozorování. Výsledek přijatý v 10 hodin může obsahovat zdroj aktualizovaný v 9:45. Nezobrazujte „aktualizováno právě teď“ pouze na základě času přijmutí vaší aplikací.

Naplánujte různé stavy zobrazení

Přijatý údajNavrhované zobrazení
Známé množství a čerstvá dataPozorované množství s časovou indikací
Množství rovné nuleŽádné pozorované kolo s časovým kontextem
Množství nullNeznámá dostupnost
Stav stale nebo překročená platnostStarý údaj; navrhněte aktualizaci
pickup.enabled=falseOdebírání není dostupné i když je kladný počet
Chyba vyhledáváníDostupnost dočasně nedostupná, neprepísat na nulu

Nezařazujte stav unknown nebo static jako čerstvý. Informace o stanici může být stabilní, zatímco počítadlo se rychle mění. Zachovejte také varování a přidělení požadovaná odpovědí.

Příklad normalizace před renderingem

Následující funkce generuje prezentační stav ze stanice již validované podle schématu ROOTE. Není kompletním validátorem odpovědí. Viditelné popisky musí pocházet z klíčů překladů vašeho rozhraní.

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
  };
}

I při stavu observed nepřevádějte pickupState=unknown na potvrzené vyzvednutí. Počítadlo je stále pozorování. Kontext vyzvednutí zobrazte jen pokud váš produkt pomáhá uživateli vybrat stanici.

Aktualizujte bez zbytečného množení požadavků

Přizpůsobte aktualizaci vydané expiraci, podmínkám služby a chování uživatele. Sloučte identické požadavky, vyhněte se voláním na pozadí na neaktivní stránce a zrušte požadavky nahrazené novým vyhledáváním.

Místní cache nejde považovat za důkaz čerstvosti zdroje. Po chybě můžete zachovat poslední datované pozorování, pokud vaše rozhraní jasně ukazuje jeho starý stav. Neodstraňujte toto rozlišení při první úspěšné aktualizaci, pokud je zdroj stale.

Porozumět vazbě na GBFS

GBFS popisuje sdílené mobility služby a jejich publikované stavy. Přímá integrace by měla interpretovat soubory, verzi a časové značky toku. S normalizovaným API použijte kontrakt API; nepřidávejte pole GBFS předpokládané mimo jeho odpověď.

Volba mezi GTFS, GTFS Realtime a GBFS

Testování situací klamajících čtenáře

Otestujte skutečnou nulu, neznámou hodnotu, překročenou expiraci, deaktivované vyzvednutí a chybu po platném výsledku. Ověřte také časová pásma zobrazení. Kladné počítadlo nesmí nikdy znamenat „rezervované kolo“ a nedostupnost nesmí nikdy znamenat vymyšlenou nulu.

Řízení prázdných odpovědí a chyb

Aplikace těchto pravidel v AI asistentovi

Uživatelský průvodce pro nalezení kola

Pro vývojářeROOTE Mobility API

Mobilita kolem jednoho místa.
Přímo ve vaší aplikaci.

  • Hledat
    v okolí pozice
  • Přístup k
    datům o mobilitě
  • Integrace do
    vaší aplikace

Přejděte z mapy k datům: vyhledejte dopravu a služby poblíž pomocí ROOTE API.

Často kladené otázky

Zajišťuje kladné množství kolo při mém příchodu?

Ne. Popisuje pozorování, které se může změnit mezi vyhledáním a vaším příjezdem.

Lze nahradit null nulou?

Ne. null značí neznámou hodnotu; nula je známé množství s jiným významem.

Je nutné aktualizovat každých pár sekund?

Použijte informace o platnosti, omezení služby a potřeby rozhraní. Náhodná frekvence nezaručuje čerstvější zdroj.

Co kdybyste nakoukli kolem sebe?

Prozkoumejte svoji čtvrť s ROOTE a zjistěte dostupné informace pro lepší přípravu cesty.

Prozkoumat mapu ROOTE ↗