Pahina ng Balita/Mga Gabay/Mga Developer
Mga Developer

Real-time na Availability ng mga Bike: Paano Ipakita Ito sa Isang Aplikasyon?

Ipakita ang availability ng mga bike gamit ang ROOTE API: timestamp, kasariwaan, hindi alam na mga halaga, pag-refresh, at lipas na data sa iyong app.

By ROOTE·7 min na pagbasa
Real-time na Availability ng mga Bike: Paano Ipakita Ito sa Isang Aplikasyon?
Isang naobserbahang availability, kasama ang konteksto nito.

Mga pangunahing punto sa ilang saglit

Ipakita ang dami na available kasama ang estado ng kasariwaan, mga timestamp, at mga kondisyon ng pagkuha ng bike. Ang isang hindi alam na halaga ay nananatiling hindi alam; ang isang lumang pagmamasid ay hindi nagiging real-time dahil lang natanggap ito ng iyong app.

Para ipakita ang real-time na availability ng mga bike sa isang aplikasyon, ipares ang bilang na ibinalik sa kasariwaan nito at sa mga posibilidad ng pagkuha ng sasakyan. Ang isang pagmamasid ay naglalarawan kung ano ang alam ng pinagkunan sa isang sandali; hindi nito ginagarantiya na may bike na nandun pa pagdating mo.

Nililinaw ng mobility contract ng ROOTE ang mga istasyon, mga indibidwal na sasakyan at ang kanilang mga estado. Dapat isalin ng interface ang mga pagkakaiba na ito nang hindi nagkakamali sa isang hindi alam na halaga, isang walang laman na istasyon, at isang pansamantalang hindi magagamit na pinagkukunan.

Paghiwalayin ang isang istasyon mula sa isang indibidwal na sasakyan

Maaaring magpakita ang isang istasyon ng mga bilang ng mga bike at mga puwesto para sa pagbalik. Ang isang indibidwal na sasakyan ay may estado ng availability at iba pang posibleng impormasyon. Iwasan ang pagbilang ng isang istasyon bilang bike o ang pagdagdag ng mga bilang na kumakatawan sa iisang stock.

Sa mobility DTO ng ROOTE, maaaring unknown ang availability.bikes at availability.docks. Ang mga patlang para sa propulsion o baterya ay dapat lamang ipakita kung ito ay umiiral at pinapakahulugan alinsunod sa kontrata.

ROOTE OpenAPI Contract

Basahin ang kasariwaan at mga timestamp

PatlangPagpapakahulugan
freshness.stateInilahad na estado: fresh, stale, unknown o static
freshness.source_updated_atPetsa ng pag-update ng pinagkukunan, kung kilala
freshness.received_atPetsa ng pagtanggap ayon sa kontrata
freshness.expires_atItinakdang petsa ng bisa, kung kilala
availability.bikesKilalang dami o hindi alam na halaga
pickup.enabled at pickup.stateImpormasyon ukol sa pagkuha ng bike sa istasyon

Ang oras ng tawag mo ay hindi awtomatikong oras ng pagmamasid. Ang resulta na natanggap ng 10 AM ay maaaring naglalaman ng isang pinagkukunan na na-update ng 9:45 AM. Huwag ipakita ang "kakatapos lang i-update" base lamang sa oras ng pagtanggap ng iyong interface.

Maghanda ng magkakaibang estado para sa pagpapakita

Natanggap na dataIhanda ang pagpapakita
Kilalang dami at sariwang dataNaobserbahang dami at panahong indikasyon
Daming zeroWalang naobserbahang bike, kasama ang kontekstong panahon
Daming nullHindi kilalang availability
Estado na stale o lumagpas ang bisaLumalaking data; magmungkahi ng pag-update
pickup.enabled=falseHindi magagamit ang pagkuha kahit positibo ang bilang
Error sa paghahanapPansamantalang hindi magagamit ang availability, hindi itinuturing na zero

