El enrutamiento web es una técnica de asignación de solicitudes HTTP a funciones de controlador que operan en la ruta URL especificada. El enrutamiento se usa a menudo para crear aplicaciones de una sola página (SPA) y API. En el enrutador, el código define la secuencia de acciones que acompañan la solicitud de un usuario.

La biblioteca estándar de Go tiene la mayor parte de la funcionalidad que necesitará para crear aplicaciones web, incluido el enrutamiento. Puedes usar el Servir Mux escriba en el red/http paquete para el manejo básico de rutas. Si necesita un manejo de rutas más complejo, hay muchos paquetes de enrutamiento para elegir.

Primeros pasos con el enrutamiento en Go

El ecosistema de Go alberga paquetes de enrutamiento que abstraen lo innecesario y facilitan la creación de aplicaciones y servicios web.

Muchos marcos web de Go implementan algunos de estos paquetes de enrutamiento.

Aquí hay un modelo de estructura simple para el JSON respuesta que devolverá al cliente en este tutorial.

instagram viewer
escribe Información estructura {
Mensaje cuerda`json:"mensaje"`
Descripción cuerda`json:"descripción"`
}

La mayoría de los enrutadores Go todavía usan net/http escritor de respuestas y Solicitud métodos como parámetros en las funciones del controlador.

funciónHola(escritor http. ResponseWriter, solicitud *http. Solicitud) {
// lógica de negocios de la función del controlador aquí
}

Además, deberá iniciar un servidor con el escucharyservir método para iniciar el servidor en la mayoría de los paquetes.

error := http. Escuchar y servir (":8000", enrutador)

si error! = nulo {
devolver
}

Estos son algunos de los paquetes de enrutamiento populares en el ecosistema Go.

1. El enrutador Gorilla Mux

El paquete Gorilla Mux implementa un enrutador de solicitudes y un despachador de solicitudes para solicitudes HTTP. es como el http. Servir Mux método pero con funcionalidad añadida.

El enrutador Gorilla Mux implementa el http. Manipulador interfaz y sus métodos son compatibles con el Servir Mux método. El paquete también implementa múltiples esquemas de URL y puede usar enrutadores como subenrutadores (rutas anidadas) para definir rutas similares.

los Mux gorila El paquete es parte del conjunto de herramientas web de Gorilla. El kit de herramientas incluye paquetes relacionados con la web para resolver muchos problemas de mantener a los usuarios conectados con Sesiones al almacenamiento de datos mediante Cookies.

Ejecute este comando en la terminal de su espacio de trabajo para instalar el paquete Gorilla Mux.

Vamos obtener -u github.com/gorilla/mux

Así es como puede configurar un OBTENER ruta de solicitud a una función de controlador que codifica una respuesta JSON con el paquete Gorilla Mux.

importar (
"codificación/json"
"github.com/gorila/mux"
"Iniciar sesión"
"red/http"
)

funciónHola(escritor http. ResponseWriter, solicitud *http. Solicitud) {
respuesta := Información {
Mensaje: "Éxito",
Descripción: "Has escrito con éxito al cliente",
}

error: = json. NewEncoder (escritor).Encode (respuesta)

si error! = nulo {
Iniciar sesión. fatal (err)
}
}

funciónprincipal() {
enrutador: = mux. Nuevo enrutador ()
enrutador HandleFunc("/hola", hola).Métodos("GET")
error := http. Escuchar y servir (":8000", enrutador)

si error! = nulo {
devolver
}
}

los Hola La función del controlador codifica la estructura en JSON usando el Codificar metodo de la Codificador nuevo estructura

los principal función asigna una nueva instancia de enrutador Gorilla Mux al enrutador variable. Luego llama al HandleFunc método para asignar la ruta a la función del controlador. Puedes usar el Métodos método para especificar un tipo de solicitud.

2. El enrutador Chi

los enrutador chi es un enrutador ligero, rápido y componible para crear servicios web basados ​​en HTTP en Go. El enrutador Chi es compatible con el http paquete, y no hay dependencias externas para el enrutador.

A diferencia de muchos enrutadores, Chi proporciona control de contexto con el contexto paquete para el manejo oportuno de solicitudes.

Instale el enrutador Chi en sus módulos Go con este comando.

Vamos obtener github.com/Vamos-chi/chi

El enrutamiento con el enrutador Gorilla Mux y el enrutador Chi es muy similar. Así es como puede configurar un similar OBTENER solicitud que codifica la estructura en JSON como respuesta.

importar (
"codificación/json"
"github.com/Vamos-chi/chi/v5"
"Iniciar sesión"
"red/http"
)

