Golang Básico 2/2

Kairos DS, 2019-03

El Profe

@pinchito
Desarrollador senior Devo

Día 2: API Rest


Entorno de ejecución


Herramientas estándar


Servidor HTTP


API Rest


Pruebas

Entorno de ejecución


How to Write Go Code

Herramientas Estándar


Command go

Servidor Http


Paquete http

func Handle(pattern string, handler Handler) 
Añade un manejador

func ListenAndServe(addr string, handler Handler) error 
Crea un servidor HTTP

Sesión práctica 1: ¡Hola, Mundo! web


import (
"io"
"log"
"net/http"
)

func main() {
// Hello world, the web server

helloHandler := func(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, "Hello, world!\n")
}

http.HandleFunc("/hello", helloHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}


Servidor con Handler


Modifica el servidor para usar un Handler

Well done!





👍

API Rest


Funciones siguiendo la semántica de HTTP

get: no destructivo, idempotente

post: crea un objeto

put: actualiza un objeto, idempotente

delete: borra un objeto, idempotente

Sesión práctica 2: API Rest


Crea un servidor web

Similar a Memcached

Comandos: get, set, delete

Especificación Técnica


GET /get/key 
Devuelve el valor de la clave, o cadena vacía

GET /set/key/value 
Fija el valor de la clave
(debería ser POST)

GET /delete/key 
Borra la clave
(debería ser DELETE)

Ayuda


make(map[string]string) 
Crea un mapa de strings

mux sync.Mutex 
Declara un mutex para proteger el acceso a un mapa

Well done!





👌

Creación de Paquete


Carpeta independiente


Funciones en mayúscula exportadas


Importado desde fuera

Sesión Práctica 3: Paquete


Crea un paquete memcached


Añade las funciones para set, get, delete


Accede al paquete desde el servidor

Well Done!





😎

Tests


testing

sesión Práctica 4: tests


Crea un test para cada función del mapa

Crea tests para la API Rest

Ayuda


func TestAbs(t *testing.T) 
Crea una función de prueba en un fichero _test.go

func Get(url string) (resp *Response, err error) 
Lanza una petición get

Well done





😼

Fin del día 2

@pinchito