การเคารพข้อจำกัดอัตราการเรียก API
มาทดสอบความรู้เรื่องการจัดการข้อผิดพลาดกัน ในแบบฝึกหัดนี้จะพบกับ rate-limit error ซึ่งหมายความว่าส่งคำขอไปยังเซิร์ฟเวอร์มากเกินไปในช่วงเวลาสั้น ๆ มาแก้ปัญหานี้ด้วยการเพิ่มวิธีหลีกเลี่ยง rate limit เพื่อให้สคริปต์ทำงานได้อย่างราบรื่น
ไลบรารีเพลงของเรามีเพลงกว่า 3,500 แทร็ก ลองค้นหาแทร็กที่ยาวที่สุดโดยตรวจสอบ property Length ของแต่ละแทร็กกัน
แต่มีปัญหาอยู่ตรงที่ API /tracks รองรับขนาดหน้าสูงสุด 500 รายการ และมี rate limit ที่ 1 คำขอต่อวินาที สคริปต์ที่เขียนไว้กำลังส่งคำขอไปยังเซิร์ฟเวอร์มากเกินไปในช่วงเวลาสั้น ๆ มาแก้ไขกัน!
แพ็กเกจ requests และ time ถูก import ไว้แล้ว และได้สร้างตัวแปรต่อไปนี้ให้แล้ว:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Python เบื้องต้นสำหรับ API
คำแนะนำการฝึกหัด
- เริ่มต้นด้วยการรันแบบฝึกหัดโดยไม่แก้ไขโค้ด จะเห็นว่า console แสดงข้อผิดพลาด
429 Client Errorซึ่งบ่งชี้ว่าส่งคำขอไปยังเซิร์ฟเวอร์มากเกินไปในช่วงเวลาสั้น ๆ - แก้ไขสคริปต์โดยเพิ่ม การหยุดพัก 3 วินาที ที่ท้าย while-loop โดยใช้เมธอด
sleepจากแพ็กเกจtime
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
while True:
params = {'page': page_number, 'per_page': 500}
response = requests.get('http://localhost:3000/tracks', params=params, headers=headers)
response.raise_for_status()
response_data = response.json()
print(f'Fetching tracks page {page_number}')
if len(response_data['results']) == 0:
break
for track in response_data['results']:
if(track['Length'] > longestTrackLength):
longestTrackLength = track['Length']
longestTrackTitle = track['Name']
page_number = page_number + 1
# Add your fix here
____.____(3)
print('The longest track in my music library is: ' + longestTrackTitle)