• Passa al contenuto principale
  • Passa alla barra laterale primaria
  • HOME
  • INIZIA QUI
  • CHI SONO
  • APEXLab

APPin5Minuti

Creare APP Gestionali con Oracle APEX e Low-Code

Crea Applicazioni Gestionali con Oracle APEX e gli strumenti Low-Code.

Come costruire Web Service RESTful con ORDS e Oracle APEX

Ottobre 13, 2022

Nel sviluppo delle applicazioni web moderne le parole REST e API sono ormai termini che si usano spesso e non escludo che anche tu abbia avuto a che farci.

In effetti, l’approccio allo sviluppo di applicazioni basato sui microservizi è una tendenza ormai consolidata tant’è che ormai tutti le piattaforme più famose mettono a disposizione degli sviluppatori decine di librerie che possono essere utilizzate per integrare le proprie applicazioni.

Vuoi che il tuo CRM invii ai clienti dei messaggi automatici su WhatsApp con offerte speciali e personalizzate?

Oppure, desideri collegare il tuo ERP a Shopify per aggiornare in modo automatico le disponibilità dei prodotti?

Oggi tutto questo è possibile grazie all’utilizzo delle API REST messe a disposizione proprio da questi sistemi.

Anche il database Oracle nasconde (per così dire) una tecnologia che permette agli sviluppatori di creare e pubblicare API RESTful e in questo articolo desidero parlarti proprio di questo.

IN QUESTO ARTICOLO

  • Parliamo di ORDS
  • Cosa sono le API RESTful
  • Come funzionano le API RESTful
  • ORDS RESTful Data Services in Oracle APEX
    • Come attivare ORDS RESTful Data Services
    • Come disattivare ORDS RESTful Data Services
    • Come esportare ed importare i servizi RESTful
  • Come configurare un Modulo REST in APEX
  • Come configurare un Metodo GET
  • Come configurare un Metodo GET con Parametri
  • Come configurare un Metodo POST
  • Come configurare un Metodo PUT
  • Come configurare un Metodo DELETE
  • Come configurare un Metodo GET con Response JSON Personalizzato
  • Come configurare un Metodo GET con Response XML
  • Come configurare un Metodo GET con Response HTML
  • Come gestire gli accessi autorizzati alle API RESTful
  • Conclusioni

Parliamo di ORDS

ORDS è una applicazione Java che consente agli sviluppatori con competenze di linguaggio SQL e gestione del database di sviluppare interfacce API RESTful.

Senza rischiare di scendere troppo nei dettagli tecnici, possiamo dire che grazie ad ORDS puoi creare dei web services RESTful che possono:

  • eseguire delle query sul database e restituire in output i dati, generalmente organizzati in un documento in formato JSON (ma vedremo che possiamo fare qualcosa di più..)
  • eseguire delle vere e proprie operazioni sul database come, ad esempio, l’inserimento e la modificare dei record in una tabella oppure l’esecuzione di store procedures PL-SQL.

Se hai già esperienza nello sviluppo dei web services, in particolar modo con ORDS, probabilmente saprai già molte delle cose che andrò a spiegare.

Invece, se sei alle prime armi e non sai bene come muoverti, penso che questo articolo ti sarà utile.

Puoi considerarlo un piccolo vademecum che puoi tenere sempre con te tutte le volte che ti chiedono di creare un web service che deve eseguire qualche tipo di operazione all’interno del database Oracle.

Cosa sono le API RESTful

RESTful API è una interfaccia utilizzata da due applicazioni per scambiare tra di loro informazioni.

Al giorno d’oggi l’utilizzo di queste interfacce è abbastanza diffuso perché consentono alle applicazioni di comunicare con altre applicazioni.

Facciamo un esempio.

Supponiamo che una azienda abbia bisogno di creare all’interno del proprio sito web, magari realizzato in WordPress, un e-commerce.

