Was macht eine intelligente API aus?

Jan 01 2023
Ich praktiziere maschinelles Lernen jetzt seit fast 3–4 Jahren. Im Laufe der Zeit habe ich viele Modelle trainiert, viele Datenpipelines implementiert und vieles mehr.

Ich praktiziere maschinelles Lernen jetzt seit fast 3–4 Jahren. Im Laufe der Zeit habe ich viele Modelle trainiert, viele Datenpipelines implementiert und vieles mehr. Hinweis: Ich habe definitiv viel mehr Daten gesammelt und bereinigt, als ich jemals an Modellen bauen konnte .

Einer der entscheidenden Aspekte im ML-Spektrum ist die Fähigkeit , Ihre Gedanken oder Implementierungen anderen leicht zugänglich zu machen .

Lassen Sie mich das erklären.

Es könnte einer nicht-technischen Person erklären, wie ein Algorithmus in Laiensprache funktioniert, wie Sie Ihre Modelle in einer API bereitstellen oder sogar Ihre Arbeit dokumentieren, damit sich jemand, der neu in Ihren Projekten ist, leicht mit dem, was Sie getan haben, vertraut machen kann weit und viele mehr. In diesem Artikel konzentrieren wir uns auf APIs .

API (Application Programming Interface) ist nichts anderes als ein Medium, das die Kommunikation zwischen der Quelle und dem Endbenutzer erleichtert . Fast alle Anwendungen, die wir in unserem täglichen Leben verwenden, bestehen aus 100 (wenn nicht sogar mehr) APIs, die die schwere Arbeit im Backend erledigen, damit Sie die Anwendung problemlos verwenden können. Eine API verhält sich nach dem Request-Response- Prinzip. Dies kann zwischen einigen Millisekunden und weit über einigen Minuten liegen.

Foto von Balázs Kétyi auf Unsplash

Stellen Sie sich vor, Sie gehen zu Starbucks und bestellen einen Karamell-Frappuccino mit extra Sahne (mein persönlicher Favorit ), kurz bevor Sie an diesem sehr langen Meeting teilnehmen

Was passiert als nächstes? Brunnen,

Sie würden wahrscheinlich die nächsten 4–5 Minuten warten, in denen Ihre Bestellung aufgegeben wird, dann wird sie in der Küche zubereitet und der Kellner bringt Ihnen Ihren köstlichen Frappuccino. In diesem Fall sind Sie der Endbenutzer, die Küche wird zur Quelle und der Kellner, der Ihnen den Frappuccino aus der Küche bringt, fungiert als API .

Klingt klar genug?

Nehmen wir nun an, es sind mehr als 30 Minuten vergangen und Ihr Frappuccino muss Ihnen noch gegeben werden. Würdest du nicht die Geduld verlieren? Oder würdest du nicht wenigstens in 10 Minuten zu dem Meeting gehen, das du hast, während du dich die ganze Zeit sehr enttäuscht fühlst?

Foto von Christian Erfurt auf Unsplash

Genau so würde sich der Endbenutzer Ihrer Anwendung fühlen, wenn es zu einer großen Verzögerung bei der Rückgabe der Antwort kommt. Latenz ist der Schlüssel, wenn es darum geht, die perfekte App zu entwerfen.

Nehmen wir nun an, selbst der beste Kaffeekünstler würde die Zubereitung eines Karamell-Frappuccinos nicht weniger als 30 Minuten dauern. Würden Sie trotzdem den Frappuccino bestellen oder sich für eine alternative Option entscheiden, die eine kürzere Zubereitungszeit hat? In den meisten Fällen werden Sie sich für die alternative Option entscheiden, nicht wahr?

Aber was ist, wenn der Barista sagt, wie ich zitiere: Gehen Sie einfach zu diesem Meeting, ich werde sicherstellen, dass der Frappuccino in Ihrem Konferenzraum ist, bevor Sie dort ankommen!

Klingt nach einem interessanten Deal, nicht wahr?

Warum können wir keine API erstellen, die sich genauso verhalten könnte?

Lassen Sie mich erklären.

