# Upatikanaji wa baiskeli wakati halisi: jinsi ya kuionyesha katika programu?

> Onyesha upatikanaji wa baiskeli kwa API ya ROOTE: tarehe, uhai, thamani zisizojulikana, sasisho na data zilizopitwa kwenye programu yako.

Source: https://www.roote.ai/sw/guides/upatikanaji-baiskeli-wakati-halisi-jinsi-ya-kuionyesha-katika-programu/
Language: sw
Author: ROOTE

Ili kuonyesha upatikanaji wa baiskeli wakati halisi katika programu, ungana na idadi iliyorejeshwa na hali yake ya uhai na uwezo wa kuchukua gari. Uchunguzi unaelezea kile chanzo kilichojua wakati fulani; haidhinishi kwamba baiskeli bado itakuwa pale unapoifika.

Mkataba wa usafiri wa ROOTE hutofautisha vituo, magari binafsi na hali zao. Kiolesura kinapaswa kutafsiri tofauti hizi bila kuchanganya thamani isiyojulikana, kituo tupu na chanzo kisichopatikana kwa muda mfupi.

## Kutenganisha kituo na gari binafsi

Kituo kinaweza kuonyesha hesabu za baiskeli na sehemu za kurudisha. Gari binafsi lina hali ya upatikanaji na taarifa nyingine zinazowezekana. Epuka kuhesabu kituo kama baiskeli au kuongeza hesabu zinazowakilisha hisa sawa.

Katika DTO ya usafiri ya ROOTE, availability.bikes na availability.docks zinaweza kuwa zisizojulikana. Sehemu za uendeshaji au betri zinapaswa kuonyeshwa tu ikiwa zipo na zinaelezewa kulingana na mkataba.

[Mkataba wa OpenAPI wa ROOTE](https://api.roote.ai/openapi.json)

## Soma uhai na tarehe za kumbukumbu

| Sehemu | Maelezo |
| --- | --- |
| freshness.state | Hali iliyo tangazwa: fresh (mpya), stale (imepitwa), unknown (haijulikani) au static (imara) |
| freshness.source_updated_at | Tarehe ya sasisho la chanzo, ikiwa inajulikana |
| freshness.received_at | Tarehe ya kupokelewa iliyoonyeshwa na mkataba |
| freshness.expires_at | Muda wa uhalali uliotangazwa, ikiwa unajulikana |
| availability.bikes | Kiasi kinachojulikana au thamani isiyojulikana |
| pickup.enabled na pickup.state | Taarifa kuhusu kuchukua baiskeli kwenye kituo |

Muda wa simu yako siyo mara zote ndio muda wa uchunguzi. Matokeo yaliyopokelewa saa 10 yanaweza kuwa na chanzo kilicho sasishwa saa 9:45. Usionyeshe “imasasishwa sasa” kulingana na saa ya kupokea tu kwa kiolesura chako.

## Tambua hali tofauti za kuonyesha

| Data iliyopokelewa | Onyesho la kutarajiwa |
| --- | --- |
| Kiasi kinachojulikana na data mpya | Kiasi kilichochunguzwa na taarifa ya muda |
| Kiasi sawa na sifuri | Hakuna baiskeli iliyochunguzwa, yenye muktadha wa muda |
| Kiasi null | Upatikanaji hauna uhakika |
| Hali ya stale au muda umepita | Data ya zamani; pendekeza sasisho |
| pickup.enabled=false | Kuchukua haipatikani hata kama hesabu ni chanya |
| Hitilafu ya utafutaji | Upatikanaji wa muda mfupi haupatikani, bila kubadilisha kuwa sifuri |

Usichukulie hali unknown au static kuwa mpya. Taarifa ya kituo inaweza kuwa thabiti wakati hesabu inabadilika haraka. Hifadhi pia onyo na alama zinazotakiwa na jibu.

## Mfano wa ubana kabla ya kuonyeshwa

Kazi ifuatayo hutengeneza hali ya kuonyesha kutoka kwa kituo kilichothibitishwa dhidi ya mchoro wa ROOTE. Sio kimesaijili cha kutimiza jibu kikamilifu. Leblani za muonekano zinapaswa kutoka kwa funguo za tafsiri za kiolesura chako.

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

Hata kwa hali ya observed, usibadilishe pickupState=unknown kuwa kuchukua kuthibitishwa. Hesabu bado ni uchunguzi. Onyesha muktadha wa kuchukua ikiwa bidhaa yako inasaidia mtumiaji kuchagua kituo.

## Sasisha bila kupitiliza kuita mara kwa mara

Badilisha sasisho kulingana na muda wa kumalizika uliotangazwa, masharti ya huduma na tabia ya mtumiaji. Jumlisha maombi sawa, epuka simu za nyuma kwenye ukurasa usiotumika na katiza zile zinazobadilishwa na utafutaji mpya.

Muda wa kuhifadhi kwa eneo hauoneshi uhai wa chanzo. Baada ya hitilafu, unaweza kuhifadhi uchunguzi wa mwisho uliobainishwa ikiwa kiolesura chako kinaonyesha wazi kuwa ni wa zamani. Usifute tofauti hii baada ya mrejesho wa kwanza uliopata ikiwa chanzo bado ni stale.

## Elewa uhusiano na GBFS

GBFS huelezea huduma za usafiri wa pamoja na hali zao zilizochapishwa. Ushirikiano wa moja kwa moja unapaswa kutafsiri faili, toleo na tarehe za mtiririko. Kwa API iliyo poo sava, tumia mkataba wa API; usiongeze sehemu ya GBFS isiyopo jibu.

[Chagua kati ya GTFS, GTFS Realtime na GBFS](https://www.roote.ai/sw/guides/tofauti-kati-ya-gtfs-gtfs-rt-na-gbfs/)

## Jaribu hali zinazomchanganya msomaji

Jaribu sifuri halisi, thamani isiyojulikana, muda umepita, kuchukua kudhibitiwa na hitilafu baada ya matokeo sahihi. Kagua pia maeneo ya saa ya kuonyesha. Hesabu chanya haisiwezi kuwa “baiskeli imehifadhiwa” na upatikanaji hautakiwi kuonyesha sifuri isiyo ya kweli.

[Saidia majibu tupu na makosa](https://www.roote.ai/sw/guides/hakuna-matokeo-au-kosa-la-api-jinsi-ya-kujitofautisha/)

[Tekeleza kanuni hizi kwenye msaidizi wa AI](https://www.roote.ai/sw/guides/kujenga-msaidizi-wa-kipata-usalama-wa-mobility-katika-anwani/)

[Mwongozo wa mtumiaji kupata baiskeli](https://www.roote.ai/sw/guides/jinsi-ya-kupata-baiskeli-ya-kutumika-karibu-na-wewe/)

## Maswali yanayoulizwa mara kwa mara

### Je, kiasi chenye thamani chanya kinahakikisha baiskeli ni kwangu unapoifika?

Hapana. Kinaelezea uchunguzi, ambao unaweza kubadilika kati ya utafutaji na ufika wako.

### Je, null inaweza kubadilishwa na sifuri?

Hapana. null inaonyesha thamani isiyojulikana; sifuri ni kiasi kinachojulikana na kina maana tofauti.

### Je, ni lazima kusasisha kila sekunde chache?

Tumia dalili za uhalali, mipaka ya huduma na mahitaji ya kiolesura chako. Mzunguko wa wakati bila mpangilio hauhakikishi chanzo kipya zaidi.
