Chiama Web Service da Autonomous Database
Descrive le opzioni per chiamare i servizi Web da Autonomous Database.
Sono disponibili diverse opzioni per chiamare i servizi Web da Autonomous Database, tra cui:
-
Utilizzare le API REST
DBMS_CLOUD
: la funzioneDBMS_CLOUD.SEND_REQUEST
avvia una richiesta HTTP, ottiene la risposta e termina la risposta. Questa funzione fornisce un workflow per l'invio di una richiesta API REST cloud con argomenti e la funzione restituisce un codice di risposta e un payload. Per ulteriori informazioni, vedere SEND_REQUEST Funzione e procedura. -
Utilizzare Oracle APEX: è possibile interagire con i servizi Web sia in stile SOAP che in stile RESTful da APEX nell'istanza di Autonomous Database. Per ulteriori informazioni, vedere Utilizzare i servizi Web con Oracle APEX.
-
Utilizzare
UTL_HTTP
per inviare una richiesta a un sito pubblico. Per ulteriori informazioni, vedere Sottomettere una richiesta HTTP a un host pubblico. -
Utilizzare
UTL_HTTP
per inviare una richiesta a un sito privato. Per ulteriori informazioni, vedere Sottomettere una richiesta HTTP a un host privato.Quando l'istanza di Autonomous Database si trova in un endpoint privato, è possibile utilizzare un wallet gestito dai clienti con le procedure disponibili in
UTL_HTTP
,DBMS_LDAP
,UTL_SMTP
oUTL_TCP
. Per ulteriori informazioni, vedere Effettua chiamate esterne utilizzando un wallet gestito dal cliente.
Per informazioni sulle limitazioni per UTL_HTTP
su Autonomous Database, vedere PL/SQL Package Notes for Autonomous Database.
Temi
- Sottomettere una richiesta HTTP a un host pubblico
Fornisce i dettagli per l'utilizzo diUTL_HTTP
per sottomettere una richiesta HTTP su un host pubblico. - Sottomettere una richiesta HTTP a un host privato
Verranno descritti i passi per utilizzareUTL_HTTP
per sottomettere una richiesta HTTP su un host privato. - Inviare una richiesta HTTP a un sito privato con un proxy
Quando l'istanza di Autonomous Database si trova su un endpoint privato, è possibile utilizzare un proxy per inviare le richieste HTTP conUTL_HTTP
. - Usa oggetti credenziali per impostare l'autenticazione HTTP
Viene descritto come passare oggetti credenziali alla proceduraUTL_HTTP.SET_CREDENTIAL
. - Note per l'invio delle richieste HTTP con Oracle APEX o Database Actions
Quando si utilizza il foglio di lavoro Comandi SQL di Oracle APEX o Database Actions SQL per eseguire più comandi SQL sequenziali, i comandi possono essere eseguiti in diverse sessioni di database che non salvano lo stato di un'istruzione precedente. Questo comportamento è diverso dai client SQL desktop, ad esempio SQL*Plus e SQL Developer, che gestiscono una connessione persistente al database.
Argomento padre: task
Invia una richiesta HTTP a un host pubblico
Fornisce i dettagli per l'utilizzo di UTL_HTTP
per sottomettere una richiesta HTTP su un host pubblico.
Ad esempio, per sottomettere una richiesta HTTP per un host pubblico www.example.com, creare una lista di controllo dell'accesso per l'host:
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'www.example.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db));
END;
Quindi invia la richiesta HTTP:
SELECT UTL_HTTP.REQUEST(url => 'https://www.example.com/') FROM dual;
Se l'istanza di Autonomous Database si trova in un endpoint privato e si desidera che le chiamate
UTL_HTTP
agli host pubblici siano soggette alle regole di uscita della VCN dell'endpoint privato, impostare la proprietà del database ROUTE_OUTBOUND_CONNECTIONS
su PRIVATE_ENDPOINT
.
Per ulteriori informazioni, vedere Maggiore sicurezza per le connessioni in uscita con endpoint privati.
Per informazioni sulle limitazioni per UTL_HTTP
su Autonomous Database, vedere PL/SQL Package Notes for Autonomous Database.
Argomento padre: Chiama servizi Web da Autonomous Database
Invia una richiesta HTTP a un host privato
Descrive i passi per utilizzare UTL_HTTP
per inviare una richiesta HTTP su un host privato.
Per sottomettere una richiesta a un host di destinazione in un endpoint privato, l'host di destinazione deve essere accessibile dalla VCN Oracle Cloud Infrastructure del database di origine. Ad esempio, è possibile connettersi all'host di destinazione quando:
-
Sia il database di origine che l'host di destinazione si trovano nella stessa VCN di Oracle Cloud Infrastructure.
-
Il database di origine e l'host di destinazione si trovano in diverse VCN di Oracle Cloud Infrastructure abbinate.
-
L'host di destinazione è una rete in locale connessa alla VCN di Oracle Cloud Infrastructure del database di origine utilizzando FastConnect o VPN.
Puoi anche effettuare chiamate UTL_HTTP
con un wallet gestito dal cliente quando Autonomous Database si trova in un endpoint privato. Per ulteriori informazioni, vedere Effettua chiamate esterne utilizzando un wallet gestito dal cliente.
Per effettuare una richiesta UTL_HTTP
a una destinazione in un endpoint privato, effettuare le operazioni riportate di seguito.
-
Creare una lista di controllo dell'accesso per l'host.
Ad esempio:
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.example.com', ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db), private_target => TRUE); END; /
Come illustrato in questo esempio, quando si crea una lista di controllo dell'accesso per l'host, specificare il parametro
private_target
con il valoreTRUE
.Nota
Se si impostaROUTE_OUTBOUND_CONNECTIONS
suPRIVATE_ENDPOINT
, l'impostazione del parametroprivate_target
suTRUE
non è richiesta in questa API. Per ulteriori informazioni, vedere Maggiore sicurezza per le connessioni in uscita con endpoint privati. -
Sottomettere la richiesta HTTP:
SELECT UTL_HTTP.REQUEST( url => 'https://www.example.com/', https_host => 'www.example.com') FROM dual;
Per informazioni sulle limitazioni per UTL_HTTP
su Autonomous Database, vedere PL/SQL Package Notes for Autonomous Database.
Argomento padre: Chiama servizi Web da Autonomous Database
Invia una richiesta HTTP a un sito privato con un proxy
Quando l'istanza di Autonomous Database si trova in un endpoint privato, è possibile utilizzare un proxy per inviare le richieste HTTP con UTL_HTTP
.
Quando l'istanza di Autonomous Database si trova in un endpoint privato, per utilizzare UTL_HTTP
con un proxy di destinazione, il proxy di destinazione deve essere accessibile dalla VCN Oracle Cloud Infrastructure del database di origine.
Ad esempio, è possibile connettersi utilizzando un proxy nei seguenti casi:
-
Sia il database di origine che il server proxy si trovano nella stessa VCN di Oracle Cloud Infrastructure.
-
Il database di origine e il server proxy si trovano in diverse VCN di Oracle Cloud Infrastructure abbinate.
-
Il server proxy è una rete in locale connessa alla VCN di Oracle Cloud Infrastructure del database di origine utilizzando FastConnect o VPN.
È inoltre possibile effettuare chiamate UTL_HTTP
utilizzando un wallet gestito dal cliente. Per ulteriori informazioni, vedere Effettua chiamate esterne utilizzando un wallet gestito dal cliente.
Per utilizzare un server proxy con UTL_HTTP
:
Note per l'impostazione di un server proxy con UTL_HTTP.SET_PROXY
:
-
Le richieste
DBMS_CLOUD
non soddisfano il server proxy impostato conUTL_HTTP.SET_PROXY
. Sono inclusiDBMS_CLOUD.SEND_REQUEST
e tutti gli accessi allo storage degli oggetti per le tabelle esterneDBMS_CLOUD
definite conDBMS_CLOUD.CREATE_EXTERNAL_TABLE
,DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE
oDBMS_CLOUD.CREATE_HYBRID_PART_TABLE
. -
Le richieste
APEX_WEB_SERVICE
non soddisfano il server proxy impostato conUTL_HTTP.SET_PROXY
.
Per informazioni sulle limitazioni per UTL_HTTP
su Autonomous Database, vedere PL/SQL Package Notes for Autonomous Database.
Argomento padre: Chiama servizi Web da Autonomous Database
Usa oggetti credenziali per impostare l'autenticazione HTTP
Descrive come passare oggetti credenziali alla procedura UTL_HTTP.SET_CREDENTIAL
.
La procedura UTL_HTTP.SET_CREDENTIAL
imposta le informazioni di autenticazione HTTP nell'intestazione della richiesta HTTP. Il server Web richiede queste informazioni per autorizzare la richiesta.
La procedura UTL_HTTP.SET_CREDENTIAL
consente di passare gli oggetti delle credenziali per impostare l'autenticazione HTTP. Gli oggetti delle credenziali sono oggetti dello schema, pertanto possono essere accessibili solo dagli utenti con privilegi e consentono di configurare i privilegi a livello di schema per controllare le credenziali. Il passaggio degli oggetti delle credenziali è un modo appropriato e sicuro per memorizzare e gestire nome utente/password/chiavi da utilizzare per l'autenticazione.
La procedura UTL_HTTP.SET_CREDENTIAL
è un'alternativa sicura e conveniente alla procedura UTL_HTTP.SET_AUTHENTICATION
.
Esempio
...
UTL_HTTP.SET_AUTHENTICATION (l_http_request, 'web_app_user', 'xxxxxxxxxxxx');
...
Come illustrato nell'esempio precedente, quando si richiama la procedura SET_AUTHENTICATION
, è necessario passare il nome utente/password in testo non codificato come parte dei parametri formali PL/SQL. Potrebbe essere necessario incorporare il nome utente/password in vari script di automazione o cron PL/SQL. Il passaggio di password in chiaro è un problema di conformità che viene risolto nella procedura UTL_HTTP.SET_CREDENTIAL
.
Per ulteriori informazioni, vedere SET_AUTHENTICATION Procedura e Procedura SET_AUTHENTICATION_FROM_WALLET.
Sintassi UTL_HTTP.SET_CREDENTIAL
UTL_HTTP.SET_CREDENTIAL (
r IN OUT NOCOPY req,
credential IN VARCHAR2,
scheme IN VARCHAR2 DEFAULT 'Basic',
for_proxy IN BOOLEAN DEFAULT FALSE);
Esempio di passaggio di un oggetto credenziale nella procedura SET_CREDENTIAL
:
-
Crea un oggetto credenziali:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'HTTP_CRED', username => 'web_app_user', password => '<password>' ); END;
Questo crea un oggetto credenziali che crea una coppia nome utente/password memorizzata.
Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedura.
Per ulteriori informazioni, vedere Specifica delle credenziali del job dello scheduler.
-
Richiama la procedura
UTL_HTTP.SET_CREDENTIAL
:DECLARE l_http_request UTL_HTTP.REQ; BEGIN l_http_request := UTL_HTTP.BEGIN_REQUEST('https://www.example.com/v1/dwcsdev/NAME/dwcs_small_xt1.csv'); UTL_HTTP.SET_CREDENTIAL (l_http_request, 'HTTP_CRED','BASIC'); ... END;
In primo luogo, questo esempio crea una richiesta richiamando la procedura
BEGIN_REQUEST
e imposta le informazioni di autenticazione HTTP nell'intestazione della richiesta HTTP richiamando la proceduraSET_CREDENTIAL
. Il server Web richiede queste informazioni per autorizzare la richiesta. Il valorel_http_request
è la richiesta HTTP,HTTP_CRED
è il nome delle credenziali eBASIC
è lo schema di autenticazione HTTP.
Vedere UTL_HTTP.
Per informazioni sulle limitazioni per UTL_HTTP
su Autonomous Database, vedere PL/SQL Package Notes for Autonomous Database.
Argomento padre: Chiama servizi Web da Autonomous Database
Note per l'invio di richieste HTTP con Oracle APEX o Database Actions
Quando si utilizzano i comandi SQL di Oracle APEX o il foglio di lavoro SQL di Database Actions per eseguire più comandi SQL sequenziali, i comandi possono essere eseguiti in diverse sessioni di database che non salvano lo stato di un'istruzione precedente. Questo comportamento è diverso dai client SQL desktop, ad esempio SQL*Plus e SQL Developer, che gestiscono una connessione persistente al database.
I comandi SQL di Oracle APEX e le sottomissioni del foglio di lavoro SQL di Database Actions a un'istanza di Autonomous Database sono senza conservazione di stato. Ciò significa che l'esecuzione di singole istruzioni SQL e PL/SQL può salvare lo stato nella memoria del database, ad esempio quando si sottomette un comando per utilizzare un wallet, ma lo stato potrebbe essere cancellato prima di eseguire l'istruzione successiva.
Visualizzare la tabella riportata di seguito relativa ai passi per mantenere lo stato della memoria del database tra le esecuzioni delle istruzioni per i comandi SQL sottomessi ad Autonomous Database.
Strumento di comando SQL | Sottometti istruzioni come blocco |
---|---|
Foglio di lavoro SQL Database Actions |
|
Comandi SQL di Oracle APEX |
I comandi SQL APEX supportano solo l'esecuzione di singole istruzioni. Quando si desidera eseguire più istruzioni, è necessario eseguire il wrapping delle istruzioni in un singolo blocco anonimo PL/SQL. Per eseguire il blocco con i comandi SQL APEX, fare clic su Esegui. |
Ad esempio, utilizzare il seguente blocco di codice per eseguire un comando utl_http.request()
che utilizza un wallet gestito dal cliente:
SELECT utl_http.request(url => 'https://api.example.com/', wallet_path => 'file:path_to_wallet', wallet_password => 'password' ) FROM DUAL";
Confrontare l'esecuzione con due istruzioni consecutive che potrebbero non riuscire se il comando utl_http.set_wallet()
e l'istruzione utl_http.request()
vengono eseguiti singolarmente, anziché come blocco di codice singolo:
EXEC utl_http.set_wallet('file:WALLET_DIR/wallet.sso', 'password');
SELECT utl_http.request('https://api.example.com/') FROM DUAL;
Argomento padre: Chiama servizi Web da Autonomous Database