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.
Basahin ang kasariwaan at mga timestamp
| Patlang | Pagpapakahulugan |
|---|---|
| freshness.state | Inilahad na estado: fresh, stale, unknown o static |
| freshness.source_updated_at | Petsa ng pag-update ng pinagkukunan, kung kilala |
| freshness.received_at | Petsa ng pagtanggap ayon sa kontrata |
| freshness.expires_at | Itinakdang petsa ng bisa, kung kilala |
| availability.bikes | Kilalang dami o hindi alam na halaga |
| pickup.enabled at pickup.state | Impormasyon 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 data | Ihanda ang pagpapakita |
|---|---|
| Kilalang dami at sariwang data | Naobserbahang dami at panahong indikasyon |
| Daming zero | Walang naobserbahang bike, kasama ang kontekstong panahon |
| Daming null | Hindi kilalang availability |
| Estado na stale o lumagpas ang bisa | Lumalaking data; magmungkahi ng pag-update |
| pickup.enabled=false | Hindi magagamit ang pagkuha kahit positibo ang bilang |
| Error sa paghahanap | Pansamantalang 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
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.