Golang — Número a Palabra (Kata) REST API — pt. 3
En el post anterior vimos cómo obtener la entrada de usuario desde la CLI (Command Line Interface) y usar os.Args. En este veremos cómo utilizar el paquete net/http para manejar peticiones HTTP y generar una respuesta, luego modificaremos el código para utilizar gorilla/mux.
Empecemos por separar la funcionalidad con un nuevo branch:
git checkout -b rest-simple
La he llamado "rest-simple" porque en esta primera iteración no usaremos paquetes o librerías externas.
El código resultado es muy sencillo:
package main
import (
"fmt"
"net/http"
"strconv"
)
func main() {
http.HandleFunc("/n2w", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
queryParams := r.URL.Query()
input := queryParams.Get("num")
number, err := strconv.Atoi(input)
if err != nil {
http.Error(w, "Invalid input: numeric value required", http.StatusBadRequest)
} else {
response := []byte(fmt.Sprintf(`{"num": "%d", "word": "%s"}`, number, numToWord(number)))
w.Write(response)
}
})
port := 8080
fmt.Printf("Server is listening on port %d...\n", port)
err := http.ListenAndServe(fmt.Sprintf(":%d", port), nil)
if err != nil {
panic(err)
}
}
Al ser un servidor HTTP debemos preocuparnos por responder con el status code adecuado basado en el escenario…