Una necessita, direi abbastanza normale, potrebbe essere quella di collegare il sito web ad una applicazione di gestione degli ordini di vendita per far si che quando un visitatore esegue un acquisto tramite il sito venga automaticamente generato un ordine di vendita.

Se ci pensi, al giorno d’oggi necessità di questo tipo non sono poi così rare e sapere come funzionano le API RESTful è ormai diventato qualcosa di imprescindibile.

Gli sviluppatori creano e pubblicano API così che altre applicazioni possano comunicare con le proprie programmaticamente.

Ad esempio, la nostra applicazione per la gestione degli ordini di vendita dovrebbe esporre una o più API RESTful che permettono ad altre applicazioni (che chiameremo Client) di:

  • vedere l’elenco dei prodotti a listino
  • consultare i dettagli di uno specifico prodotto
  • inserire un ordine di vendita
  • modificare un ordine di vendita

Nel seguito di questa guida ti mostrerò come creare una API RESTful che fa tutte queste cose.

Come funzionano le API RESTful

Le API REST comunicano tramite richieste HTTP per eseguire funzioni di database standard come la creazione, la lettura, l’aggiornamento e l’eliminazione di record all’interno di una tabella.

Questo insieme di operazioni è noto anche come CRUD, acronimo di create, read, update e delete.

Ad esempio, una API REST utilizzerà una richiesta GET per richiamare un record di una tabella (chiamato in gergo risorsa), una richiesta POST per creare un nuovo record, una richiesta PUT per aggiornare un record e una richiesta DELETE per eliminarlo.

Come fa il server a capire quale risorsa deve essere elaborata e quale tipo di operazione fare?

Il server è in grado di capire quale risorsa deve essere elaborata utilizzando l’URL, che viene chiamato anche endpoint.

Ad esempio, l’URL per recuperare tutti i prodotti in vendita si può usare questo endpoint

https://myserver/products/

Quando un client desidera accedere ad una risorsa specifica (ad esempio i dettagli di uno specifico prodotto) è necessario che passi al server un parametro (ad esempio il suo id).

I parametri possono essere passati sia nell’URL oppure nell’HEADER della richiesta HTTP (vedremo tra poco cosa significa)

https://myserver/products/:id

I metodi indentificano i tipi di operazione che possono essere eseguiti suoi dati sono quelli che abbiamo già citato:

  • GET: usata per accedere ad una risorsa
  • POST: usata per accedere creare una nuova risorsa
  • PUT: usata per aggiornare i dati di una risorsa esistente
  • DELETE: usata per eliminare la risorsa

Come si riflette tutto ciò quando si lavora con ORDS e con il database Oracle?

Il client, chiamando un URI, esegue un comando REST che viene interpretato da ORDS con uno specifico comando SQL (Map & Bind).

Il mapping tra i verbi REST e le operazioni che esegue il database sono riportate nella seguente tabella:

Comando RESTComando SQL
GETSELECT
POSTINSERT
PUTUPDATE
DELETEDELETE

Una API REST ben progettata è simile ad un sito web in esecuzione in un browser web con funzionalità HTTP integrate.

Di seguito i passaggi generali per qualsiasi chiamata REST API:

  1. Il Client invia una Richiesta al server usando le specifiche dell’API.
  2. Il Server autentica il Client e conferma che ha il diritto di effettuare la Richiesta.
  3. Il Server riceve la Richiesta ed esegue l’operazione richiesta.
  4. Il Server risponde al Client tramite una Risposta che rivela se la Richiesta è stata elaborata correttamente. La Risposta include inoltre qualsiasi informazione richiesta dal Client.

ORDS RESTful Data Services in Oracle APEX

ORDS e APEX non sono strettamente correlati, nel senso che per usare ORDS non è necessario usare APEX.

Potresti sviluppare web services basati su ORDS usando anche SQL Developer.

Tuttavia, Oracle APEX mette a disposizione una console di amministrazione studiata proprio per aiutare gli sviluppatori che creano applicazioni a gestire e mantenere anche i web services.

