.. |br| raw:: html
.. _fruizioneAPI:
Fruizione API
-------------
In questa sezione vengono descritti i passi di configurazione
necessari, ad un applicativo client interno al dominio di gestione, per
poter fruire di una API REST esterna. L'API REST esterna utilizzata sarà
lo *Swagger Petstore* e, poiché si suppone che lo
scenario descritto nella sezione :ref:`erogazioneREST` sia già stato provato, non è necessario registrare nuovamente
l'API.
In GovWay ad ogni dominio, interno o esterno, viene associato ad un
Soggetto. Nella sezione :ref:`quickMultitenant` viene descritto come registrare più soggetti
relativi a domini interni. In questo esempio, invece, procederemo con la
registrazione di un soggetto esterno che rappresenta il gestore del
dominio a cui appartiene il PetStore.
La fruizione di API, per questo primo esempio di utilizzo, viene
registrata in modo che sia accessibile in forma anonima da qualunque
client invocando l'url esposta da GovWay. Una rappresentazione di questo
scenario è mostrata nella :numref:`quick_fruizione_fig`.
.. figure:: ../_figure_howto/fruizioneRESTBase.png
:scale: 80%
:align: center
:name: quick_fruizione_fig
Fruizione di una API tramite GovWay
Per registrare l'API su Govway, utilizzando la console *govwayConsole*,
procedere come segue:
1. **Registrazione nuovo Soggetto del dominio esterno**
Accedere alla sezione *'Soggetti'* e selezionare il pulsante
*'Aggiungi'*. Fornire i seguenti dati:
- *Dominio*: selezionare la voce *'Esterno'*. Questa voce è presente solamente se il *Multitenat* è abilitato su GovWay (maggiori dettagli sono forniti nella sezione :ref:`quickMultitenant`).
- *Nome*: indicare il nome del Soggetto che rappresenta il nuovo
dominio esterno, ad esempio *'EnteEsterno'*.
- *Tipologia*: selezionare la voce *'Erogatore'*.
- *Descrizione*: opzionalmente è possibile fornire una descrizione
generica del soggetto.
.. figure:: ../_figure_howto/fruizioneRESTBaseRegistrazioneSoggetto.png
:scale: 100%
:align: center
:name: quick_fruizioneSoggetto_fig
Registrazione nuovo Soggetto
2. **Registrazione Fruizione**
Accedere alla sezione *'Fruizioni'* e selezionare il pulsante
*'Aggiungi'*. Fornire i seguenti dati:
- *API - Nome*: selezionare l'API precedentemente registrata
*'PetStore v2'*.
- *Soggetto Erogatore - Nome*: selezionare il soggetto
precedentemente registrato *'EnteEsterno'*.
- *Controllo degli Accessi - Accesso API*: per esporre l'API in modo che sia
invocabile da qualunque client in forma anonima selezionare lo
stato *'pubblico'*.
- *Connettore - Endpoint*: indicare la *base uri* dove viene erogata
l'API nel dominio esterno. Per il nostro esempio utilizzare la
url:
- *https://petstore.swagger.io/v2*
.. note:: **Verifica del certificato server**
|br|
Per validare il certificato ritornato dal server 'petstore.swagger.io' deve essere effettuata una opportuna configurazione del trustStore tls come descritto nella sezione :ref:`avanzate_connettori_https`.
Poichè non è obiettivo di questo scenario si suggerisce di disabilitare la validazione del certificato server.
.. figure:: ../_figure_howto/fruizioneRESTBaseRegistrazioneFruizione.png
:scale: 100%
:align: center
:name: quick_fruizioneAPI_fig
Registrazione di una fruizione di API
Effettuato il salvataggio, l'API erogata sarà consultabile all'interno dell'elenco delle fruizioni. Accedendo al dettaglio si potrà conoscere l'\ *url di invocazione* che deve essere comunicata ai client che desiderano invocare l'API.
.. figure:: ../_figure_howto/fruizioneRESTBaseConsultazioneFruizione.png
:scale: 100%
:align: center
:name: quick_urlFruizioneAPI_fig
URL di Invocazione dell'API fruita
3. **Invocazione API tramite GovWay**
Al termine di questi passi di configurazione il servizio REST sarà
raggiungibile dai client utilizzando l'url di invocazione:
- http://host:port/govway/out/**/EnteEsterno/PetStore/v1/
.. note::
**Soggetto Interno al Dominio**
In questo esempio si suppone che il nome del soggetto fornito
durante la fase di installazione di GovWay sia *Ente*.
::
curl -v -X PUT "http://127.0.0.1:8080/govway/out/Ente/EnteEsterno/PetStore/v1/pet" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"id": 3,
"category": { "id": 22, "name": "dog" },
"name": "doggie",
"photoUrls": [ "http://image/dog.jpg" ],
"tags": [ { "id": 23, "name": "white" } ],
"status": "available"
}'
L'esito dell'aggiornamento viene confermato con un codice http 200 e
una risposta json equivalente alla richiesta:
::
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, DELETE, PUT
Access-Control-Allow-Headers: Content-Type, api_key, Authorization
Content-Type: application/json
Transfer-Encoding: chunked
Server: GovWay
GovWay-Message-ID: 84e1d9a4-c181-436f-b7f0-4cabf55c370d
GovWay-Transaction-ID: 6c13b9ac-3d60-45a6-9130-297a4d832824
{
"id":3,
"category":{"id":22,"name":"dog"},
"name":"doggie",
"photoUrls":["http://image/dog.jpg"],
"tags":[{"id":23,"name":"white"}],
"status":"available"
}
4. **Consultazione Tracce**
Attraverso la console *govwayMonitor* è possibile consultare lo
storico delle transazioni che sono transitate nel gateway e
recuperare i dettagli di una singola invocazione cosi come già
descritto nella sezione :ref:`erogazioneREST`.