0%

Mit einer API kommunizieren · Übung

URL, Parameter und Header trennen

Eine HTTP-Anfrage hat mehrere Eingaben. Wenn du sie zu einem einzigen String verbindest, verdeckst du ihre jeweilige Bedeutung. Halte Basisadresse und Pfad zusammen, aber übergib Abfragedaten mit params= und Metadaten der Anfrage mit headers=.

Die Route für Artikel ist /items. Fordere Seite 2 mit einer Datenstruktur an:

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

Requests kodiert diese Werte in der URL: Der vollständige URL-Pfad ist /v1/items und die Abfrage lautet ?page=2&page_size=2. Die Abfrage wählt die zurückzugebende Seite aus; der folgende Header liefert Metadaten zur Anfrage. Dein Code gibt ausdrücklich nur die dokumentierten Übungs-Metadaten an:

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

Füge weder Autorisierung noch Token, Host-Überschreibungen oder öffentliche URLs hinzu. Der Dienst sieht sie nicht vor.

Die Antwort enthält einen HTTP-Statuscode, der das Ergebnis beschreibt. 200 bedeutet Erfolg, 404, dass die angeforderte Ressource nicht gefunden wurde, und 500 einen Serverfehler. Der Inhalt kann in allen drei Fällen JSON enthalten. Erfolgreiches Dekodieren von JSON allein kann deshalb keinen Erfolg belegen.

Bevor Lektion 3 erfolglose Statuscodes in Ausnahmen umwandelt, mache die Reihenfolge in request_json sichtbar: Lies response.status_code und dekodiere danach JSON. Der Wert muss noch nicht zurückgegeben werden:

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

Einen Status zu lesen ist nicht dasselbe, wie ihn zu behandeln. Diese vorübergehende Zeile lässt dich die Antwortgrenze untersuchen, ohne vorzutäuschen, dass eine 404-Fehlerantwort erfolgreiche Daten enthält. Wenn du /headers manuell aufrufst, sollte das Feld für den Übungs-Header den festen Wert zurückgeben. Requests kann eigene gewöhnliche Client- und Protokoll-Header ergänzen; sie sind keine zusätzlichen Anwendungs-Metadaten, die dein Code ausgewählt hat.

Eine Fake-Antwort kann die Reihenfolge aufzeichnen, in der dein Code auf sie zugegriffen hat. Das ist nützlich: „Habe ich vor dem Dekodieren den Status geprüft?“ ist damit eine Frage, die ein Test genau beantworten kann, statt etwas, dem du beim Lesen deines eigenen Codes vertrauen musst.

Wohin gehört die angeforderte Seitennummer?

Aufgabe

Beschränke request_json weiterhin auf eine GET-Anfrage an die feste Basisadresse. Reiche bisher nicht verwendete params unverändert weiter, sende genau X-Practice-Name: python-in-practice, halte den Timeout ausdrücklich fest und lies response.status_code, bevor du response.json() aufrufst.