Adesso ti spiegherò come usare questa console.

Come attivare ORDS RESTful Data Services

Quando crei un nuovo WORKSPACE in Oracle APEX i servizi ORDS non sono attivi, quindi la prima cosa da fare è attivarli.

  • Collegati al Workspace
  • Clicca su SQL Workshop > RESTful Services
  • Se i servizi RESTful non sono stati attivati in precedenza (in tal caso non devi fare nulla), dovresti vedere questo messaggio: Schema not registered with ORDS
  • Clicca sul pulsante Register Schema with ORDS
  • Lascia i parametri di default e premi Save Schema Attributes
  • La procedura dovrebbe completarsi abbastanza velocemente con questo messaggio di conferma

Come disattivare ORDS RESTful Data Services

Sempre dalla RESTful Console, qualora tu ne abbia bisogno, puoi disattivare i servizi RESTful.

Tieni bene presente a mente che questa operazione eliminerà tutti i servizi web che hai costruito ed è irreversibile quindi.. fai attenzione!

  • Accedi alla RESTful Console e clicca De-Register Schema from ORDS
  • Conferma cliccando De-Register Schema.
  • Messaggio di conferma

Come esportare ed importare i servizi RESTful

Quando si sviluppano applicazioni web è buona norma avere una ambiente dedicato agli sviluppi ed uno destinato all’utilizzo da parte degli utenti finali.

Installare una applicazione da un ambiente all’altro è una operazione abbastanza facile da fare grazie alle funzionalità di export/import che sono disponibili nell’APP Builder.

Una funzionalità simile è disponibile anche per i servizi rest.

  • Per esportare la definizione di uno o più servizi REST accedi alla RESTful Console e clicca su Export
  • Seleziona il servizio che vuoi esportare. L’opzione All Services esporta tutti i servizi che sono stati registrati.
  • Quando hai fatto clicca Export.
  • Oracle APEX genererà uno Script SQL che contiene tutta la definizione dei servizi
  • Per importare i servizi in un’altra istanza APEX accedi alla RESTful Console dell’istanza di destinazione e clicca Import
  • Specifica il file da importare e premi Import

Come configurare un Modulo REST in APEX

Il nostro obiettivo è quello di creare una API RESTful che ci permetta di integrare la nostra applicazione di gestione ordini con un e-commerce.

Questa API dovrebbe consentire diverse operazioni come la possibilità di poter inserire un nuovo ordine di vendita e, ancor prima, la possibilità di interrogare il listino prodotti.

Il primo esercizio che faremo sarà quello di creare le tabelle PRODUCTS, CUSTOMERS e ORDERS

-- create tables
create table products (
    id                             number generated by default on null as identity 
                                   constraint table_products_id_pk primary key,
    sku                            varchar2(12 char),
    description                    varchar2(150 char),
    unit_price                     number
);
create table customers (
    id                             number generated by default on null as identity 
                                   constraint customers_id_pk primary key,
    name                           varchar2(50 char),
    address                        varchar2(150 char)
)
;
create table orders (
    id                             number generated by default on null as identity 
                                   constraint orders_id_pk primary key,
    customer                       number,
    product                        number,
    quantity                       number
)
;
-- insert products data
insert into products (id, sku, description,unit_price) values (1, 'ITM001', 'Product 1', 50);
insert into products (id, sku, description,unit_price) values (2, 'ITM002', 'Product 2', 15);
insert into products (id, sku, description,unit_price) values (3, 'ITM003', 'Product 3', 75);
-- insert customers data
insert into customers (id, name, address) values (1, 'Gricelda Luebbers', '3 Hambleton Blvd');
insert into customers (id, name, address) values (2, 'Dean Bollich', '303 Casasana Street');
insert into customers (id, name, address) values (3, 'Milo Manoni', '755 Greenslide Ave');

