RestFullRequestAsync
value RestFullRequestAsync ( value rest, string strHttpVerb, string strUriPath, string strBodyText / array arrBodyBytes = null );
Rückgabewert
Rückgabewert |
Beschreibung |
value |
Das aktive TASK-Objekt das zur weiteren Verarbeitung der REST-Anfrage angelegt und gestartet wurde. |
FALSE / false / 0 |
Das REST-Anfrage ist fehlgeschlagen. Ist das REST-Objekt rest gültig, kann die Ursache kann mit RestGetLastError bzw. RestGetStatusCode ausgelesen werden. |
Parameter
rest
Das gültige REST-Objekt, des REST-Servers an dem die vollständige REST-Abfrage durchgeführt werden soll.
strHttpVerb
Gibt die Methode an, die der REST-Server zur Verarbeitung der Anfrage verwenden soll.
Wert |
Beschreibung |
"GET" |
Unter
die Angabe der URI strUriPath
wird eine Ressource (zum Beispiel eine JSON-Antwort) vom Server
angefordert. Sind strBodyText/arrBodyBytes
Inhalte vorhanden, so werden diese mitversandt. |
"POST" |
Unter
die Angabe der URI strUriPath
werden Daten zur weiteren Verarbeitung an den Server verschickt.
Sind strBodyText/arrBodyBytes
Inhalte vorhanden, so werden diese mitversandt. |
"PUT" |
Unter
die Angabe der URI strUriPath
werden Daten zur weiteren Verarbeitung an den Server verschickt.
Sind strBodyText/arrBodyBytes
Inhalte vorhanden, so werden diese mitversandt. |
"DELETE" |
Unter
die Angabe der URI strUriPath
werden Daten zur weiteren Verarbeitung an den Server verschickt.
Sind strBodyText/arrBodyBytes
Inhalte vorhanden, so werden diese mitversandt. |
strBodyText
Der Body als Zeichenkette, dessen Inhalt an die Resource strUriPath des Servers gesandt werden soll. Soll kein Body übertragen werden, muss dieser Parameter ein Leerstring "" oder null sein.
arrBodyBytes
Der Body als array mit Byteinhalt, dessen Inhalt an die Resource strUriPath des Servers gesandt werden soll. Soll kein Body übertragen werden, muss dieser Parameter ein Leerstring "" oder null sein.
Bemerkungen
Sendet asynchron eine vollständige REST-Anfrage an den über das REST-Objekt rest erreichbaren REST-Server. Die Anfrage setzt sich aus dem eventuell vorher angelegten Header, dem hier übergebenen URI strUriPath und dem Body strBodyText/arrBodyBytes zusammen. Der Body der Anfrage ist optional - ist kein Body notwendig, genügt die Übergabe eines Leerstrings "" oder einer null für strBodyText/arrBodyBytes.
Der Request erfolgt asynchron in einem eigenen Task (in einem Hintergrundprozess), sodass die Funktion nicht wartet bis der Datenaustausch abgeschlossen wurde - die Funktion RestFullRequestAsync kehrt nach dem Aufruf sofort zurück. Die eigentlichen Abfragen, ob der Request erfolgreich zum REST-Server übertragen, dort erfolgreich entgegengenommen werden konnte und ob der REST-Server eine Antwort zurückgeschickt hat, können nur über die Task-Funktionen erfolgen, denen das hier zurückgegebene TASK-Objekt übergeben wird.
Das angelegte TASK-Objekt ruft intern
nacheinander die Funktionen RestSendRequest,
RestReadResponseHeader
und RestReadResponse
in einem eigenen Hintergrundprozess auf.
Beispiel
////////////////////////////////////////////////////////////////////// //Globale Variablen value rest = 0; value task = 0; value RestWorker = 0; value REST_CONNECT_START = 0; value REST_CONNECT_RUNNING = 10; value REST_REQUEST_START = 20; value REST_REQUEST_RUNNING = 30; value REST_REQUEST_DONE = 40; value REST_ERROR = -100; value REST_STANDBY = -1; string strLastError; string strResponse; ////////////////////////////////////////////////////////////////////// //_MainCycle // ////////////////////////////////////////////////////////////////////// switch (RestWorker) case REST_CONNECT_START: //ip.jsontest.com liefert als Antwort die IP-Adresse des anfragenden Clients task = RestConnectAsync(rest, "http://ip.jsontest.com"); if (task == NULL) RestWorker = REST_ERROR; break; end RestWorker = REST_CONNECT_RUNNING; break; case REST_CONNECT_RUNNING: if (TaskFinished(task)) if(!TaskSuccessful(task)) RestWorker = REST_ERROR; break; else RestWorker = REST_REQUEST_START; end TaskClose(task); end break; case REST_REQUEST_START: task = RestFullRequestAsync(rest, "GET", "/"); if (task == NULL) RestWorker = REST_ERROR; break; end RestWorker = REST_REQUEST_RUNNING; break; case REST_REQUEST_RUNNING: if (TaskFinished(task)) if(!TaskSuccessful(task)) RestWorker = REST_ERROR; break; else TaskGetResultString(task, strResponse); strResponse = JsonExpand(strResponse); //Inhalt von strResponse: //{ // "ip": "82.165.12.98" //} RestWorker = REST_REQUEST_DONE; end end break; case REST_REQUEST_DONE: RestDisconnect(rest); RestWorker = REST_STANDBY; break; case REST_ERROR: if (rest != NULL) if (task != NULL) strLastError = TaskGetLastError(task); else strLastError = RestGetLastError(rest); end RestDisconnect(rest); end RestWorker = REST_STANDBY; break; end
Die REST-Funktionen, Die TASK-Funktionen
Siehe auch RestConnect, RestConnectAsync, RestDisconnect, RestFullRequest, RestGetLastError, TaskClose, TaskFinished, TaskSuccessful, TaskGetLastError, TaskGetResultString