# 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)

Comment Form is loading comments...