Creiamo un modulo, ossia il contenitore all’interno del quale andremo a definire i vari servizi esposti dalla nostra API.

  • Accedi alla Console RESTful di Oracle APEX e clicca Modules
  • Clicca Create Module
  • Inserisci le informazioni richieste e poi premi Create Module.
    • Module Name: nome del modulo RESTful. Deve essere univoco.
    • Base Path: è una stringa case sensitive utilizzata per accedere al servizio RESTful. Il Base Path viene utilizzato per costruire l’URI del servizio e deve essere univoco all’interno dello schema.
    • Is Published: flag che permette di attivare o disattivare il modulo REST
    • Pagination Size: numero di record restituiti da una chiamata singola.
  • Il modulo è stato creato e viene aggiunto a quelli già esistenti

Per completare questa prima parte dobbiamo definire dei Resource Template.

I Resource Template sono il modo attraverso il quale puoi raggruppare le URI che identificano le varie risorse (prodotti, ordini, ecc) manipolate dalle API REST e associarle a un particolare modulo.

  • Sempre dalla schermata del modulo, clicca su Create Template
  • Inserisci il nome del template nel campo URI Template e premi Create Template per completare l’operazione.
  • Il Resource Template è stato creato ed aggiunto al modulo

Come configurare un Metodo GET

Creiamo un Metodo GET che interroghi la tabella PRODUCTS e che generi una Response contenente tutti i prodotti che è possibile acquistare tramite l’e-commerce.

  • Dalla schermata del Resource Template vai alla sezione Resource Handlers e clicca su Create Handler
  • Specifica il metodo REST da implementare (GET) e il tipo di sorgente (Collection Query)
  • Inserisci nel campo Source la Query SQL e premi Create Handler
select id, sku, description, unit_price
  from products
  • L’URL che trovi nel campo Full URL è l’endpoint del servizio che dovrà essere usato dalle applicazioni che vogliono accedere al listino prodotti.

Per provare i servizi web ci sono sono doversi strumenti. Uno dei più famosi è Postman.

  • Registrati gratuitamente al servizio e creare una nuova Collection e successivamente una Request di tipo GET.
  • Inserisci nella Request l’URL l’endpoint del servizio esposto da ORDS e premi Send

Il risultato che dovresti ottenere è una Response in formato JSON contenente i record estratti dalla query SQL che abbiamo inserito nell’Handler

Come configurare un Metodo GET con Parametri

Come forse avrai notato, nell’esempio che abbiamo appena fatto il metodo GET non aveva parametri in ingresso.

Tuttavia è abbastanza frequente che le API REST debbano ricevere dei parametri in input per eseguire le operazioni più complesse.

Uno dei modi per passare i parametri è direttamente nell’URL.

  • Accedi alla schermata del modulo e crea un nuovo Resource Template
  • Nel campo URI Template inserisci la stringa products/:id
  • Crea un Handler GET con Source Type=Collection Query
select id, sku, description, unit_price
  from products
 where id = :id

Inserendo nell’URL l’identificativo del prodotto specifico al posto della stringa :id è possibile visualizzare i dettagli del singolo record.

Quello visto non è l’unico modo attraverso il quale possiamo definire in ORDS i parametri di una API REST.

A tal proposito costruiamo un metodo GET che effettua una ricerca sui prodotti.

  • Accedi alla schermata del modulo e crea un nuovo Resource Template stavolta senza indicare nessun parametro nell’URL
  • Crea un Handler GET con Source Type=Collection Query
select id, sku, description, unit_price
  from products
 where instr(trim(upper(description)),trim(upper(:searchstr))) >0
  • Vai alla sezione Parameters dell’Handler e definisci il parametro searchstr
    • Name: searchstr
    • Bind Variable: searchstr
    • Access Method: IN
    • Source Type: URI
    • Data Type: STRING

Per verificare il funzionamento di questo servizio dovrai appendere all’URI la stringa

?searchstr=<stringa di ricerca> 

dove

  • searchstr è il parametro da passare nell’URI
  • <stringa di ricerca> è il valore del parametro

