Chiama Web Services da Autonomous Database
Descrive le opzioni per la chiamata dei servizi Web da Autonomous Database.
Sono disponibili diverse opzioni per chiamare i Web Service da Autonomous Database, tra cui:
-
Usa 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 in stile SOAP e RESTful da APEX nell'istanza di Autonomous Database. Per ulteriori informazioni, vedere Usa servizi Web con Oracle APEX.
-
Utilizzare
UTL_HTTP
per sottomettere 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 su un endpoint privato, è possibile utilizzare un wallet gestito dal cliente con procedure in
UTL_HTTP
,DBMS_LDAP
,UTL_SMTP
oUTL_TCP
. Per ulteriori informazioni, vedere Come effettuare chiamate esterne utilizzando un wallet gestito dal cliente.
Consulta le Note sul package PL/SQL per Autonomous Database per informazioni sulle restrizioni per UTL_HTTP
su Autonomous Database.
Argomenti
- Invia una richiesta HTTP a un host pubblico
Fornisce i dettagli per l'utilizzo diUTL_HTTP
per sottomettere una richiesta HTTP su un host pubblico. - Sottometti una richiesta HTTP a un host privato
Descrive i passi per utilizzareUTL_HTTP
per sottomettere una richiesta HTTP su un host privato. - Inviare una richiesta HTTP al sito privato con un proxy
Quando l'istanza di Autonomous Database si trova su un endpoint privato, è possibile utilizzare un proxy per sottomettere richieste HTTP conUTL_HTTP
. - Utilizzare gli oggetti delle credenziali per impostare l'autenticazione HTTP
Descrive come passare gli oggetti delle credenziali alla proceduraUTL_HTTP.SET_CREDENTIAL
. - Note per l'invio di richieste HTTP con Oracle APEX o Database Actions
Quando si utilizza il foglio di lavoro SQL Commands o Database Actions di Oracle APEX per eseguire più comandi SQL sequenziali, i comandi possono essere eseguiti in sessioni di database diverse che non salvano lo stato di un'istruzione precedente. Questo comportamento è diverso dai client SQL desktop, ad esempio SQL*Plus e SQL Developer, che mantengono 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 inviare 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 sottomettere la richiesta HTTP:
SELECT UTL_HTTP.REQUEST(url => 'https://www.example.com/') FROM dual;
Se l'istanza di Autonomous Database si trova su 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 Sicurezza avanzata per le connessioni in uscita con endpoint privati.
Consulta le Note sul package PL/SQL per Autonomous Database per informazioni sulle restrizioni per UTL_HTTP
su Autonomous Database.
Argomento padre: Chiama i Web Service da Autonomous Database
Invia una richiesta HTTP a un host privato
Descrive la procedura per utilizzare UTL_HTTP
per inviare una richiesta HTTP su un host privato.
Per sottomettere una richiesta a un host di destinazione su 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 VCN Oracle Cloud Infrastructure diverse abbinate.
-
L'host di destinazione è una rete in locale connessa alla VCN Oracle Cloud Infrastructure del database di origine mediante FastConnect o VPN.
È inoltre possibile effettuare chiamate UTL_HTTP
con un wallet gestito dal cliente quando Autonomous Database si trova in un endpoint privato. Per ulteriori informazioni, vedere Come effettuare chiamate esterne utilizzando un wallet gestito dal cliente.
Per effettuare una richiesta UTL_HTTP
a una destinazione su 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 è obbligatoria in questa API. Per ulteriori informazioni, vedere Sicurezza avanzata 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;
Consulta le Note sul package PL/SQL per Autonomous Database per informazioni sulle restrizioni per UTL_HTTP
su Autonomous Database.
Argomento padre: Chiama i Web Service da Autonomous Database
Invia una richiesta HTTP al sito privato con un proxy
Quando l'istanza di Autonomous Database si trova su un endpoint privato, è possibile utilizzare un proxy per sottomettere richieste HTTP con UTL_HTTP
.
Quando l'istanza di Autonomous Database si trova su un endpoint privato, per utilizzare UTL_HTTP
con un proxy di destinazione, il proxy di destinazione deve essere accessibile dalla Oracle Cloud Infrastructure VCN del database di origine.
Ad esempio, è possibile connettersi utilizzando un proxy quando:
-
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 VCN Oracle Cloud Infrastructure diverse abbinate.
-
Il server proxy è una rete in locale connessa alla VCN 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 Come effettuare 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 rispettano 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 rispettano il server proxy impostato conUTL_HTTP.SET_PROXY
.
Consulta le Note sul package PL/SQL per Autonomous Database per informazioni sulle restrizioni per UTL_HTTP
su Autonomous Database.
Argomento padre: Chiama i Web Service da Autonomous Database
Usa oggetti credenziali per impostare l'autenticazione HTTP
Descrive come passare un oggetto credenziale 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 necessita di 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 è possibile accedervi solo da utenti con privilegi e consentire di configurare privilegi a livello di schema per controllare le credenziali. Il passaggio di oggetti 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 mostrato nell'esempio precedente, quando si richiama la procedura SET_AUTHENTICATION
, è necessario passare il nome utente/password in chiaro come parte dei parametri formali PL/SQL. Potrebbe essere necessario incorporare il nome utente/password in vari script di automazione PL/SQL o cron. Il passaggio di password con testo in chiaro è un problema di conformità affrontato nella procedura UTL_HTTP.SET_CREDENTIAL
.
Per ulteriori informazioni, vedere SET_AUTHENTICATION Procedure e SET_AUTHENTICATION_FROM_WALLET Procedure.
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 per passare un oggetto credenziale nella procedura SET_CREDENTIAL
:
-
Creare un oggetto credenziale:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'HTTP_CRED', username => 'web_app_user', password => '<password>' ); END;
In questo modo viene creato un oggetto credenziale che crea una coppia di nome utente/password memorizzata.
Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedure.
Per ulteriori informazioni, vedere Specifica delle credenziali del job scheduler.
-
Richiamare 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 questo esempio viene creata una richiesta richiamando la procedura
BEGIN_REQUEST
e vengono impostate le informazioni di autenticazione HTTP nell'intestazione della richiesta HTTP richiamando la proceduraSET_CREDENTIAL
. Il server Web necessita di 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.
Per ulteriori informazioni, vedere UTL_HTTP.
Consulta le Note sul package PL/SQL per Autonomous Database per informazioni sulle restrizioni per UTL_HTTP
su Autonomous Database.
Argomento padre: Chiama i Web Service da Autonomous Database
Note per l'invio di richieste HTTP con Oracle APEX o Database Actions
Quando si utilizza il foglio di lavoro SQL Comandi SQL di Oracle APEX o Database Actions per eseguire più comandi SQL sequenziali, i comandi possono essere eseguiti in sessioni di database diverse che non salvano lo stato di un'istruzione precedente. Questo comportamento è diverso dai client SQL desktop, ad esempio SQL*Plus e SQL Developer, che mantengono una connessione persistente al database.
I comandi SQL di Oracle APEX e le sottomissioni dei fogli di lavoro SQL di Database Actions a un'istanza di Autonomous Database sono senza conservazione dello 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 per i 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 rendiconti 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 racchiudere le 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 blocco di codice seguente 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 un singolo blocco di codice:
EXEC utl_http.set_wallet('file:WALLET_DIR/wallet.sso', 'password');
SELECT utl_http.request('https://api.example.com/') FROM DUAL;
Argomento padre: Chiama i Web Service da Autonomous Database