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.