# ភាពមានស្រាប់នៃកង់នៅពេលវេលាពិតប្រាកដ៖ របៀបបង្ហាញវាក្នុងកម្មវិធី?

> បង្ហាញភាពមានស្រាប់នៃកង់ជាមួយ API ROOTE៖ ពេលវេលាផ្លាស់ប្តូរ ភាពថ្មី តម្លៃមិនស្គាល់ ការត្រួតពិនិត្យឡើងវិញ និងទិន្នន័យអស់កំណត់ក្នុងកម្មវិធីរបស់អ្នក។

Source: https://www.roote.ai/km/guides/availability-of-bicycles-in-real-time-how-to-display-in-an-application/
Language: km
Author: ROOTE

ដើម្បីបង្ហាញភាពមានស្រាប់នៃកង់នៅពេលវេលាពិតប្រាកដក្នុងកម្មវិធី មិនត្រូវភ្ជាប់បរិមាណដែលត្រូវបានបញ្ចូនជាមួយភាពថ្មី និងលក្ខខណ្ឌសម្រាប់យកកង់។ ការសង្កេតប្រាប់អំពីអ្វីដែលប្រភពបានដឹងក្នុងពេលវេលាមួយ; វាមិនធានាថាកង់មួយនឹងនៅមាននៅពេលអ្នកមកដល់។

កិច្ចសន្យាចលនាគឺបំបែកផ្ទះចតកង់ រថយន្តឯកជន និងស្ថានភាពរបស់ពួកវា។ មុខងារត្រូវបកប្រែភាពខុសគ្នាទាំងនេះដោយមិនបំភាន់ចន្លោះតម្លៃមិនស្គាល់ ផ្ទះចតដែលទទេ និងប្រភពដែលមិនអាចប្រើបានជាបណ្តោះអាសន្ន។

## បំបែកផ្ទះចតពីរថយន្តឯកជន

ផ្ទះចតអាចបង្ហាញរាប់កង់ និងចំនួនកន្លែងត្រឡប់វិញបាន។ រថយន្តឯកជនមានស្ថានភាពភាពមានស្រាប់ និងព័ត៌មានផ្សេងៗទៀត។ ជៀសវាងរាប់ផ្ទះចតថាជាកង់ ឬបូកបន្ថែមរាប់ចំនួនដែលបង្ហាញទៅលើសារពើភណ្ឌដូចគ្នា។

ក្នុង DTO ចលនារបស់ ROOTE, availability.bikes និង availability.docks អាចមិនស្គាល់។ វាល propulsion ឬ battery ត្រូវបង្ហាញតែពេលវាមាន ហើយផ្ទាត់មើលតាមកិច្ចសន្យា។