Quindi se volessi cercare i prodotti che nella descrizione contengono la parola chiave ‘Prodotto 1’ effettuerò una chiamata all’API REST fatta così:

https://<myserver>/ords/appin5minuti/ecommerce/searchproducts?searchstr=Product%201

Come configurare un Metodo POST

Il metodo POST si differenza da GET in quanto i parametri della richiesta non vengono passati direttamente nell’URL.

Caso d’uso abbastanza comune di una richiesta in POST è una form che invia dati personali, come ad esempio una form di registrazione.

Creiamo un metodo POST per inserire un nuovo record nella tabella ORDINI.

Il servizio accetterà tre parametri in ingresso:

  • L’identificativo del cliente
  • Lo SKU dell’articolo
  • La quantità ordinata

Se il nome del cliente non esiste oppure l’articolo non esiste, il servizio restituirà un codice errore altrimenti restituirà il riferimento al numero ordine che è stato creato.

  • Accedi alla schermata del modulo e clicca Create Template
  • Specifica il nome del Template (es. createorder) e clicca Create Template
  • Clicca Create Handler e seleziona il metodo POST
  • Inserisci nel Body dell’Handler il seguente script PL-SQL.
declare
    l_customer_id number;
    l_product_id number;
    l_order_number number;
    l_status_code varchar2(250);
    l_status_message varchar2(400);
begin
    
    begin 
        select id into l_customer_id from CUSTOMERS where id = :customer;
    exception 
        when others then
        l_order_number      := '-1';
        l_status_code       := 'KO';
        l_status_message    := 'Customer NOT exists';
    end;
    begin 
        select id into l_product_id from PRODUCTS where id = :product;
    exception 
        when others then
        l_order_number      := '-1';
        l_status_code       := 'KO';
        l_status_message    := 'Product NOT exists';
    end;
    if nvl(l_status_code,'OK') not in ('KO') then
        insert into ORDERS (CUSTOMER, PRODUCT, QUANTITY) values (1, 1, 1)
        returning id into l_order_number;
        commit;
        l_status_code       := 'OK';
        l_status_message    := 'Order Created';
    end if;
    
    :order_number       := l_order_number;
    :status_code        := l_status_code;
    :status_message     := l_status_message;
exception when others then
    :order_number       := '-1';
    :status_code        := 'KO';
    :status_message     := 'Errore Generico';
end;

  • Vai alla sezione Parameters ed aggiungi i seguenti parametri
    • customer: identificativo del cliente da passare in input nell’header della richiesta
    • product: identificativo del prodotto da passare in input nell’header della richiesta
    • quantity: quantità ordinata da passare in input nell’header della richiesta
    • order-number: numero ordine restituito nel corpo risposta
    • status-code: esito dell’operazione restituito nell’header risposta
    • status-message: messaggio restituito dalla procedura nell’header risposta

Proviamo ad eseguire questo web service usando Postman.

  • Accedi a Postman e crea una nuova Request di tipo POST
  • Inserisci l’end-point del servizio
  • Vai in Header ed inserisci i parametri e poi premi Send.

Se hai inserito i parametri corretti (cliente e prodotto validi) allora dovrebbe essere inserito un record nella tabella ORDERS e nel Body della Response dovrebbe essere restituito il numero ordine.

Nell’header della response dovresti vedere i parametri status-code e status-message

Se lo desideri puoi spostarli nel body della response.

Questo sarà il risultato

Se, invece, inserisci parametri non validi (ad esempio un articolo che non esiste) otterrai questo risultato

Come configurare un Metodo PUT

Il metodo PUT viene utilizzato quando devi modificare una risorsa come, ad esempio, un record di database.

Creiamo un servizio PUT in grado di aggiornare la quantità di un ordine di vendita.

  • Accedi alla schermata del modulo e clicca Create Template
  • Specifica il nome del Template (es. updateorder) e clicca Create Template
  • Clicca Create Handler e seleziona il metodo PUT
  • Inserisci nel Body dell’Handler il seguente script PL-SQL
