Schnittstellenabschnitt für Zugriff auf REST-Service eines anderen Herstellers

In EGL können Sie mit dem folgenden Schnittstellenabschnitt auf den REST-Service eines anderen Herstellers zugreifen.

interface IRest
   function invokeGet(reqURL string in) returns(string)  
      {@getRest {uriTemplate="{reqURL}"}};
   function invokePost(reqURL string in, representation string in) returns(string)
      {@postRest {uriTemplate="{reqURL}"}};
   function invokePut(reqURL string in, representation string in) returns(string)
      {@putRest {uriTemplate="{reqURL}"}};
   function invokeDelete(reqURL string in, representation string in) returns(string) 
      {@deleteRest {uriTemplate="{reqURL}"}};
end

Wenn Sie diesen Schnittstellenabschnitt unverändert übernehmen, müssen Sie keinen neuen schreiben. Die erforderlichen Schritte zur Codierung der Serviceaufrufanweisung sind jedoch anders.

Im Folgenden ist ein Beispiel für einen asynchronen Zugriff aufgeführt, der in Rich-UI-Anwendungen vorkommen kann:
myVar IRest;
myResource String = ServiceLib.convertToJson(myRec);
call myVar.invokePost("http://www.example.com", myResource) 
    returning to myCallbackfunction;
Im Folgenden ist ein Beispiel für einen synchronen Zugriff aufgeführt, der anderswo auftreten kann:
myString STRING:
myVar IRest;
myResource String = ServiceLib.convertToJson(myRec);
myString = myVar.invokePost("http://www.example.com", myResource);
Unterschiede zwischen dem synchronen und asynchronen Zugriff:
  • Es werden nicht mehrere Argumente zur Verwendung als Substitutionswerte übergeben. Es gibt verschiedene Möglichkeiten zur Erstellung des URI:
    • Der gesamte URI kann übergeben werden (siehe Beispiele).
    • Der gesamte URI kann außerdem in der Variablendeklaration angegeben werden (siehe folgendes Beispiel):
      myVar IRest {@RESTService {baseURI="http://www.example.com"};
      myResource String = ServiceLib.convertToJSON(myRec);
      call myVar.invokePost("", myResource) 
          returning to myCallbackfunction; 
    • Die Variablendeklaration stellt in jedem Fall den Basis-URI bereit und gibt dann einen relativen URI weiter.
  • Beim Aufruf eines Service mit den Methoden POST, PUT oder DELETE müssen Sie sicherstellen, dass die Darstellung (eine Zeichenfolge) in dem Format erfolgt, das für den REST-Service erforderlich ist. Die folgenden Funktionen geben die erforderlichen Formate an:
    • Für JSON-Konvertierung: serviceLib.convertToJSON
    • Für XML-Konvertierung: XMLLib.convertToXML
Sie benötigen möglicherweise einen Funktionsprototyp, der über ein anderes Merkmal verfügt, wie beispielsweise eine DELETE-Operation, die keine Übergabe einer Darstellung erforderlich macht. In diesem Fall erstellen Sie einen vergleichbaren Schnittstellenabschnitt, ändern aber den Funktionsprototyp InvokeDelete oder fügen einen Prototyp mit einem anderen Namen hinzu. Beispiel für einen geänderten Prototyp:
function invokeDelete(reqURL string in) returns(string) 
   {@deleteRest {uriTemplate="{reqURL}"}};