Uso de servicios web con Oracle APEX
Los servicios web permiten a las aplicaciones interactuar entre sí en la web en un entorno independiente del lenguaje y de la plataforma. En un escenario de servicios web típico, una aplicación empresarial envía una solicitud a un servicio en una URL determinada mediante el protocolo HTTP. El servicio recibe la solicitud, la procesa y devuelve una respuesta. Los servicios web suelen basarse en arquitecturas de protocolo simple de acceso a objetos (SOAP) o Representational State Transfer (REST).
Mediante el uso de orígenes de datos de REST, los desarrolladores de APEX pueden acceder de forma declarativa a los servicios de datos desde una variedad de puntos finales de REST, lo que permite tanto las operaciones de lectura como de escritura. Además de admitir reglas de almacenamiento en caché inteligente para datos de REST remotos, Oracle APEX también ofrece la capacidad única de manipular directamente los resultados de los orígenes de datos de REST mediante SQL estándar del sector.
El paquete APEX_WEB_SERVICE
permite integrar otros sistemas con APEX mediante la interacción con servicios web en cualquier lugar donde pueda utilizar PL/SQL en la aplicación. El paquete contiene procedimientos y funciones para llamar a los servicios web de estilo SOAP y RESTful, y para simplificar la implantación de flujos de OAuth 2.0.
- Envío de una solicitud HTTP a un host privado con Oracle APEX
Hay varios requisitos para enviar una solicitud HTTP a un host privado desde Oracle APEX en la instancia de Autonomous Database. - Realización de llamadas externas mediante una cartera gestionada por el cliente con Oracle APEX
Oracle APEX en Autonomous Database está preconfigurado con una instancia de Oracle Wallet que funcionará con la mayoría de los puntos finales HTTPS. Si desea consumir API de REST de servidores que utilizan certificados SSL menos comunes o autofirmados, puede configurar una cartera gestionada por el cliente. - Realización de llamadas externas mediante un proxy web con Oracle APEX
La instancia de Oracle APEX no necesita un proxy web saliente para realizar llamadas de API de REST externas. Las bases de datos autónomas configuradas con un punto final privado pueden utilizar un proxy web desplegado en la VCN si lo desea. - Notas sobre el uso de servicios web con Oracle APEX
Proporciona notas para trabajar con servicios web en Oracle APEX desde una instancia de Autonomous Database.
Tema principal: Creación de aplicaciones con Oracle APEX en Autonomous Database
Envío de una solicitud HTTP a un host privado con Oracle APEX
Hay varios requisitos para enviar una solicitud HTTP a un host privado desde Oracle APEX en la instancia de Autonomous Database.
Para enviar una solicitud a un host de destino en un punto final privado o detrás de firewalls locales, se debe poder acceder al host de destino desde la VCN de Oracle Cloud Infrastructure de la base de datos de origen:
-
Asegúrese de que el punto final cumple los requisitos para enviar una solicitud HTTP, como se describe aquí: Envío de una solicitud HTTP a un host privado con UTL_HTTP.
-
Agregue la siguiente lista de control de acceso para el host deseado como ADMIN (tenga en cuenta el parámetro
private_target
):BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.example.com', ace => XS$ACE_TYPE( privilege_list => XS$NAME_LIST('http'), principal_name => APEX_APPLICATION.g_flow_schema_owner, principal_type => XS_ACL.ptype_db), private_target => true); END; /
Si define la propiedad de base de datos
ROUTE_OUTBOUND_CONNECTIONS
en PRIVATE_ENDPOINT
, no es necesario definir listas de control de acceso para hosts individuales para acceder a ellas desde APEX. Consulte Seguridad mejorada para conexiones salientes con puntos finales privados para obtener más información.
Tema principal: Uso de servicios web con Oracle APEX
Realización de llamadas externas mediante una cartera gestionada por el cliente con Oracle APEX
Oracle APEX en Autonomous Database está preconfigurado con una Oracle Wallet que funcionará con la mayoría de los puntos finales HTTPS. Si desea consumir API de REST de servidores que utilizan certificados SSL menos comunes o autofirmados, puede configurar una cartera gestionada por el cliente.
Oracle APEX en Autonomous Database está preconfigurado con una instancia de Oracle Wallet que contiene más de 90 de los certificados SSL intermedios y raíz de confianza más comunes. El paquete APEX_WEB_SERVICE
aprovecha automáticamente esta instancia de Oracle Wallet sin la configuración adicional de los desarrolladores de aplicaciones.
Si desea consumir API de REST de servidores que utilizan certificados SSL menos comunes o autofirmados, puede configurar una cartera gestionada por el cliente. En primer lugar, siga las instrucciones de configuración y despliegue de Requisitos para utilizar una cartera gestionada por el cliente con llamadas externas. Después de desplegar la cartera en Autonomous Database, otorgue READ
en el objeto de directorio que contiene la cartera al esquema de plataforma APEX como ADMIN
:
BEGIN
execute immediate 'grant READ on directory WALLET_DIR to ' ||
APEX_APPLICATION.g_flow_schema_owner;
END;
A continuación, al hacer referencia a la cartera en llamadas de API APEX_WEB_SERVICE
, asegúrese de utilizar el prefijo DIR:
en lugar del prefijo FILE:
habitual. Por ejemplo:
l_resp := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
p_url => 'https://www.example.com/',
p_http_method => 'GET',
p_wallet_path => 'DIR:WALLET_DIR'
);
También puede configurar esta cartera como valor por defecto para toda la instancia de Oracle APEX en Servicios de administración de APEX seleccionando Gestionar instancia → Valores de instancia → Cartera → Ruta de cartera o definiendo el parámetro de instancia WALLET_PATH
.
Para volver a la cartera preconfigurada, defina WALLET_PATH
en un valor vacío.
Consulte Acceso a los servicios de administración de Oracle APEX para obtener más información.
Tema principal: Uso de servicios web con Oracle APEX
Realizar llamadas externas mediante un proxy web con Oracle APEX
La instancia de Oracle APEX no necesita un proxy web saliente para realizar llamadas a API de REST externas. Las bases de datos autónomas configuradas con un punto final privado pueden utilizar un proxy web desplegado en la VCN si lo desea.
Para utilizar un proxy web, defina la siguiente lista de control de acceso como ADMIN
:
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'www-proxy.example.com',
lower_port => 80,
ace => XS$ACE_TYPE(
privilege_list => XS$NAME_LIST('HTTP_PROXY'),
principal_name => APEX_APPLICATION.g_flow_schema_owner,
principal_type => XS_ACL.ptype_db),
private_target => true);
END;
/
A continuación, puede utilizar el proxy web en las llamadas de API APEX_WEB_SERVICE
:
l_resp := APEX_WEB_SERVICE.MAKE_REST_REQUEST(
p_url => 'https://www.example.com/',
p_http_method => 'GET',
p_proxy_override => 'www-proxy.example.com:80'
);
También puede configurar un proxy web en el nivel de aplicación definiendo la propiedad Servidor proxy en la página Componentes compartidos → Definición de aplicación → Propiedades, o en el nivel de instancia en APEX Administration Services desde Gestionar instancia → Seguridad → Proxy de instancia.
Si intenta utilizar un proxy web cuando Autonomous Database está configurado con un punto final público, se devuelve un error:
ORA-01031: insufficient privileges
Consulte Envío de una solicitud HTTP a un host privado con UTL_HTTP para obtener más información sobre los proxies al utilizar la API UTL_HTTP
.
Consulte Acceso a los servicios de administración de Oracle APEX para obtener más información.
Tema principal: Uso de servicios web con Oracle APEX
Notas sobre el uso de servicios web con Oracle APEX
Proporciona notas para trabajar con servicios web en Oracle APEX desde una instancia de Autonomous Database.
Tenga en cuenta lo siguiente al trabajar con servicios web en Oracle APEX:
-
Todos los servicios web deben estar protegidos. Solo se admiten servicios HTTPS en el puerto por defecto (443). No se permiten las conexiones mediante direcciones IP.
-
Cada instancia de Autonomous Database está preconfigurada con una lista de control de acceso de red (ACL) para permitir llamadas de servicio web salientes desde Oracle APEX a puntos finales públicos.
-
Las solicitudes
APEX_WEB_SERVICE
no respetan la cartera personalizada definida con las llamadas de APIUTL_HTTP.SET_WALLET
. -
Existe un límite por defecto de 1 000 solicitudes de servicio web salientes por espacio de trabajo de APEX en un período sucesivo de 24 horas (esto se aplica a las nuevas bases de datos, algunas bases de datos antiguas pueden tener un límite mayor). Si se alcanza el límite de llamadas de servicio web salientes, se emite la siguiente excepción SQL en la solicitud posterior y se bloquea la solicitud:
ORA-20001: You have exceeded the maximum number of web service requests per workspace. Please contact your administrator.
Puede aumentar o eliminar el límite por defecto de solicitudes de servicio web de salida. Para ello, defina un valor para el parámetro de instancia
MAX_WEBSERVICE_REQUESTS
o actualice el atributo Máximo de solicitudes de servicio web en Servicios de administración de APEX. Por ejemplo, para cambiar el límite a 250 000, conecte a la base de datos como ADMIN mediante un cliente SQL y ejecute lo siguiente:BEGIN APEX_INSTANCE_ADMIN.SET_PARAMETER('MAX_WEBSERVICE_REQUESTS', '250000'); COMMIT; END; /
Para obtener más información, consulte:
-
APEX_WEB_SERVICE en Referencia de API de Oracle APEX
-
Managing REST Data Sources en Oracle APEX App Builder User's Guide
Tema principal: Uso de servicios web con Oracle APEX