declare
    l_order_id number;
    l_status_code varchar2(250);
    l_status_message varchar2(4000);
begin
    begin
        select id into l_order_id from ORDERS where ID = :order_number;
    exception when others then
        l_order_id := -1;
        l_status_code := 'KO';
        l_status_message := 'Ordine NON Valido';
    end;
    if l_order_id > 0 then
        update ORDERS 
        set quantity = :quantity
        where id  = :order_number;
        commit;
        
        l_status_code := 'OK';
        l_status_message := 'Qty Aggiornata';
    end if;
    
    :status_code    := l_status_code;
    :status_message := l_status_message;
end;
  • Vai alla sezione Parameters ed aggiungi i seguenti parametri
    • quantity: quantità ordinata da passare in input nell’header della richiesta
    • order-number: numero ordine restituito nel corpo risposta
    • status-code: esito dell’operazione restituito nell’header risposta
    • status-message: messaggio restituito dalla procedura nell’header risposta

Come configurare un Metodo DELETE

Il metodo DELETE viene utilizzato quando devi eliminare una risorsa come, ad esempio, un record di database.

Arrivati a questo punto, immagino tu abbia capito come fare.

  • Accedi alla schermata del modulo e clicca Create Template
  • Specifica il nome del Template (es. deleteorder) e clicca Create Template
  • Clicca Create Handler e seleziona il metodo DELETE
  • Inserisci nel Body dell’Handler il seguente script PL-SQL
declare
    l_order_id number;
    l_status_code varchar2(250);
    l_status_message varchar2(4000);
begin
    begin
        select id into l_order_id from ORDERS where ID = :order_number;
    exception when others then
        l_order_id := -1;
        l_status_code := 'KO';
        l_status_message := 'Ordine NON Valido';
    end;
    if l_order_id > 0 then
        delete from ORDERS 
        where id  = :order_number;
        commit;
        
        l_status_code := 'OK';
        l_status_message := 'Ordine Eliminato';
    end if;
    
    :status_code    := l_status_code;
    :status_message := l_status_message;
end;
  • Vai alla sezione Parameters ed aggiungi i seguenti parametri
    • order-number: numero ordine restituito nel corpo risposta
    • status-code: esito dell’operazione restituito nell’header risposta
    • status-message: messaggio restituito dalla procedura nell’header risposta

Come configurare un Metodo GET con Response JSON Personalizzato

Nell’esempi precedenti i vari servizi RESTful che abbiamo creato sono stati in grado di generare delle Response JSON in modo automatico direttamente da ORDS.

Tuttavia, questo potrebbe essere un limite perché potremmo aver bisogno di generare come Response documenti JSON più complessi.

Fortunatamente questo non è un problema perché possiamo creare una Response personalizzata usando un Handler di tipo PL-SQL.

  • Accedi alla schermata del modulo e clicca Create Template
  • Specifica il nome del Template (es. listorders) e clicca Create Template
  • Clicca Create Handler e seleziona il metodo GET con Source Type PL/SQL.
  • Inserisci nel Body dell’Handler il seguente script PL-SQL
DECLARE
    items_cursor   SYS_REFCURSOR;
    l_item_exist number;
    l_ret_message varchar2(250);
BEGIN
    select count(1) into l_item_exist from ORDERS where customer = :customer;
    if (l_item_exist > 0) then 
        l_ret_message := 'Success';
    else
        l_ret_message := 'No Orders Found';
    end if;
    OPEN items_cursor FOR
        SELECT *
          FROM (select  orders.id order_number, 
                        products.sku product_code, 
                        products.description product_description, 
                        products.unit_price, 
                        (quantity * unit_price) selling_price
                  from orders, products
                 where orders.product = products.id
                   and customer = :customer) tmp;
			
    APEX_JSON.open_object;
    APEX_JSON.write ('ordini', items_cursor);
    APEX_JSON.write ('message', l_ret_message);
    APEX_JSON.close_object;
