Implementazione di Web Service REST

Definizione delle risorse

Il primo passo nella creazione di un web service è la definizione dei contenuti, le risorse che il servizio fornirà ai suoi utenti. Questo aspetto caratterizza il web service, ad esempio un servizio per fornire testo sarà diverso da un servizio per fornire immagini o video.

Ricordiamo che lo scambio di risorse avviene, tipicamente, utilizzando formati standard quali XML e JSON. Inoltre per servizi REST, le risorse vengono identificate mediante URL.

Definizione delle API

Una volta definite le risorse che verranno scambiate utilizzando il Web Service, è necessario definire le modalità con cui avverrà tale scambio. Queste modalità comprendono sia l’architettura del web service, sia i comandi, il formato delle richieste/risposte ed il contenuto di queste.

Una volta definita l’architettura (ad esempio REST), si passa alla definizione delle API (Application Programming Interface) che specificano le modalità di interazione con il web service.

Esempio: Carrello delle spesa

Vediamo come gestire mediante un web service REST il carrello della spesa in un sito di commercio elettronico.

  • Consulta carrello rappresenta l’operazione di “visione” del contenuto del carrello.
  • Aggiungi oggetto permette di un aggiungere un item al carrello
  • Elimina oggetto permette di eliminare un item dal carrello

Queste tre operazioni dovranno essere formalmente definite dalle API del nostro web service. In altre parole dobbiamo prevedere un modo di interagire con il web service per ognuna delle operazioni elencate.

Richieste REST

Come visto nella lezione introduttiva, in un’architettura REST, le richieste avvengono utilizzando i comandi HTTP e le risorse si identificano mediante URL. Le operazioni su risorse di un servizio REST vengono spesso indicate con la sigla CRUD che indica le quattro operazioni di seguito elencate.

  • Create (Creare): consente di creare una nuova risorsa sul server utilizzando il comando POST contenente i dati della nuova risorsa.
  • Read (Leggere): consente di recuperare una risorsa dal server REST utilizzando il comando GET ed indicando la risorsa richiesta.
  • Update (Aggiornare): consente di aggiornare una risorsa esistente sul server utilizzando il comando PUT (o PATCH) ed indicando la risorsa da aggiornare.
  • Delete (Eliminare): consente di eliminare una risorsa dal server utilizzando il comando DELETE ed indicando la risorsa da eliminare.

In tutti i casi l’operazione deve indicare l’URL che identifica la risorsa, un URL è tipicamente composto di tre parti

  1. authority per identificare l’organizzazione di appartenenza, ad esempio api.zuccante.it, in HTTP questa indica anche il nome del web server che ospita il servizio;
  2. path che identifica la risorsa all’interno del server, ad esempio /studenti oppure /personale/docenti;
  3. query string che tipicamente indica un filtraggio dei risultati, ad esempio ?classe=1A.

Vediamo alcuni esempi di URL e cosa potrebbero identificare.

  • api.zuccante.it/student?class=1A restituisce la lista degli studenti della classe 1A
  • restcountries.com/v3.1/name/italy restituisce le informazione per la nazione con name uguale a italy.
  • http://numbersapi.com/1337/trivia?random restituisce un fatto (trivia) relativo al numero 1337 (risultato casuale).
Osserva

Quando si accede ad un sito Web mediante HTTP, è frequente che il path si riferisca ad un file presente nel server

Accesso ed autenticazione

Le API fornite da un web service possono essere o meno rese disponibili al pubblico, è anche possibile che parte delle API siano pubbliche e parte siano accessibili solo previa autenticazione.

I motivi per rendere private le API possono essere varie, le principali sono

  • accesso a dati sensibili (ad esempio Registro Elettronico),
  • scarsità di risorse hardware (ad esempio utilizzando hosting gratuito o con pagamento a volume).

Per garantire l’accesso solo agli utenti autorizzati, esistono diversi meccanismi di autenticazione che possono essere utilizzati da un web service. Ecco alcuni dei principali:

  1. Autenticazione basata su API key (o token): questo metodo prevede che l’utente fornisca una chiave di accesso valida per effettuare richieste al web service. La chiave viene generata dal server al momento dell’autenticazione dell’utente e viene poi utilizzato per identificare l’utente in ogni richiesta successiva.
  2. Autenticazione basata su username e password: questo metodo prevede che l’utente fornisca un nome utente e una password validi per accedere al web service. L’utente viene autenticato tramite la verifica di queste credenziali.
  3. Autenticazione basata su certificati: questo metodo prevede che l’utente fornisca un certificato digitale valido per accedere al web service. Il certificato viene emesso da un’autorità di certificazione e viene utilizzato per identificare l’utente in modo sicuro.
  4. Autenticazione basata su OAuth: questo metodo prevede che l’utente fornisca un’autorizzazione di accesso tramite un provider di identità di terze parti, ad esempio Google o Facebook. L’utente viene quindi autenticato tramite l’utilizzo delle credenziali del provider di identità.

API key

Spesso l’accesso alle API (quindi alle risorse), viene garantito solo se ogni richiesta contiene una API key (o token), un tale meccanismo può essere utilizzato per vari scopi:

  • rendere accessibile parte o tutte le risorse, solo dopo autenticazione,
  • limitare il numero di accessi ad una risorsa (ad esempio solo 100 richieste al giorno per gli account free),
  • tracciare gli utenti e/o gli sviluppatori.

Implementazione

L’implementazione di un Web Service avviene di norma utilizzando un linguaggio di programmazione adatto allo sviluppo di backend. Normalmente vengono adottati dei framework appositamente progettati per lo sviluppo di web service nel linguaggio selezionato.

Vediamo quali sono i principali linguaggi e framework utilizzati per lo sviluppo di web service.

  • Javascript: Node, express, …
  • Python: Django, Flask, FastAPI, …
  • Java: Spring, …
  • PHP

Deployment

Terminata l’implementazione ed il testing, il Web Service viene installato (deployed) in un server di produzione per poter essere reso disponibile.

Un aspetto importante del deployment è la scelta del web server, scelte comuni includono i seguenti software:

Attenzione

Spesso i framework di sviluppo includono un web server di sviluppo che viene utilizzato durante la fase di realizzazione del web service. Questi server sono molto veloci, ma spesso non sono sufficientemente sicuri per essere utilizzati in ambiente di produzione.

Abbiamo visto come in un web service REST le risorse vengono identificate tramite URL e scambiate in formati standard come XML e JSON. Successivamente si è discusso il ruolo delle API nei servizi REST. L’accesso al servizio e alle API avviene utilizzando i comandi HTTP (Create, Read, Update, Delete). Infine si è fatto cenno all’utilizzo di autenticazione API key come strumenti per rendere le API private.

  • Michele Schimd © 2024
  • Ultimo aggiornamento: 17/02/2024
  • Materiale di studio e di esercizio per gli alunni dello Zuccante.

Creative Commons License