# Come sviluppare un’API REST in 6 minuti
Sei nel mezzo di un hackaton e devi mettere su un microservizio? Il tuo capo ti ha sbolognato da fare un API per un cliente da finire entro ieri? In questo breve (anzi brevissimo) tutorial, costruirai un’API REST in men che non si dica.
# Query ad un database di date
Come problema di esempio useremo delle query ad un calendario che ci restituirà informazioni sui giorni di festa.
# Passo 0: requisiti
Ok, forse questo passo non conta nei 6 minuti, ma è importante installare un paio di cosette prima di cominciare.
# Postgres
Presupponendo che tu abbia Docker
installato, puoi tirare su una base dati Postgres con i seguenti comandi da shell:
> # crea una rete per la nostra base dati
> docker network create db
> # lancia il database
> docker run --detach --rm --name calendario --env POSTGRES_PASSWORD=banana --env POSTGRES_DB=calendar_api --publish 5432:5432 --network db postgres
Per controllare se la connessione al database funziona:
docker run -it --rm --network=db postgres psql -h calendario -U postgres
> Password for user postgres:
Inserisci la password impostata poco sopra che è "banana". Ti si prensenta (se tutto è andato bene) la console di Postgres.
Crea una tabella che poi userai per memorizzare i dati:
CREATE TABLE "giorno" (
"id" serial primary key,
"createdAt" timestamptz NOT NULL,
"updatedAt" timestamptz NOT NULL,
"data" date NOT NULL,
"evento" varchar NOT NULL
);
A completamento del comando, per uscire, basta digitare exit
.
# Feathers.js
Feathers.js è l’API layer che ci permette di generare il codice del microservizio.
Se usi javascript probabilmente hai npm
già installato, quindi con il seguente comando puoi installare Feathers:
> npm install @feathersjs/cli -g
# Passo 1
Crea una nuova cartella, una volta dentro digita
> feathers generate app
Rispondi alle domande interattive (le scelte di default vanno bene per questo tutorial)
# Passo 2
Feathers ha generato un’impalcatura sulla quale costruire la nostra applicazione. Con il comando npm start
puoi lanciarla ma sarà ancora vuota.
Con il prossimo comando generi codice per l’API endpoint:
> feathers generate service
Alle domande che seguono rispondi che si tratta di un servizio Sequelize
e usa giorno
come nome. Infine scegli PostgreSQL
quando richiesto. L’ultima domanda riguarda l’indirizzo del nostro database. Bisogna prestare un attimo di attenzione perché l’indirizzo proposto di default sarà
postgres://postgres:@localhost:5432/calendar_api
che nel nostro caso va bene, eccettuato il fatto che manca la password, che va inserita dopo i due punti come segue:
postgres://postgres:banana@localhost:5432/calendar_api
# Passo 3
In grosso è fatto, ma la nostra API non ha ancora un modello. Navigando nella struttura creata da Feathers, apri il file src/models/giorno.model.js
. Il codice che definisce il modello è il seguente:
const giorno = sequelizeClient.define('giorno', {
text: {
type: DataTypes.STRING,
allowNull: false
}
},
// altro codice riguardante gli hooks
In pratica questo codice dice che la struttura della nostra risorsa è semplicemente una stringa. Quello che vogliamo creare è invece qualcosa del genere
data | evento |
---|---|
25-12-2019 | natale |
26-12-2019 | s. stefano |
Per ottenerlo dobbiamo modificare il codice come segue:
const giorno = sequelizeClient.define('giorno', {
data: {
type: DataTypes.DATEONLY,
allowNull: false
},
evento: {
type: DataTypes.STRING,
allowNull: false
}
},
// ... hooks ...
Salva il file così modificato.
# Passo 4
Congratulazioni, il servizio è completo! È ora di provarlo. Se hai installato http pie (opens new window) puoi usare il comando:
http POST :3030/giorno data=2019-12-25 evento=natale
Altrimenti con curl
curl -d '{"data":"2019-12-26", "evento":"s. stefano"}' -H "Content-Type: application/json" -X POST http://localhost:3030/giorno
I comandi qui sopra creano nuove risorse, per controllare il risultato possiamo andare all’indirizzo qui sotto con il browser
http://localhost:3030/giorno
Supponiamo di volere effettuare una query solo per i giorno successivi a natale. Sequelize offre la seguente sintassi di serie:
http://localhost:3030/giorno?data[$gt]=2019-12-25
Dove il $gt
sta per "greater than".
# Conclusione
Prototipare un’API non è mai stato così veloce e semplice. Tuttavia non bisogna farsi ingannare dalla troppa semplicità di questi strumenti innovativi. Il microservizio che abbiamo costruito in pochi minuti potrà anche funzionare e avere tutte le funzionalità che cercavamo inizialmente, ma in ogni sistema informativo che si rispetti questo è destinato a cambiare.
Con l’aumentare delle richieste di funzionalità sarà necessario aggiungere una struttura del codice più robusta o integrare con altri componenti software. Talvolta l’impostazione iniziale è talmente diversa dall’obiettivo che vogliamo raggiungere che è necessario cominciare da zero e riscrivere tutto in un linguaggio più estensibile e con tecnologie più flessibili.
Andrea Passaglia (opens new window)