END;

Come puoi notare utilizzando il package APEX_JSON possiamo personalizzare la Response come meglio crediamo.

Per maggiori dettagli su come manipolare i documento JSON puoi fare riferimento alla JSON Developer’s Guide.

Come configurare un Metodo GET con Response XML

Oltre che il formato JSON, potrebbe essere necessario generare delle Response in altri formati, ad esempio XML.

Ecco un esempio di Handler PL-SQL che puoi usare per generare una Response XML.

begin
    --set the response format
    owa_util.mime_header('application/xml', true, 'ISO-8859-4');
    htp.p('<?xml version="1.0" encoding="UTF-8" ?>');
    htp.p('<ROOT>');
    
    htp.p('<NAME>JOHN</NAME>');
    htp.p('<SURNAME>SMITH</SURNAME>');
    htp.p('<CONTENT_TYPE>Here is the content..</CONTENT_TYPE>');
    htp.p('</ROOT>');
end;

Questo è il risultato

Come configurare un Metodo GET con Response HTML

Ecco un esempio di Handler PL-SQL che puoi usare per generare una Response HTML.

DECLARE
    prevdeptno      NUMBER;
    total_rows      NUMBER;
    l_customer_name VARCHAR2(250);
    CURSOR getorders IS
      SELECT *
      FROM   (SELECT orders.id                 order_number,
                     products.sku              product_code,
                     products.description      product_description,
                     products.unit_price,
                     quantity,
                     ( quantity * unit_price ) selling_price
              FROM   orders,
                     products
              WHERE  orders.product = products.id
                     AND customer = :customer) tmp;
BEGIN
    BEGIN
        SELECT name
        INTO   l_customer_name
        FROM   customers
        WHERE  id = :customer;
    EXCEPTION
        WHEN OTHERS THEN
          l_customer_name := NULL;
    END;
    IF ( l_customer_name IS NOT NULL ) THEN
      sys.htp.htmlopen;
      sys.htp.headopen;
      sys.htp.Title('Orders for Customer '
                    ||l_customer_name);
      sys.htp.headclose;
      sys.htp.bodyopen;
      sys.htp.Print('<h2>Orders for Customer '
                    ||l_customer_name
                    ||'</h2>');
      sys.htp.Print('<table>');
      sys.htp.Print('<tr>');
      sys.htp.Print('<th>Order Number</th>');
      sys.htp.Print('<th>Product</th>');
      sys.htp.Print('<th>Description</th>');
      sys.htp.Print('<th>Quantity</th>');
      sys.htp.Print('<th>Sellign Price</th>');
      sys.htp.Print('</tr>');
      FOR orderrecs IN getorders LOOP
          sys.htp.Print('<tr>');
          sys.htp.Print('<td>' ||orderrecs.order_number ||'</td>');
          sys.htp.Print('<td>' ||orderrecs.product_code ||'</td>');
          sys.htp.Print('<td>' ||orderrecs.product_description ||'</td>');
          sys.htp.Print('<td>' ||orderrecs.quantity ||'</td>');
          sys.htp.Print('<td>' ||orderrecs.selling_price ||'</td>');
          sys.htp.Print('</tr>');
      END LOOP;
      sys.htp.Print('</table>');
      sys.htp.bodyclose;
      sys.htp.htmlclose;
    ELSE
      sys.htp.htmlopen;
      sys.htp.headopen;
      sys.htp.Title('No Customer Found');
      sys.htp.headclose;
      sys.htp.bodyopen;
      sys.htp.Print('<h2>No Customer Found</h2>');
      sys.htp.bodyclose;
      sys.htp.htmlclose;
    END IF;
END; 

Come gestire gli accessi autorizzati alle API RESTful

Bene, abbiamo creato i nostri servizi e li abbiamo pubblicati.

