Para algunas aplicaciones simples, el valor predeterminado http.ServeMux
te puede llevar muy lejos. Si necesitas más poder en la forma de analizar
sintácticamente los puntos finales del URL y encaminarlos al controlador
adecuado, posiblemente tengas que utilizar una biblioteca de enrutamiento
de terceros. Para este tutorial, vamos a utilizar la conocida biblioteca
github.com/gorilla/mux
como nuestro enrutador. github.com/gorilla/mux
es una gran opción para un enrutador, ya que tiene una interfaz que le es
familiar a los usuarios de http.ServeMux
, sin embargo, tiene un montón
de características adicionales construidas en torno a la idea de encontrar
el http.Handler
adecuado para la ruta al URL dado.
En este ejemplo, crearemos algún enrutamiento para un recurso REST
llamado "mensajes". A continuación definiremos mecanismos para ver el
índice, mostrar, crear, actualizar, destruir y editar mensajes.
Afortunadamente con github.com/gorilla/mux
, no tenemos que hacer
demasiadas operaciones copiar/pegar para lograrlo.
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main () {
r:. = mux.NewRouter()StrictSlash(false)
r.HandleFunc("/", ControladorInicio)
// Colección de mensajes
mensajes: = r.Path("/mensajes").Subrouter()
mensajes.Methods("GET").HandlerFunc(ControladorIndiceMensajes)
mensajes.Methods("POST").HandlerFunc(ControladorCreaMensajes)
// Mensaje singular
mensaje: = r.PathPrefix("/mensajes/{id}").Subrouter()
mensaje.Methods("GET").Path("/editar").HandlerFunc(ControladorEditarMensaje)
mensaje.Methods("GET").HandlerFunc(ControladorMostrarMensaje)
mensaje.Methods("PUT", "POST").HandlerFunc(ControladorActualizaMensaje)
mensaje.Methods("DELETE").HandlerFunc(ControladorEliminaMensaje)
fmt.Println("Iniciando el servidor en :8080")
http.ListenAndServe(":8080", r)
}
func ControladorInicio(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "Inicio")
}
func ControladorIndiceMensajes(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "índice de mensajes")
}
func ControladorCreaMensajes(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "crear mensajes")
}
func ControladorMostrarMensaje(rw http.ResponseWriter, r *http.Request) {
id: = mux.Vars(r)["id"]
fmt.Fprintln(rw, "mostrando mensaje", id)
}
func ControladorActualizaMensaje(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "actualizando mensaje")
}
func ControladorEliminaMensaje(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "borrar mensaje")
}
func ControladorEditarMensaje(rw http.ResponseWriter, r *http.Request) {
fmt.Fprintln(rw, "editar mensaje")
}
github.com/gorilla/mux
.github.com/gorilla/mux
con el
http.Handler
existente tal como http.FileServer
.