0%

Met een API communiceren · oefening

Scheid URL, parameters en headers

Een HTTP-verzoek heeft meerdere soorten invoer. Alles samenvoegen in één string verbergt welk deel wat betekent. Houd de basis en het pad bij elkaar, maar geef querygegevens via params= door en verzoekmetadata via headers=.

De route voor items is /items. Vraag pagina 2 op met een gegevensstructuur:

document = request_json("/items", params={"page": 2, "page_size": 2})

Requests codeert die waarden in de URL: het volledige URL-pad is /v1/items en de query is ?page=2&page_size=2. De query kiest welke pagina wordt teruggegeven; de header hieronder levert metadata over het verzoek. Je code geeft expliciet alleen de gedocumenteerde oefenmetadata mee:

PRACTICE_HEADERS = {"X-Practice-Name": "python-in-practice"}

Voeg geen autorisatie, tokens, hostaanpassingen of openbare URL’s toe. Die zijn niet gedefinieerd voor deze dienst.

Het antwoord bevat een HTTP-statuscode die de uitkomst beschrijft. 200 betekent succes, 404 betekent dat de gevraagde bron niet is gevonden en 500 betekent een serverfout. De inhoud kan in alle drie de gevallen JSON zijn, dus alleen geslaagd JSON decoderen bewijst geen succes.

Voordat les 3 onsuccesvolle statussen omzet in excepties, maak je de volgorde in request_json zichtbaar: lees response.status_code en decodeer daarna JSON. Je hoeft de waarde nog niet terug te geven:

    status = response.status_code
    document = response.json()
    return document

Een status lezen is niet hetzelfde als die afhandelen. Die tijdelijke regel laat je de antwoordgrens onderzoeken zonder te doen alsof een 404-antwoord geslaagde gegevens is. Als je handmatig /headers aanroept, hoort het veld voor de oefenheader de vaste waarde terug te geven. Requests kan zelf gewone client- en protocolheaders toevoegen; dat zijn geen extra applicatiemetadata die jouw code kiest.

Een namaakantwoord kan vastleggen in welke volgorde je code het benaderde. Dat is handig om te weten: “heb ik de status vóór het decoderen gecontroleerd?” is daardoor een vraag die een test precies kan beantwoorden. Je hoeft er niet alleen op te vertrouwen terwijl je je eigen code leest.

Waar hoort het gevraagde paginanummer?

Opdracht

Houd request_json bij één GET naar de vaste basis. Geef nieuwe params ongewijzigd door, stuur precies X-Practice-Name: python-in-practice, houd de time-out expliciet en lees response.status_code voordat je response.json() aanroept.