A questo punto di dobbiamo porre una domanda: devono essere servizi protetti da un meccanismo di autenticazione?

Ovvero, vogliamo che chiunque li possa utilizzare o dobbiamo garantire un certo livello di sicurezza?

Trattandosi di servizi esposti verso l’esterno è un problema non da poco.

Fortunatamente non dobbiamo scervellarci troppo perché Oracle mette a disposizione diversi meccanismi per gestire l’accesso autorizzato ai servizi esposti via ORDS, come, ad esempio il protocollo OAuth 2.0.

Leggi Come configurare OAuth 2.0 per un servizio REST in Oracle APEX

Conclusioni

Siamo arrivati alla fine di questo tutorial che spero che tu abbia trovato utile.

Fammi sapere cosa ne pensi!

Un abbraccio

Daniele

TI POTREBBE INTERESSARE:

  • Come migrare le applicazioni da Oracle Forms ad Oracle APEX
  • CPQ in Oracle APEX
  • Come sviluppare applicazioni sicure con Oracle APEX
  • Prevedere l'interesse di un cliente verso un prodotto o servizio con Oracle APEX e Machine Learning
  • Programmare in PL-SQL: guida facile per principianti
  • Costruiamo un CRM con Oracle APEX

api rest, oracle apex, oracle rest data service, ords

Interazioni del lettore

Lascia un commento Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Barra laterale primaria

BENVENUTO!

Il mio nome è Daniele Trasarti, autore di APPin5Minuti, il blog italiano che parla di piattaforme di Oracle APEX e applicazioni low-code.

Qui troverai tantissimi tutorial e risorse per imparare a sviluppare in pochissimo tempo bellissime applicazioni per gestire i dati ed i processi della tua azienda.

Se vuoi saperne di più inizia da qui.

Seguimi sui social!

  • LinkedIn
  • Twitter

NEWSLETTER

Iscriviti anche tu per far parte della più grande community italiana di persone che amano sviluppare low-code!

api rest appsheet appsheet data sources appsheet views appsheet workflow automation autonomous database build apps cpq crm css cyber security database dynamic layout facebook flowform flows4apex google google cloud interactive grid interactive report javascript list microsoft microsoft access mobile oracle oracle apex oracle cloud oracle rest data service ords pl-sq PL-SQL power apps product configurator sales configurator security social login software gestionale sql theme roller ux woocommerce wordpress workflows

COMMENTI RECENTI

  1. Daniele Trasarti su Costruiamo un CRM con Oracle APEX

    Grazie Stefania

  2. Stefania su Costruiamo un CRM con Oracle APEX

    Grazie, Daniele, per questo tutorial davvero esaustivo ma anche molto semplice da capire. Questa app è diventata un ottimo punto…

  3. Daniele Trasarti su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ciao Sabatino, grazie per l'apprezzamento. Riguardo alla tua domanda ti consiglio di usare Oracle Cloud. Puoi creare un account gratis…

  4. Sabatino Iannazzo su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ciao Daniele, complimenti per la guida, mi hai aperto un mondo! volevo chiederti se con Apex e Oracle Database Express…

  5. Laura su Autenticazione a 2 Fattori basata su TOTP (Time-based One-time Password) con Oracle APEX

    Ciao, trovo molto interessante il tuo articolo. Hai qualche suggerimento per l'autenticazione con spid? pensi di fare qualche guida al…

  6. Mario Volpetti su Oracle APEX: come creare un’applicazione web in 5 minuti

    Ottima spiegazione e complimenti per la semplicità che ai usato. Sono riuscito a farlo anche io con un foglio excel…

  7. Riccardo Liviabella su Google AppSheet: come creare una APP Mobile da un foglio Excel in 5 minuti

    Ciao Daniele e grazie per le tue interessanti spiegazioni. E' da un pò di anni che lavoro su Appsheet e…

Copyright © 2023 · APPin5Minuti.it · Privacy Policy · Cookie Policy