Hem/Guider/Utvecklare
Utvecklare

Tillgång till cyklar i realtid: hur man visar det i en app?

Visa cyklars tillgänglighet med ROOTE API: tidsstämplar, aktuell status, okända värden, uppdateringar och utgångna data i din app.

By ROOTE·7 min läsning
Tillgång till cyklar i realtid: hur man visar det i en app?
En observerad tillgänglighet med dess sammanhang.

Det viktigaste på några sekunder

Visa tillgänglig mängd med dess aktualitet, tidsstämplar och villkor för att ta cykeln. Ett okänt värde förblir okänt; en gammal observation blir inte realtidsdata bara för att din app precis tagit emot den.

För att visa cyklars tillgänglighet i realtid i en app, koppla det angivna antalet till dess aktualitet och möjligheten att ta fordonet. En observation beskriver vad källan visste vid ett givet ögonblick; den garanterar inte att en cykel fortfarande finns när du anländer.

Mobilitetsavtalet ROOTE skiljer på stationer, enskilda fordon och deras status. Gränssnittet måste översätta dessa skillnader utan att blanda ihop ett okänt värde, en tom station och en temporärt otillgänglig källa.

Särskilj en station från ett enskilt fordon

En station kan visa räknare för cyklar och återlämningsplatser. Ett enskilt fordon har en tillgänglighetsstatus och eventuell annan information. Undvik att räkna en station som en cykel eller att summera räknare som representerar samma lager.

I ROOTE:s DTO för mobilitet kan availability.bikes och availability.docks vara okända. Fälten för drivning eller batteri ska bara visas om de finns och tolkas enligt avtalet.

ROOTE OpenAPI-avtal

Läs aktualitet och tidsstämplar

FältTolkning
freshness.stateAngett tillstånd: fresh, stale, unknown eller static
freshness.source_updated_atDatum för uppdatering från källan, om känt
freshness.received_atMottagningsdatum enligt avtalet
freshness.expires_atAngiven giltighetstid, om känd
availability.bikesKänt antal eller okänt värde
pickup.enabled och pickup.stateInformation om att ta en cykel vid stationen

Tidpunkten för din förfrågan är inte automatiskt tidpunkten för observationen. Ett resultat mottaget kl. 10 kan innehålla en källa uppdaterad kl. 9:45. Visa inte "uppdaterad nu" baserat enbart på mottagningstiden för ditt gränssnitt.

Förutse olika visningslägen

Mottagen dataFörväntad visning
Känt antal och färsk dataObserverad mängd med tidsangivelse
Mängd lika med nollIngen cykel observerad, med tidskontext
Mängd nullTillgänglighet okänd
Tillstånd stale eller passerat giltighetsdatumGammal data; föreslå uppdatering
pickup.enabled=falseUpptagning otillgänglig även om räknaren är positiv
SökfelTillgänglighet tillfälligt otillgänglig, räkna inte om till noll

Klassificera inte ett tillstånd som unknown eller static som färskt. Stationens information kan vara stabil medan räknaren ändras snabbt. Behåll även varningar och attribut som krävs av svaret.

Ett exempel på normalisering före visning

Följande funktion skapar ett visningstillstånd utifrån en station redan validerad mot ROOTE-schema. Den är inte en fullständig validerare av svar. Synliga etiketter bör komma från dina gränssnittets översättningsnycklar.

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

Även med ett observed-tillstånd, omvandla inte pickupState=unknown till bekräftad upptagning. Räknaren är fortfarande en observation. Visa upptagningskontexten om din produkt hjälper användaren att välja station.

Uppdatera utan onödiga flera anrop

Anpassa uppdateringen efter angiven utgångstid, servicens villkor och användarens beteende. Gruppera identiska förfrågningar, undvik bakgrundsanrop på inaktiva sidor och avbryt ersatta sökningar.

En lokal cachefördröjning bevisar inte källans aktualitet. Efter ett fel kan du behålla en senaste observation med datum om ditt gränssnitt uttryckligen visar den som gammal. Ta inte bort denna distinktion vid första lyckade återhämtning om källan är stale.

Förstå kopplingen till GBFS

GBFS beskriver delade mobilitetstjänster och deras publicerade status. Direkt integration måste tolka filer, version och flödestidsstämplar. Med ett standardiserat API, använd API-avtalet; lägg inte till ett antaget saknat GBFS-fält i dess svar.

Välja mellan GTFS, GTFS Realtime och GBFS

Testa situationer som kan vilseleda läsaren

Testa verkligt nollvärde, okänt värde, utgången giltighet, inaktiverad upptagning och fel efter giltigt resultat. Kontrollera också visningens tidszoner. En positiv räknare bör aldrig visa "cykel reserverad" och otillgänglighet bör aldrig visa påhittad noll.

Hantera tomma svar och fel

Tillämpa dessa regler i en AI-assistent

Användarguide för att hitta en cykel

För utvecklareROOTE Mobility API

Mobilitet kring en punkt.
Direkt i din applikation.

  • Sök
    runt en position
  • Få tillgång till
    mobilitetsdata
  • Integrera i
    din applikation

Gå från karta till data: sök mobila tjänster och närliggande tjänster med ROOTE API.

Vanliga frågor

Garanterar ett positivt antal en cykel vid mitt ankomst?

Nej. Det beskriver en observation som kan ändras mellan sökningen och din ankomst.

Kan man ersätta null med noll?

Nej. Null anger ett okänt värde; noll är ett känt antal och har annan betydelse.

Behöver man uppdatera varannan sekund?

Använd giltighetsangivelser, servicens begränsningar och ditt gränssnitts behov. En godtycklig frekvens garanterar inte färskare källa.

Och om du tittade runt dig?

Utforska ditt område med ROOTE och hitta tillgänglig information för att planera din resa.

Utforska ROOTE-kartan ↗