funciónprincipal() {
enrutador: = chi. Nuevo enrutador ()
enrutador Obtener("/hola", hola)
error := http. Escuchar y servir (":8000", enrutador)

si error! = nulo {
devolver
}
}

funciónHola(escritor http. ResponseWriter, solicitud *http. Solicitud) {
respuesta := Información {
Mensaje: "Éxito",
Descripción: "Has escrito con éxito al cliente",
}

error: = json. NewEncoder (escritor).Encode (respuesta)

si error! = nulo {
Iniciar sesión. fatal (err)
}
}

los Hola función de controlador es la función de controlador para el OBTENER solicitud.

En el principal función, la enrutador La variable es una instancia de enrutador Chi. Puede especificar un método de solicitud con el nombre del método; en este caso, Obtener toma la ruta y el identificador de la función del controlador como parámetros.

3. El paquete HTTPRouter

los Enrutador Http El paquete es un multiplexor de solicitud liviano y de alto rendimiento. Proporciona más funcionalidad que el Servir Mux implementación del paquete http.

El paquete HttpRouter tiene una huella de memoria pequeña, alto rendimiento y buena escalabilidad. Es uno de los enrutadores más antiguos y utilizados en el ecosistema Go, implementado en muchos marcos Go populares, incluido la biblioteca de la ginebra.

Ejecutar este comando en la terminal de su directorio de trabajo instalará el paquete HttpRouter.

Vamos obtener github.com/julienschmidt/httprouter

El enrutamiento con HttpRouter difiere ligeramente de los enrutadores Chi y Gorilla Mux.

Así es como puede configurar una solicitud GET simple con el paquete HttpRouter.

importar (
"codificación/json"
"github.com/julienschmidt/httprouter"
"Iniciar sesión"
"red/http"
)

funciónprincipal() {
enrutador: = http enrutador. Nuevo()
enrutador GET("/hola", hola)
error := http. Escuchar y servir (":8000", enrutador)

si error! = nulo {
devolver
}
}

funciónHola(escritor http. ResponseWriter, solicitud *http. Solicitud, _ httprouter. parámetros) {
respuesta := Información {
Mensaje: "Éxito",
Descripción: "Has alcanzado con éxito el punto final de la API",
}

error: = json. NewEncoder (escritor).Encode (respuesta)

si error! = nulo {
Iniciar sesión. fatal (err)
}
}

Las funciones de controlador para el paquete HttpRouter deben tener el Parámetros método del enrutador HTTP.

los enrutador variable es una instancia de HttpRouter. Puede configurar una solicitud GET con el OBTENER método que toma la ruta y el identificador de la función del controlador.

4. El enrutador Pat

Palmadita es un multiplexor de solicitud HTTP estilo Sinatra que funciona con el paquete net/http de Go. El enrutador Pat no tiene otras funciones además del enrutamiento.

Ejecute este comando en su directorio de trabajo para instalar Pat Router

Vamos obtener github.com/bmizerany/pat

El enrutador Pat implementa funcionalidades similares al Servir Mux método.

Así es como puede manejar el enrutamiento de solicitudes con el palmadita paquete.

importar (
"codificación/json"
"github.com/bmizerany/pat"
"Iniciar sesión"
"red/http"
)

funciónHola(escritor http. ResponseWriter, solicitud *http. Solicitud) {
respuesta := Información {
Mensaje: "Éxito",
Descripción: "Has alcanzado con éxito el punto final",
}

error: = json. NewEncoder (escritor).Encode (respuesta)

si error! = nulo {
Iniciar sesión. fataln("err")
}
}

funciónprincipal() {
enrutador := pat. Nuevo() // instancia del enrutador
enrutador Obtener("/hola", http. HandlerFunc (hola))
http. Manejador("/", enrutador)
error := http. Escuchar y servir (":12345", nulo)

si error! = nulo {
Iniciar sesión. Fatal ("Escuchar y servir: ", err)
}
}

los Nuevo El método devuelve una instancia de enrutador. Tendrá que envolver la función del controlador con el HandlerFunc método. A continuación, puede utilizar el Resolver método para especificar una ruta raíz y montar la instancia del enrutador antes de iniciar un servidor.

Construir un enrutador no es tan difícil

Todos los enrutadores de este artículo implementan la funcionalidad de los paquetes net y http. Puede consultar la documentación del método ServeMux para aprender cómo replicar un enrutador con funcionalidad adicional para satisfacer sus necesidades.

Frameworks como Gin y Fiber incluyen funcionalidad de enrutamiento desde el paquete de red o paquetes externos que lo implementan.