Servidores Web, Manejo de datos de diferentes tipos

¿Cómo leer diferentes tipos de peticiones web?

Es posible realizar peticiones de diferentes tipos a la misma ruta, esto permite construir lo que conocemos como Rest APIs.

Ejemplo de lectura de diferentes tipos de peticiones web en Go

package main

import (
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Path != "/" {
            http.NotFound(w, r)
            return
        }
        switch r.Method {
        case "GET":
            w.Write([]byte("Peticion mediante GET"))
        case "POST":
            w.Write([]byte("Peticion mediante POST"))
        case "PUT":
            w.Write([]byte("Peticion mediante PUT"))
        case "DELETE":
            w.Write([]byte("Peticion mediante DELETE"))
        case "PATCH":
            w.Write([]byte("Peticion mediante PATCH"))
        default:
            w.Write([]byte("Peticion mediante metodo desconocido"))

        }
    })
    http.ListenAndServe(":8000", nil)
}

La clave para poder elegir que método utilizar es mediante el uso de switch.

switch r.Method {
case "GET":
    w.Write([]byte("Peticion mediante GET"))
case "POST":
    w.Write([]byte("Peticion mediante POST"))
case "PUT":
    w.Write([]byte("Peticion mediante PUT"))
case "DELETE":
    w.Write([]byte("Peticion mediante DELETE"))
case "PATCH":
    w.Write([]byte("Peticion mediante PATCH"))
default:
    w.Write([]byte("Peticion mediante metodo desconocido"))

}

Ahora podemos realizar peticiones al servidor mediante diferentes métodos utilizando curl.

$ curl http://localhost:8000/ -X GET
Peticion mediante GET
$ curl http://localhost:8000/ -X POST
Peticion mediante POST
$ curl http://localhost:8000/ -X PUT
Peticion mediante PUT
$ curl http://localhost:8000/ -X DELETE
Peticion mediante DELETE
$ curl http://localhost:8000/ -X PATCH
Peticion mediante PATCH