[កិច្ចសន្យា OpenAPI របស់ ROOTE](https://api.roote.ai/openapi.json)

## អានភាពថ្មី និងពេលវេលាផ្លាស់ប្តូរ

| វាល | ការបកប្រែ |
| --- | --- |
| freshness.state | ស្ថានភាពដែលបានប្រកាស៖ fresh, stale, unknown ឬ static |
| freshness.source_updated_at | កាលបរិច្ឆេទនៃការអាប់ដេតប្រភព ប្រសិនបើស្គាល់ |
| freshness.received_at | កាលបរិច្ឆេទទទួលដែលបង្ហាញដោយកិច្ចសន្យា |
| freshness.expires_at | ថ្ងៃផុតកំណត់ត្រឹមត្រូវ បើស្គាល់ |
| availability.bikes | បរិមាណដែលស្គាល់ ឬតម្លៃមិនស្គាល់ |
| pickup.enabled និង pickup.state | ព័ត៌មានអំពីការយកកង់នៅផ្ទះចត |

ម៉ោងដែលអ្នកហៅមិនមែនម៉ោងតាមការសង្កេតទេ។ លទ្ធផលដែលទទួលនៅម៉ោង 10 ពេលអាចមានប្រភពបានត្រូវបានបន្ទាន់សម័យនៅម៉ោង 9:45។ កុំបង្ហាញ "ត្រូវបានបន្ទាន់សម័យឥឡូវនេះ" ដោយផ្អែកលើម៉ោងទទួលពីផ្ទៃមុខរបស់អ្នកតែប៉ុណ្ណោះ។

## រៀបចំស្ថានភាពបង្ហាញខុសគ្នា

| ទិន្នន័យបានទទួល | ការបង្ហាញដែលត្រូវរៀបចំ |
| --- | --- |
| បរិមាណស្គាល់ និងទិន្នន័យថ្មី | បរិមាណដែលបានសង្កេត និងបង្ហាញពេលវេលា |
| បរិមាណស្មើសូន្យ | គ្មានកង់ដែលត្រូវបានសង្កេតទេ ជាមួយ context ពេលវេលា |
| បរិមាណ null | ភាពមានស្រាប់មិនស្គាល់ |
| ស្ថានភាព stale ឬផុតកំណត់ | ទិន្នន័យចាស់; សូមផ្តល់ជំនួយក្នុងការផ្លាស់ប្តូរ |
| pickup.enabled=false | មិនអាចយកកង់បាន ទោះបីជានៅមានរាប់វិជ្ជមានក៏ដោយ |
| កំហុសស្វែងរក | ភាពមានស្រាប់មិនអាចប្រើបានបណ្តោះអាសន្ន ដោយមិនបម្លែងទៅសូន្យ |

កុំចាត់ថាស្ថានភាព unknown ឬ static ជាថ្មី។ ព័ត៌មានផ្ទះចតអាចមានស្ថេរភាព ពោលគឺរាប់កង់អាចរហ័សរំលង។ រក្សាការជូនដំណឹង និងតម្រូវការដែលបានទាមទារដោយចម្លើយ។

## ឧទាហរណ៍នៃការធ្វើឲ្យមានទ្រង់ទ្រាយស្រួល មុននឹងបង្ហាញ

មុខងារខាងក្រោមបង្កើតស្ថានភាពបង្ហាញពីផ្ទះចតដែលបានផ្ទៀងផ្ទាត់ដោយគំរូ ROOTE។ វាមិនមែនជាប្រភពផ្ទៀងផ្ទាត់ចម្លើយពេញលេញទេ។ អត្ថន័យដែលបង្ហាញត្រូវបានយកពីសោរ​ចំណាត់ថ្នាក់បំភ្លឺរបស់ផ្ទៃមុខរបស់អ្នក។

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

ទោះបីមានស្ថានភាព observed ក៏ដោយ កុំបំលែង pickupState=unknown ទៅជាការយកបានបញ្ជាក់។ រាប់កង់នៅតែជាការសង្កេត។ បង្ហាញ context សម្រាប់ការយក ប្រសិនបើផលិតផលរបស់អ្នកជួយអ្នកប្រើក្នុងការជ្រើសរើសផ្ទះចត។

## ធ្វើការត្រួតពិនិត្យបច្ចុប្បន្នភាពដោយមិនបង្កើនការហៅមិនចាំបាច់

បំរើការត្រួតពិនិត្យដោយផ្អែកលើថ្ងៃផុតកំណត់ ឧបសគ្គសេវា និងពហុពាក្យអ្នកប្រើ។ សហការជាមួយសំណើដូចគ្នា ចៀសវាងហៅផ្ទៃខាងក្រោយកាន់តែវេននៅលើទំព័រមិនប្រើ និងបោះបង់វានៅពេលស្វែងរកត្រូវបានប្ដូរ។

ពេលវេលាដាក់ទុកក្នុងទីលំនៅមិនជាភស្តុតាងភាពថ្មីរបស់ប្រភពទេ។ បន្ទាប់ពីកំហុស អ្នកអាចរក្សាការសង្កេតចុងក្រោយដែលមានកាលបរិច្ឆេទ ប្រសិនបើផ្ទៃមុខរបស់អ្នកបង្ហាញវាឲ្យច្បាស់ថាជាទិន្នន័យចាស់។ កុំលុបបំបាត់ការបំបែកនេះនៅលើការត្រឡប់ជាលទ្ធផលជោគជ័យដំបូងក្រោយការ error ប្រសិនបើប្រភពនៅតែ stale។

## យល់អំពីទំនាក់ទំនងជាមួយ GBFS

GBFS ពិពណ៌នាសេវាចលនាចែករំលែក និងស្ថានភាពដែលបានបង្ហាញ។ ការអ៊ីនធឺក្រាតផ្ទាល់ត្រូវបកប្រែឯកសារ កំណែ និងពេលវេលារបស់ហ្វ្លុច។ ជាមួយ API ដែលមានស្តង់ដារ សូមប្រើកិច្ចសន្យា API មិនត្រូវបន្ថែមវាល GBFS ដែលជាលោកថាគួរត្រូវធ្លាប់បាត់ក្នុងចម្លើយរបស់វា។

[ជ្រើសរើសរវាង GTFS, GTFS Realtime និង GBFS](https://www.roote.ai/km/guides/gtfs-gtfs-rt-et-gbfs-munh-chea-daut-ol-roeut/)

## សាកល្បងស្ថានភាពដែលបំភាន់អ្នកអាន

សាកល្បងសូន្យពិត បរិមាណមិនស្គាល់ កាលបរិច្ឆេទផុតកំណត់ ការយកបានបិទ និងកំហុសបន្ទាប់ពីលទ្ធផលត្រឹមត្រូវ។ ពិនិត្យមើលតំបន់ម៉ោងបង្ហាញផងដែរ។ រាប់វិជ្ជមានមិនគួរបង្កើត "កង់បានកក់" ហើយភាពមិនអាចប្រើបានមិនគួរបង្កើតសូន្យក្លែងក្លាយ។

[គ្រប់គ្រងចម្លើយទទេ និងកំហុស](https://www.roote.ai/km/guides/%E1%9E%82%E1%9F%92%E1%9E%98%E1%9E%B6%E1%9E%93%E1%9E%9B%E1%9E%91%E1%9F%92%E1%9E%92%E1%9E%95%E1%9E%9B-%E1%9E%AC%E1%9E%80%E1%9F%86%E1%9E%A0%E1%9E%BB%E1%9E%9F-api-%E1%9E%8F%E1%9E%BE%E1%9E%92%E1%9F%92%E1%9E%9C%E1%9F%81%E1%9E%B8%E1%9E%94%E1%9F%82%E1%9E%94%E1%9E%8E%E1%9E%B6-%E1%9E%8A%E1%9E%B9%E1%9E%84%E1%9E%97%E1%9E%B6%E1%9E%96%E1%9E%81%E1%9E%BB%E1%9E%9F%E1%9E%82%E1%9F%92%E1%9E%93%E1%9E%B6/)

[អនុវត្តច្បាប់ទាំងនេះនៅក្នុងជំនួយការជំនួយរបស់ AI](https://www.roote.ai/km/guides/%E1%9E%92%E1%9F%92%E1%9E%9C%E1%9E%BE%E1%9E%87%E1%9F%86%E1%9E%93%E1%9E%BD%E1%9E%99%E1%9E%80%E1%9E%B6%E1%9E%9A%E1%9E%9F%E1%9F%92%E1%9E%9C%E1%9F%82%E1%9E%84%E1%9E%9A%E1%9E%80%E1%9E%85%E1%9E%9B%E1%9E%93%E1%9E%B6%E1%9E%98%E1%9E%87%E1%9E%BB%E1%9F%86%E1%9E%9C%E1%9E%B7%E1%9E%89%E1%9E%A2%E1%9E%B6%E1%9E%9F%E1%9E%99%E1%9E%8A%E1%9F%92%E1%9E%8B%E1%9E%B6%E1%9E%93/)

[មគ្គុទេសក៍អ្នកប្រើសម្រាប់ស្វែងរកកង់](https://www.roote.ai/km/guides/eis-pis-soer-pech-kar/)

## សំណួរញឹកញាប់

### បរិមាណវិជ្ជមានធានាកង់នៅពេលខ្ញុំមកដល់ទេ?

ទេ។ វាបង្ហាញពីការសង្កេត ដែលអាចប្ដូរប្រែរវាងការស្វែងរក និងពេលអ្នកមកដល់។

### តើអាចជំនួស null ជាសូន្យបានទេ?

ទេ។ null បង្ហាញតម្លៃមិនស្គាល់។ សូន្យគឺបរិមាណដែលបានស្គាល់ ហើយមានន័យផ្សេង។

### តើត្រូវត្រួតពិនិត្យឡើងវិញរាល់ប៉ុន្មានវិនាទី?

សូមប្រើសញ្ញាប្រសើរពាក់ព័ន្ធការពិត ប្រព័ន្ធសេវាកម្ម និងតម្រូវការផ្ទៃមុខរបស់អ្នក។ អត្រាដែលមានការកំណត់មិនធានាប្រភពនៅភាពថ្មីជាងឡើយ។
