เพื่อแสดงสถานะจักรยานแบบเรียลไทม์ในแอป ให้เชื่อมโยงจำนวนที่ได้กับความสดใหม่และความเป็นไปได้ในการยืมรถ ข้อมูลที่สังเกตอธิบายสิ่งที่แหล่งข้อมูลรู้ในช่วงเวลาหนึ่ง ๆ; ไม่ได้รับประกันว่าจะมีจักรยานอยู่ ณ เวลาที่ผู้ใช้ไปถึง
สัญญาการเคลื่อนที่ ROOTE แยกความแตกต่างระหว่างสถานี ยานพาหนะแต่ละคัน และสถานะของพวกมัน อินเทอร์เฟซต้องแสดงความแตกต่างเหล่านี้โดยไม่สับสนระหว่างค่าที่ไม่ทราบ สถานีว่าง และแหล่งข้อมูลที่ไม่พร้อมใช้งานชั่วคราว
แยกความแตกต่างระหว่างสถานีกับยานพาหนะแต่ละคัน
สถานีสามารถแสดงตัวนับจำนวนจักรยานและที่จอดคืนจักรยานได้ ยานพาหนะแต่ละคันมีสถานะความพร้อมใช้งานและข้อมูลอื่น ๆ ที่เป็นไปได้ หลีกเลี่ยงการนับสถานีเป็นจักรยาน หรือการบวกตัวนับที่แทนสต็อกเดียวกันซ้ำกัน
ใน DTO การเคลื่อนที่ ROOTE, availability.bikes และ availability.docks อาจเป็นค่าที่ไม่ทราบ ช่องข้อมูลพลังงานหรือแบตเตอรี่ควรแสดงเฉพาะเมื่อมีอยู่และตีความตามสัญญา
อ่านความสดใหม่และเวลาอัปเดต
| ช่องข้อมูล | การตีความ |
|---|---|
| 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 อย่าแสดงข้อความว่า 'อัปเดตเมื่อสักครู่นี้' เพียงเพราะเวลาที่รับข้อมูลของอินเทอร์เฟซคุณ
เตรียมสถานะการแสดงที่แยกจากกัน
| ข้อมูลที่ได้รับ | การแสดงผลที่ควรวางแผน |
|---|---|
| จำนวนที่ทราบและข้อมูลสดใหม่ | จำนวนที่สังเกตและบอกเวลาของข้อมูล |
| จำนวนเท่ากับศูนย์ | ไม่มีจักรยานสังเกตเห็น พร้อมบริบทเวลา |
| จำนวน 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 เป็นการยืนยันการยืม ตัวนับเป็นข้อมูลที่สังเกต แสดงบริบทการยืมหากผลิตภัณฑ์ของคุณช่วยผู้ใช้เลือกสถานี
รีเฟรชโดยไม่เพิ่มจำนวนการเรียกซ้ำโดยไม่จำเป็น
ปรับการรีเฟรชให้เข้ากับวันหมดอายุที่ประกาศ เงื่อนไขของบริการ และพฤติกรรมผู้ใช้ รวมคำขอเดียวกัน หลีกเลี่ยงการเรียกในแบ็คกราวด์บนหน้าที่ไม่ใช้งาน และยกเลิกคำขอการค้นหาที่ถูกแทนที่
เวลาคั่นแคชภายในเครื่องไม่รับประกันความสดของแหล่งข้อมูล หลังเกิดข้อผิดพลาด คุณอาจเก็บข้อมูลการสังเกตครั้งล่าสุดที่มีวันที่ หากอินเทอร์เฟซแสดงอย่างชัดเจนว่าเป็นข้อมูลเก่า อย่าลบความแตกต่างนี้เมื่อการเรียกคืนสำเร็จครั้งแรกถ้าแหล่งยังล้าสมัย
เข้าใจความสัมพันธ์กับ GBFS
GBFS บรรยายบริการแบ่งปันการเดินทางและสถานะที่เผยแพร่ การผสานตรงต้องตีความไฟล์ เวอร์ชัน และเวลาในฟีด ด้วย API มาตรฐานให้ใช้สัญญา API อย่าเพิ่มช่องของ GBFS ที่อาจไม่มีอยู่ในคำตอบ
เลือกใช้ระหว่าง GTFS, GTFS Realtime และ GBFS
ทดสอบสถานการณ์ที่อาจทำให้ผู้อ่านสับสน
ทดสอบศูนย์จริง ค่าที่ไม่ทราบ วันหมดอายุ ปิดการใช้งานการยืม และข้อผิดพลาดหลังผลลัพธ์ที่ถูกต้อง ตรวจสอบโซนเวลาการแสดงด้วย ตัวนับบวกไม่ควรแสดงข้อความ 'จักรยานจองแล้ว' และสถานะไม่พร้อมใช้งานไม่ควรแสดงศูนย์ปลอม
คู่มือผู้ใช้สำหรับการหาจักรยาน
คำถามที่พบบ่อย
จำนวนบวกยืนยันได้ว่ามีจักรยานเมื่อฉันไปถึงไหม?
ไม่ใช่ มันแสดงข้อมูลสังเกตที่อาจเปลี่ยนแปลงระหว่างการค้นหาและการมาถึงของคุณ
สามารถแทน null ด้วยศูนย์ได้ไหม?
ไม่ได้ null หมายถึงค่าที่ไม่รู้จัก ศูนย์หมายถึงจำนวนที่ทราบและมีความหมายต่างกัน
ควรรีเฟรชทุกไม่กี่วินาทีไหม?
ใช้ข้อมูลวันที่หมดอายุ ขอบเขตของบริการ และความต้องการของอินเทอร์เฟซของคุณ ความถี่ที่ไม่กำหนดไม่ได้รับประกันว่าแหล่งข้อมูลจะสดใหม่กว่า