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.
Ein GET-Aufruf kann beliebig oft durchgeführt werden, da dieser Aufruf nur Daten abfragt und daher keine Daten am Server verändert.

"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.
Ein POST-Aufruf kann Daten am Server verändern bzw. einen Prozess am Server starten.

"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.
Ein PUT-Aufruf erzeugt entweder neue Daten am Server oder verändert bestehende Ressourcen.

"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.
Ein DELETE-Aufruf löscht vorhandene Ressourcen vom Server.

 

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