เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

การเคารพข้อจำกัดอัตราการเรียก 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)
แก้ไขและรันโค้ด