Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Eine HTTP-Eingangstür für eine Funktion

Nach dieser Lektion: Ich kann die Antwort schreiben, die ein API Gateway von einer Funktion erwartet.

Lektion, 60 Min.Keine Befehle

Eine Webadresse, die eine Funktion startet

Ein Schulkiosk will eine Webadresse, /bestellungen/lena, die Lenas Bestellungen zeigt. Niemand will dafür einen eigenen Server betreiben.

Ein API Gateway kann die Webanfrage annehmen und an eine Lambda-Funktion reichen. Die Funktion muss in genau der Form antworten, die das Gateway erwartet, auch wenn die Anfrage falsch ist.

Am Ende dieser Lektion

Notiz

Ich kann die Antwort schreiben, die ein API Gateway von einer Funktion erwartet.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Requestwas ein Aufrufer an eine Webadresse sendet
Responsewas die Funktion zurücksendet
Statuscodeeine Zahl, die sagt, wie die Anfrage ausging404
Headereine benannte Angabe, die neben dem Body reistcontent-type
Bodyder Haupttext einer Anfrage oder Antwort

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Anfrage kommt herein, eine Antwort geht hinaus

Das Gateway macht aus der Webanfrage ein Event. Die Methode, etwa GET, steht unter requestContext.http.method. Der Pfad steht in rawPath.

Die Funktion gibt ein Dictionary mit drei Teilen zurück: statusCode, headers und body. Der Body muss ein String sein, nehmen Sie also json.dumps. Das sind die dokumentierten Formen, keine Ausgabe eines Stacks von Ihnen.

Run: die kleinste Eingangstür

Code: python
import json

# Die dokumentierte Form einer HTTP-API-Anfrage, gekürzt.
event = {
    "requestContext": {"http": {"method": "GET"}},
    "rawPath": "/bestellungen/lena",
    "headers": {"accept": "application/json"},
}


def handler(event, context):
    methode = event["requestContext"]["http"]["method"]
    pfad = event["rawPath"]
    daten = {"gefragt_wurde": methode + " " + pfad}
    return {"statusCode": 200,
            "headers": {"content-type": "application/json"},
            "body": json.dumps(daten)}


antwort = handler(event, None)
print(antwort["statusCode"])
print(antwort["body"])
print(type(antwort["body"]).__name__)
# Ändere "GET" im Event in "POST" und führe es noch einmal aus.

Ein Statuscode sagt, wer sich geirrt hat

Eine 2 am Anfang, etwa 200 oder 201, heißt Erfolg. Eine 4, etwa 400 oder 404, heißt, dass der Aufrufer etwas Falsches verlangt hat. Eine 5 heißt, dass die Funktion selbst gescheitert ist.

Eine falsche Anfrage ist kein Absturz. Geben Sie eine 4 mit einem kurzen Fehler im Body zurück. Eine Funktion, die einen Fehler auslöst, gibt dem Aufrufer eine vage 5 und sagt ihm nichts, was er beheben könnte.

Beispiel: die Codes dieser Lektion

CodeBedeutungZu verwenden, wenn
200OKdie Daten gefunden und zurückgegeben wurden
201Createdeine neue Bestellung gespeichert wurde
400Bad requestein Feld fehlt, falsch ist oder der Body kein gültiges JSON ist
404Not foundes den Pfad oder die Bestellung nicht gibt
405Method not allowedder Pfad existiert, die Methode aber nicht
415Unsupported media typeder content-type nicht application/json ist

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele lassen die Funktion bei schlechter Eingabe abstürzen. Der Aufrufer bekommt dann einen vagen Serverfehler. Prüfen Sie zuerst die Eingabe. Liegt der Fehler beim Aufrufer, geben Sie eine 4 zurück und sagen Sie, was zu ändern ist. Eine 5 gehört Fehlern, die bei Ihnen liegen.

Run: ein Fehler als Antwort

Code: python
import json


def antworte(status, daten):
    return {"statusCode": status,
            "headers": {"content-type": "application/json"},
            "body": json.dumps(daten)}


def handler(event, context):
    # Ein fehlender Schlüssel ist der Fehler des Aufrufers: antworten Sie 400, stürzen Sie nicht ab.
    if "queryStringParameters" not in event:
        return antworte(400, {"fehler": "ergaenze ?kunde=name"})
    name = event["queryStringParameters"]["kunde"]
    return antworte(200, {"hallo": name})


print(handler({"queryStringParameters": {"kunde": "lena"}}, None)["statusCode"])
print(handler({}, None)["statusCode"])
print(handler({}, None)["body"])
# Fügen Sie eine dritte Zeile hinzu, die handler mit {"queryStringParameters": {}} aufruft. Was geschieht?

Die Anfrage sorgfältig lesen

Nicht jeder Schlüssel ist immer da. Ohne Query-String fehlt queryStringParameters ganz im Event. Prüfen Sie mit in, bevor Sie lesen wollen.

Der Body kommt als Text an. Ist isBase64Encoded wahr, ist der Text kodiert, und Sie dekodieren ihn zuerst. Header-Namen kommen in Kleinbuchstaben an, suche also nach content-type.

Run: einen Base64-Body lesen

Code: python
import json
import base64

event = {
    "body": base64.b64encode(b'{"artikel": "tee"}').decode("utf-8"),
    "isBase64Encoded": True,
}

text = event["body"]
print(text)
if event["isBase64Encoded"] is True:
    text = base64.b64decode(text).decode("utf-8")
print(text)
print(json.loads(text)["artikel"])
# Setzen Sie isBase64Encoded auf False und führen Sie es noch einmal aus. Was geht schief?

Was dieses Modul nicht gelehrt hat

Notiz

Alles hier lief offline in Python, über Antworten in der Form der echten. Sie haben nichts bereitgestellt, sich in kein echtes Konto eingeloggt und keine Rechnung gesehen. Die Kosten, einen Dienst am Laufen zu halten, kamen nicht vor. Das sind die nächsten Schritte, und man lernt sie am besten mit jemandem, der Ihre Konto-Einstellungen prüfen kann.

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.