Skip to Main Content

 

Auswahl  

Komplett Übersicht aller Oracle Tipps

REST Beispiele mit apex_web_service 

Oracle
APEX:PL/SQL:REST
RDBMS 19.3:RDBMS 21.1:ORDS 20.3
29.04.20 (MP)
14.08.24(MP)
Oracle apex_web_service Beispiele, APEX

Passende Schulungen zum Thema

Nachdem das Thema REST immer mehr an Schwung gewinnt, wird es Zeit darüber einen Tipp zu schreiben.
Wir haben aus eigener Erfahrung lange im Internet gesucht und nur selten etwas gefunden.
Deswegen haben wir ein paar Beispiele gesammelt:

Der Einfachheit halber, wird mit nicht mit SSL Verschlüsselung gearbeitet, ansonsten muss noch ein Wallet eingerichtet werden

1. CLOB Übertragen (upload)

l_clob:=APEX_WEB_SERVICE.MAKE_REST_REQUEST(      
 p_url=>'http://www.muniqsoft-training.de/ords/my_rest/muso/putCLOB',
 p_http_method        =>'PUT',
 p_transfer_timeout   =>720,
 p_username           =>'rest_user',
 p_password           =>'rest_password'
 p_body               =>text_lob,  --CLOB Datentyp übertragen         
);


Hinweis: p_body darf nur bei PUT und POST Request übertragen werden !

Auf dem Zielserver dann einen Rest-Service anlegen (Typ PUT):

BEGIN
 my_proc(:body_text);
END;


Die Procedure my_proc könnte dann wie folgt aussehen:

CREATE OR REPLACE PROCEDURE my_proc (p_clob IN CLOB)
IS
...
BEGIN
...
END;


2. BLOB übertragen (upload)

l_clob:=APEX_WEB_SERVICE.MAKE_REST_REQUEST(      
p_url=>'http://www.muniqsoft-training.de/ords/my_rest/muso/putBLOB',
 p_http_method      =>'PUT',
 p_transfer_timeout =>720,
 p_username         =>'rest_user',
 p_password         =>'rest_password'
 p_body_blob        =>pdf_lob, --BLOB Datentyp übertragen 
);


Auf dem Zielserver dann einen Rest-Service anlegen (Typ PUT):

BEGIN
my_proc(:body);
END;


Die Procedure my_proc könnte dann wie folgt aussehen:

CREATE OR REPLACE PROCEDURE my_proc (p_blob IN BLOB)
IS
...
BEGIN
...
END;


3. Zwei Parameter übertragen (Upload)

DECLARE
l_clob CLOB;
BEGIN
    apex_web_service.g_request_headers.delete();
     apex_web_service.g_request_headers(1).name  := 'Content-Type';  
     apex_web_service.g_request_headers(1).value := 'application/octet-stream'; --'application/x-www-form-urlencoded';
     apex_web_service.g_request_headers(2).name  := 'PARAMETER_A';  
     apex_web_service.g_request_headers(2).value := '12345';
     apex_web_service.g_request_headers(3).name  := 'PARAMETER_B';  
     apex_web_service.g_request_headers(3).value := to_char(sysdate,'DD.MM.YYYY');
l_clob:=APEX_WEB_SERVICE.MAKE_REST_REQUEST(
        p_url=>'http://www.muniqsoft-training.de/ords/my_rest/muso/putDATA',
        p_http_method       =>'PUT',
        p_transfer_timeout  =>180,
        p_username          =>'rest_user',
        p_password          =>'rest_passwort',
        p_body              =>my_clob_text);
 if apex_web_service.g_status_code = 200 then
    dbms_output.put_line('Übertragung erfolgreich abgeschlossen.');
 else
    dbms_output.put_line('Fehler aufgetreten: ' || apex_web_service.g_status_code);
 end if;
END;


Auf dem Zielserver dann wieder ein REST Service anlegen (TYP: PUT)

BEGIN
:status:=my_func(
p_parameter1=>:PARAMETER_A,
p_parameter1=>:PARAMETER_A,
p_clob=>:BODY_TEXT);
END;


REST Parameter:

NameBind-ParameterZugriffm.QuelltypDatentyp
PARAMETER_APARAMETER_AINHTTP HEADERSTRING
PARAMETER_BPARAMETER_BINHTTP HEADERSTRING
STATUSSTATUSOUTRESPONSESTRING


Die Funktion könnte dann wie folgt aussehen:

CREATE OR REPLACE FUNCTION my_func(
p_parameter1 IN VARCHAR2,
p_parameter2 IN VARCHAR2,
p_clob IN CLOB) RETURN VARCHAR2
IS
BEGIN
...
RETURN 200;
EXCEPTION WHEN OTHERS THEN
  RETURN 500;
END;

Wenn Sie Parameter aus dem Rest-Service zurückgeben möchten, definieren Sie sie einfach als OUT (wie Status im obigen Beispiel)

und können Sie dann nach dem apex_web_service Aufruf wieder abfangen mit:

for i in 1..apex_web_service.g_headers.count loop
           dbms_output.put_line(
           apex_web_service.g_headers(i).name||'='||apex_web_service.g_headers(i).value);
end loop;