Aan de slagGa gratis aan de slag

API-rate-limieten respecteren

Laten we in de praktijk brengen wat we over foutafhandeling hebben geleerd. In deze oefening krijg je een rate-limit-fout: je stuurt in korte tijd te veel requests naar de server. We lossen dit op door een workaround te implementeren die de rate limit omzeilt, zodat ons script niet faalt.

Je muziekbibliotheek bevat meer dan 3500 nummers, dus we gaan het langste nummer zoeken door de eigenschap Length van elk nummer te controleren.

Er is alleen een probleem: de /tracks API heeft een maximale paginagrootte van 500 items en een rate-limit van 1 request per seconde. Het script dat we hebben geschreven stuurt in korte tijd te veel requests naar de server. Laten we dit fixen!

De pakketten requests en time zijn al geïmporteerd en we hebben de volgende variabelen voor je aangemaakt:

longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1

Deze oefening maakt deel uit van de cursus

Introductie tot API's in Python

Cursus bekijken

Oefeninstructies

  • Begin met het uitvoeren van de oefening zonder wijzigingen in de code. Je ziet in de console een 429 Client Error, wat aangeeft dat we in korte tijd te veel requests naar de server sturen.
  • Fix het script door aan het einde van de while-lus een pauze van 3 seconden toe te voegen met de methode sleep uit het pakket time.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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)
Code bewerken en uitvoeren