TUTORIAL GO – IMPLEMENTARE DEI SERVIZI HTTP

Nell’articolo di oggi vedremo come instanziare un server ed esporre dei servizi per lettura e scrittura di una entità. Per fare questo utilizzeremo 2 nuovi package “net/http” e “encoding/json”, il primo ci permette di instanziare il server e definire le azioni da intraprendere per dei path, il secondo ci consente agevolvemente di fare encoding e decoding di oggetti json.

Incominciamo instanziando il server e implementando un servizio di keepalive che serve a stabilire se il server è attivo regolarmente.

La funzione HandleFunc definisce il path e il relativo handler. Per handler si intende la funzione che verrà eseguita dal server in corrispondenza della richiesta riceveuta.

Se abbiamo fatto tutto bene invocando il servizio http://localhost:10000/isAlive riceveremo un 200 ok con testo alive.

A questo punto supponiamo di voler gestire una rubrica dei contatti e pertanto definiamo prima di tutto la nostra struct Contatto

La struct presenta 2 parametri Nome e Cognome e relative regole di trascodifica in json. Definiamo l’elenco dei contatti e lo inizializziamo con dei dati di prova, simulando la presenza di un database

Infine definiamo l’handler relativo

In tal modo invocando l’url http://localhost:10000/contatti otterremo il seguente json [{“Nome”:”nome 1″,”Cognome”:”Cognome 1″},{“Nome”:”nome 2″,”Cognome”:”Cognome 2″}]

Di seguito il codice completo

Il package http ci ha consentito di tirare su il server e configurare delle risposte su dei path statici. Il package ha dei limiti, non ci permette di configurare degli endpoint variabili ed esplicitare il metodo http supportato. Per superare questo limite ci viene in soccorso un nuovo package “github.com/gorilla/mux”. Il package va installato con il comando

A questo per tirare su il server e configurare opportunamente gli endpoint possiamo scrivere

Il packge ci mette a disposizione l’oggetto router che consente per ogni handler di definire maggiori proprietà per meglio mappare il comportamento

Il package ci consente agevolmente di leggere le path variable e superare i limiti del package net/http.

Di seguito il codice completo per l’analisi dei metodi restanti

Alla prossima