Huwag ituring ang estado na unknown o static bilang sariwa. Maaaring matatag ang impormasyon ng istasyon habang mabilis lumalaki ang bilang. Panatilihin din ang mga babala at mga atribusyon na kinakailangan ng sagot.

Isang halimbawa ng normalisasyon bago ipakita

Ang sumusunod na function ay naglalabas ng estado ng presentasyon mula sa isang istasyon na na-validate na laban sa ROOTE schema. Hindi ito kompletong validator ng sagot. Ang mga makikitang label ay dapat manggaling sa mga translation keys ng iyong interface.

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

Kahit may estado na observed, huwag gawing kumpirmadong pagkuha ang pickupState=unknown. Ang bilang ay nananatiling pagmamasid. Ipakita ang konteksto ng pagkuha kung ang iyong produkto ay tumutulong sa gumagamit pumili ng istasyon.

Mag-refresh nang hindi nagpaparami ng tawag nang walang kabuluhan

Iakma ang pag-refresh sa inilabas na expiration, mga kondisyon ng serbisyo, at ugali ng gumagamit. Pagsamahin ang magkaparehong request, iwasan ang mga tawag sa background sa hindi aktibong pahina, at i-cancel ang mga napalitan na paghahanap.

Ang lokal na cache delay ay hindi nagpapatunay ng kasariwaan ng pinagkukunan. Pagkatapos ng error, maaari mong panatilihin ang huling may petsang pagmamasid kung ipakita nang malinaw ng interface na ito ay luma. Huwag burahin ang pagkakaibang ito sa unang matagumpay na pagkuha kung ang pinagkukunan ay nananatiling stale.

Unawain ang ugnayan sa GBFS

Nilalarawan ng GBFS ang mga serbisyo ng mobility sharing at kanilang inilalathalang mga estado. Ang direktang integrasyon ay dapat magpaliwanag ng mga file, bersyon at mga timestamp ng daloy. Sa isang standard na API, gamitin ang kontrata ng API; huwag magdagdag ng GBFS field na malamang wala sa sagot nito.

Pumili sa pagitan ng GTFS, GTFS Realtime at GBFS

Subukan ang mga sitwasyong madaling lituhin ang mambabasa

Subukan ang totoong zero, hindi kilalang halaga, lumipas na expiration, disabled na pagkuha, at error pagkatapos ng valid na resulta. Suriin din ang mga timezone ng pagpapakita. Ang positibong bilang ay hindi dapat magpakita ng “nakareserbang bike” at ang hindi availability ay hindi dapat gumawa ng imbentong zero.

Pamahalaan ang mga walang sagot at mga error

Ilapat ang mga panuntunang ito sa isang AI assistant

Gabay ng gumagamit para makahanap ng bike

Para sa mga developerROOTE Mobility API

Ang mobilidad sa isang punto.
Direkta sa iyong app.

  • Maghanap
    sa paligid ng lokasyon
  • Ma-access ang
    mga datos ng mobilidad
  • Isama sa
    iyong app

Mula sa mapa hangang datos: maghanap ng mobilidad at mga serbisyo malapit sa iyo gamit ang ROOTE API.

Mga madalas itanong

Tinitiyak ba ng positibong dami na may bike pagdating ko?

Hindi. Ito ay paglarawan ng pagmamasid, na maaaring magbago mula sa paghahanap hanggang sa iyong pagdating.

Puwede bang papalitan ang null ng zero?

Hindi. Ang null ay nagsasaad ng hindi kilalang halaga; ang zero ay kilalang dami at may ibang kahulugan.

Kailangang i-refresh tuwing ilang segundo?

Gamitin ang mga tagubilin sa bisa, mga limitasyon ng serbisyo at pangangailangan ng iyong interface. Ang arbitraryong dalas ay hindi garantiya ng mas sariwang pinagkukunan.

Bakit hindi tingnan ang paligid mo?

Tuklasin ang iyong lugar gamit ang ROOTE at hanapin ang mga impormasyong magpapadali sa iyong biyahe.

Tuklasin ang ROOTE Mapa ↗