Sie können eine API erstellen, die sofort eine Antwort zurückgibt, wenn der Benutzer eine Anfrage an eine API sendet. Aber die schwere Arbeit wird im Hintergrund erledigt ( das kann/darf nicht eine Weile dauern ). Mit einer solchen API können Sie sicherstellen, dass sich die Ausführungszeit nie auf die Gesamtzeit für die Rückgabe einer Antwort auswirkt.

Sellerie und FastAPI bieten einen optimierten Messaging-Mechanismus. In diesem Artikel konzentrieren wir uns nur auf FastAPI (Danke an Sebastián Ramírez für die Erstellung dieses GEM), das auch mein persönliches Lieblings-Python-API-Framework ist. Es unterstützt Hintergrundaufgaben, die perfekt zu dem passen, was wir jetzt besprochen haben.

Wenn Sie neu bei FastAPI sind, schauen Sie sich bitte diesen Blog über FastAPI an, um eine Starthilfe zu erhalten, um zu verstehen, was ich in diesem Artikel erklären werde.

Erste Schritte mit FastAPI

Von hier an gehe ich davon aus, dass Sie wissen, wie man eine grundlegende API mit FastAPI erstellt.

Sollen wir anfangen?

Lassen Sie uns eine API erstellen, die nach 10 Sekunden „Hello World“ zurückgibt.

from fastapi import FastAPI
import time

app = FastAPI()

@app.post("/myApp/timer")
def read_item():
    
    start = time.time() # start time
    time.sleep(10)
    end = time.time() # end time
    
    print(end - start) # print the time taken to return the response
    
    return {"response": "Hello world!"}

Antwort von Swagger

Sie können feststellen, dass die API-Antwort nach 10,0037 Sekunden zurückgegeben wird und die Druckanweisung auch ungefähr zur gleichen Zeit erfolgt

Antwort vom Terminal

Unten ist die Zeit aufgeführt, die ich für 10 API-Aufrufe benötigt habe

Die durchschnittlich benötigte Zeit beträgt etwa 10.002 Sekunden

Lassen Sie uns nun die Fähigkeit zur Ausführung von Hintergrundaufgaben auf derselben API hinzufügen. Dazu können Sie die Hintergrundaufgabenfunktion in FastAPI verwenden. Erstellen Sie einfach eine Funktion namens return_response , die „Hello world!“ ausgibt. beim Aufrufen. Rufen Sie diese Funktion mit der BackgroundTasks -Methode innerhalb der API auf und das war's!

from fastapi import BackgroundTasks, FastAPI
import time

app = FastAPI()

def return_response():
    start = time.time() # start time
    time.sleep(10)
    end = time.time() # end time
    
    print({
        "response": "Hello world!", 
        "time_taken": end - start
        })

@app.post("/myApp/timer")
def read_item(background_tasks: BackgroundTasks):
    start = time.time() # start time
    background_tasks.add_task(return_response) # background processing the function
    end = time.time() # end time
    
    return {
        "status": "processing in background",
        "time_taken": end - start
        }

Antwort von Swagger

Wohingegen die Print-Anweisung nach 10 Sekunden im Terminal zu sehen ist

Antwort vom Terminal

Sie können hier sehen, dass sich die Zeit, die die API benötigt, um die Antwort zurückzugeben, von 10,002 s auf nur 0,00034 s verringert hat, während die Druckanweisung nach 10,0043 s gegeben wird

Das Erstellen einer API auf diese Weise stellt sicher, dass Ihre Antwort fast sofort erfolgt, indem die schwere Arbeit in den Hintergrund verlagert wird.

Denken Sie daran, dass die BackgroundTasks-Funktion nur dann am besten funktioniert, wenn Ihre Anwendung die API-Antwort in einer externen Quelle (MySQL, DynamoDB usw.) speichern kann und es nicht erforderlich ist, dass der Endbenutzer sie zum Zeitpunkt des Abrufs der Antwort anzeigt.

Ich hoffe, dies hilft Ihnen, Ihre API mit viel kürzerer Verarbeitungszeit neu zu strukturieren. Wir sehen uns bald mit weiteren interessanten Artikeln.