HTTP-Klassen: Ein neuer Weg zur Durchführung asynchroner HTTP-Anfragen

Automatisch übersetzt von Deepl

In unserem ständigen Bestreben, die 4D Syntax und Funktionalitäten zu verbessern, haben wir beschlossen, Ihnen neue Befehle zur Durchführung von HTTP-Anfragen in 4D zur Verfügung zu stellen: die HTTP-Klassen. Sie sind direkt in 4D v19 R6 verfügbar und werden in den kommenden Versionen viele Verbesserungen aufweisen. Lassen Sie mich Ihnen zeigen, wie Sie sie sofort nutzen können.

HDI Neue HTTP-Klassen in Aktion

Einfache Anfrage

Die grundlegende Syntax zum Senden einer HTTP-Anfrage ist sehr einfach:

$request:=4D.HTTPRequest.new($url).wait()
If ($request.response#Null)
	// The code to handle the request response.
Else
	// The code to handle errors.
End if

Der Aufruf von 4D.HTTPRequest.new instanziiert die Anfrage und sendet sie. Das Ergebnis der Anfrage wird im Response-Attribut der HTTPRequest abgerufen.
Zu diesem Zeitpunkt werden Sie sich fragen, was dieser Aufruf von wait dort zu suchen hat. Die neuen HTTP-Klassen sind für die asynchrone Verwendung gedacht. Sie müssen keinen speziellen Prozess erstellen, um Ihre Anfrage zu hosten; Sie können jetzt eine Anfrage mitten in einer Methode senden, ohne sie zu blockieren. Wenn Sie jedoch das alte synchrone Verhalten beibehalten wollen, können Sie wait aufrufen, um auf den Abschluss der Anfrage zu warten.

Asynchrone Anfrage

Schauen wir uns nun an, wie man eine wirklich asynchrone Anfrage stellt:

$request:=4D.HTTPRequest.new($url) 
// The code that will be executed while the request is not complete.

If ($request.terminated) // Is the request complete?
	If ($request.response#Null)
		// The code to handle the request response.
	Else
		// The code to handle errors.
	End if
End if

So sieht es aus, ganz einfach. Sie können nun Ihren Code ausführen, während Ihre Anfrage gesendet wird, und so von einer optimalen Leistung profitieren.

Asynchrone Anfrage mit Rückrufen

Das letzte Beispiel wird etwas komplizierter sein. Die neue Syntax ermöglicht es Ihnen, Anfragen über Rückrufe zu bearbeiten. Normalerweise schreiben Sie eine neue Klasse, um Ihre HTTPRequest zu behandeln:

Class constructor()

Function onResponse($request : 4D.HTTPRequest)
// The code to handle the request response.

Function onError($request : 4D.HTTPRequest)
// The code to handle errors.

Diese Klasse verwenden Sie dann zur automatischen Bearbeitung Ihrer Anfragen:

$callbacks:=cs.myClassToHandleHTTPRequests.new()
$request:=4D.HTTPRequest.new($url; $callbacks)

Sie brauchen die Anfrage in Ihrer Methode nicht zu behandeln; das Anfrageergebnis wird dank der onResponse- und onError-Callbacks behandelt, sobald eine Antwort verfügbar ist. Sie müssen nur auf eines achten: Die Callbacks werden im selben Prozess wie Ihre Methode aufgerufen. Sie werden das Ergebnis der Anfrage verpassen, wenn Sie den Prozess beenden, bevor sie aufgerufen werden. Vergewissern Sie sich am Ende Ihrer Methode, dass alle Ihre Anfragen abgeschlossen wurden.

Beispiel

Für das letzte Beispiel wollen wir uns eine reale Situation ansehen. Wir werden eine Trivia REST API anfordern und dem Benutzer eine zufällige Frage stellen. Hier ist die Klasse, die die Anfrage bearbeitet:

Class constructor()

Function onResponse($request : 4D.HTTPRequest)
If ($request.response.status=200)
	ALERT("Question: "+String($request.response.body[0].question))
	ALERT("Answer: "+String($request.response.body[0].answer))
Else 
	This.onError($request)
End if 

Function onError($request : 4D.HTTPRequest)
ALERT("Error when loading the question")

Und dann können Sie Ihre Anfrage senden:

$callbacks:=cs.TriviaRequestClass.new()
$request:=4D.HTTPRequest.new("http://jservice.io/api/random"; $callbacks)

Viel Spaß beim Beantworten zufälliger Quizfragen!

Wie kann ich

Schönes Wetter in Frankreich heute

Zur Veranschaulichung dieser Funktion sehen Sie hier ein Demo-Beispiel, das einen REST-Dienst für die Wettervorhersage abfragt. Sie werden all diese verschiedenen Anfragen in Aktion sehen, um Ihnen die beste Wettervorhersage zu liefern, solange Sie in Frankreich leben (oder planen, dorthin zu reisen).

Dies ist der erste Blog-Beitrag über die neuen HTTP-Klassen. Seien Sie sicher, dass dies ein Teil einer langen Serie ist, da neue HTTP-Funktionalitäten bald veröffentlicht werden!

Wenn Sie Kommentare haben, teilen Sie uns diese wie immer im offiziellen 4D Forum mit.

Nicolas Brachfogel
Product Owner & Senior Developer - Nicolas Brachfogel kam 2017 als Senior Developer (4D Server und Netzwerke) zu 4D. Als Product Owner, der die Freigabe von Apple Silicon verwaltet, ist er für das Schreiben von User Stories und deren Umsetzung in funktionale Spezifikationen zuständig und stellt sicher, dass die Implementierungen der Funktionen den Kundenanforderungen entsprechen. Nicolas ist Absolvent des Institut Supérieur d'Informatique Appliquée (INSIA) und begann seine Karriere als Softwareentwickler im Jahr 2001. Nachdem er mehrere Jahre in Java und C++ programmiert hatte, spezialisierte er sich auf die Client-Server-Entwicklung für Videospielunternehmen. Als Server-Entwickler/Architekt arbeitete er erfolgreich an den Server-Architekturen vieler Spiele (Dofus Arena, Drakerz, Trivial Pursuit Go!).