Strona główna/Poradniki/Programiści
Programiści

Dostępność rowerów na żywo: jak ją wyświetlić w aplikacji?

Wyświetlaj dostępność rowerów z API ROOTE: znaczniki czasu, świeżość, wartości nieznane, odświeżanie i przeterminowane dane w Twojej aplikacji.

By ROOTE·7 minut czytania
Dostępność rowerów na żywo: jak ją wyświetlić w aplikacji?
Zaobserwowana dostępność wraz z jej kontekstem.

Najważniejsze w kilku sekund

Prezentuj dostępną ilość wraz z jej stanem świeżości, znacznikami czasu i warunkami odbioru roweru. Wartość nieznana pozostaje nieznana; stara obserwacja nie staje się danymi na żywo, tylko dlatego, że Twoja aplikacja ją otrzymała.

Aby wyświetlić dostępność rowerów na żywo w aplikacji, połącz zwróconą liczbę z jej świeżością i możliwościami odbioru pojazdu. Obserwacja opisuje, co źródło wiedziało w danym momencie; nie gwarantuje, że rower będzie dostępny w chwili przybycia.

Kontrakt mobilności ROOTE rozróżnia stacje, pojedyncze pojazdy i ich stany. Interfejs musi odzwierciedlać te różnice, nie myląc wartości nieznanej, pustej stacji i tymczasowo niedostępnego źródła.

Oddzielenie stacji od pojedynczego pojazdu

Stacja może udostępniać liczniki rowerów i miejsc do zwrotu. Pojedynczy pojazd ma stan dostępności oraz inne możliwe informacje. Unikaj liczenia stacji jako roweru lub sumowania liczników reprezentujących ten sam zasób.

W DTO mobilności ROOTE, availability.bikes oraz availability.docks mogą być nieznane. Pola dotyczące napędu lub baterii powinny być wyświetlane tylko, gdy istnieją i są interpretowane zgodnie z kontraktem.

Kontrakt OpenAPI ROOTE

Odczyt świeżości i znaczników czasu

PoleInterpretacja
freshness.stateDeklarowany stan: fresh, stale, unknown lub static
freshness.source_updated_atData aktualizacji źródła, jeśli znana
freshness.received_atData odbioru podana w kontrakcie
freshness.expires_atData wygaśnięcia ważności, jeśli znana
availability.bikesZnana ilość lub wartość nieznana
pickup.enabled i pickup.stateInformacje o możliwym odbiorze roweru na stacji

Czas wywołania nie jest automatycznie czasem obserwacji. Wynik otrzymany o godz. 10 może zawierać źródło zaktualizowane o 9:45. Nie wyświetlaj "zaktualizowano teraz" tylko na podstawie czasu odbioru interfejsu.

Przewiduj różne stany wyświetlania

Odebrane danePrzewidziany sposób wyświetlania
Znana ilość i świeże daneZaobserwowana ilość i informacja czasowa
Ilość równa zeroBrak obserwowanych rowerów wraz z kontekstem czasowym
Ilość nullDostępność nieznana
Stan stale lub przekroczony termin ważnościDane przeterminowane; zalecane odświeżenie
pickup.enabled=falseOdbiór niedostępny, nawet jeśli licznik jest dodatni
Błąd wyszukiwaniaDostępność chwilowo niedostępna, bez zamiany na zero

Nie klasyfikuj stanu unknown lub static jako świeży. Informacja o stacji może być stabilna, gdy licznik zmienia się szybko. Zachowaj także ostrzeżenia i atrybucje wymienione w odpowiedzi.

Przykład normalizacji przed renderowaniem

Następująca funkcja generuje stan wyświetlenia na podstawie stacji już zweryfikowanej względem schematu ROOTE. Nie jest to pełny walidator odpowiedzi. Widoczne etykiety powinny pochodzić z kluczy tłumaczeń Twojego interfejsu.

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

Nawet ze stanem observed, nie zamieniaj pickupState=unknown na potwierdzony odbiór. Licznik pozostaje obserwacją. Wyświetl kontekst odbioru, jeśli Twój produkt pomaga użytkownikowi wybrać stację.

Odświeżanie bez niepotrzebnego mnożenia wywołań

Dostosuj odświeżanie do opublikowanego wygaśnięcia, warunków usługi i zachowań użytkownika. Grupuj identyczne zapytania, unikaj wywołań w tle na nieaktywnych stronach i anuluj te, które zostały zastąpione.

Lokalny timeout cache nie gwarantuje świeżości źródła. Po błędzie możesz zachować ostatnią datowaną obserwację, jeśli Twój interfejs wyraźnie pokazuje ją jako starą. Nie usuwaj tej różnicy przy pierwszym udanym ponownym połączeniu, jeśli źródło pozostaje stale.

Zrozumienie powiązania z GBFS

GBFS opisuje usługi współdzielonej mobilności i ich publikowane stany. Integracja bezpośrednia wymaga interpretowania plików, wersji i znaczników czasu strumienia. Przy standaryzowanym API stosuj kontrakt API; nie dodawaj pola GBFS, które może być nieobecne w jego odpowiedzi.

Wybór między GTFS, GTFS Realtime a GBFS

Testowanie sytuacji mylących użytkownika

Testuj rzeczywiste zero, wartość nieznaną, przekroczony termin ważności, wyłączony odbiór i błąd po poprawnym wyniku. Sprawdzaj też strefy czasowe wyświetlania. Dodatni licznik nigdy nie powinien oznaczać „rower zarezerwowany”, a niedostępność nie powinna generować wymyślonego zera.

Obsługa pustych odpowiedzi i błędów

Stosowanie tych zasad w asystencie AI

Poradnik użytkownika jak znaleźć rower

Dla programistówROOTE Mobility API

Mobilność wokół danego punktu.
Bezpośrednio w Twojej aplikacji.

  • Wyszukaj
    wokół pozycji
  • Dostęp do
    danych o mobilności
  • Integracja z
    Twoją aplikacją

Przejdź od mapy do danych: wyszukuj mobilności i usługi w pobliżu dzięki API ROOTE.

Najczęściej zadawane pytania

Czy dodatnia ilość gwarantuje rower po moim przybyciu?

Nie. Opisuje ona obserwację, która może się zmienić między wyszukiwaniem a Twoim przybyciem.

Czy można zastąpić null zerem?

Nie. null oznacza wartość nieznaną; zero to znana ilość i ma inne znaczenie.

Czy trzeba odświeżać co kilka sekund?

Używaj wskazań ważności, ograniczeń usługi i potrzeb Twojego interfejsu. Dowolna częstotliwość nie gwarantuje świeższego źródła.

A może rozejrzyj się dookoła?

Odkryj swoją okolicę z ROOTE i znajdź dostępne informacje, by zaplanować podróż.

Odkryj mapę ROOTE ↗