Web services en Oracle Apex
Web services en Oracle Apex son la mejor opción para intercambiar información entra sistemas de una forma fácil y sencilla es la conclusión que debería tener esta entrada, pero el camino siempre es lo que más se disfruta porque no es tan sencillo como parece, hay que gestionar permisos y somos dependientes de que la otra aplicación funcione correctamente, en el vídeo muestro algunos ejemplos de conexión que comparto en esta entrada.
No olvides lo importante que es crear el Access Control List para poder darle permisos a tu usuario de base de datos para conectarse y resolver peticiones a un host determinado y también considerar agregar a un wallet el certificado en caso de que desees conectarte a un sitio que tenga certificado SSL de otra forma no podrás conectarte 🤨 y claro que debe ser creado con un usuario con permisos de sys.
En mi experiencia he usado web services para compartir información entre sistemas en lugar de usar DB Links, es más práctico y fácil, prefiero usar JSON a XML por lo simple que es leerlos y además que pesan mucho menos, no digo que no se debe usar XML pero en lo personal me gusta más JSON.
Vídeo
Código para guardar JSON en un blob
SET DEFINE OFF; declare l_estatus NUMBER := 3; -- PDF Generado l_request SYS.utl_http.req; l_response SYS.utl_http.resp; l_download RAW(32767); l_url_o varchar2(4000) := '//apexdevtesting.com:8080/ords/udemy/hr/employees/'; l_url varchar2(200); l_plain varchar(4000); begin l_request := SYS.utl_http.begin_request(l_url_o || 7566); SYS.utl_http.set_header(l_request, 'User-Agent', 'Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0'); l_response := SYS.utl_http.get_response(l_request); LOOP BEGIN SYS.utl_http.read_raw(l_response, l_download); l_plain := UTL_RAW.CAST_TO_VARCHAR2 (l_download) ; DBMS_OUTPUT.put_line(l_plain); INSERT INTO j_purchaseorder VALUES (SYS_GUID(), SYSTIMESTAMP, l_plain); -- dbms_lob.writeappend(l_file, utl_raw.LENGTH(l_download), l_download); EXCEPTION WHEN SYS.utl_http.end_of_body THEN EXIT; END; END LOOP; commit; SYS.utl_http.end_response(l_response); end;
Recuperar archivo PDF de jasper (jasper es una interface restful y se puede contemplar como web services).
declare l_url VARCHAR2(3000) := '//apexdevtesting.com:8081/jasperserver/rest_v2/reports/reports/Blank_Letter.pdf?STATUS='; l_request SYS.utl_http.req; l_response SYS.utl_http.resp; l_download RAW(32767); l_file BLOB; l_mimetype VARCHAR2(50) := 'application/pdf'; l_charset VARCHAR2(50) := 'UTF8'; l_filename varchar2(50) := 'archivo_'||ARCHIVOS_CARGADOS_SEQ.nextval||'.pdf'; begin l_request := SYS.utl_http.begin_request(l_url ||'ASSIGNED&'||'j_username=jasperadmin'||'&'||'j_password=jasperadmin' ); SYS.utl_http.set_header(l_request, 'User-Agent', 'Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0'); l_response := SYS.utl_http.get_response(l_request); dbms_lob.createtemporary(l_file, TRUE, dbms_lob.SESSION); LOOP BEGIN SYS.utl_http.read_raw(l_response, l_download); dbms_lob.writeappend(l_file, utl_raw.LENGTH(l_download), l_download); INSERT INTO j_test2 VALUES (SYS_GUID(), SYSTIMESTAMP, l_file, l_mimetype, l_filename); EXCEPTION WHEN SYS.utl_http.end_of_body THEN EXIT; END; END LOOP; SYS.utl_http.end_response(l_response); commit; end;
Ligas de interés
https://docs.oracle.com/database/121/SQLRF/functions092.htm#SQLRF56973
https://www.oracle.com/technetwork/es/developer-tools/apex-listener/overview/index.html
Post sugerido:
JS, AJAX, PROMESAS + PLSQL en APEX
Curso gratis de Oracle Apex en Español
Por favor si te sirvió el vídeo, invítame un café dando clic a los anuncios, me ayuda muchísimo para no dormir y poder hacer más posts