O roteamento da Web é uma técnica de atribuição de solicitações HTTP a funções de manipulador que operam no caminho de URL especificado. O roteamento é frequentemente usado para criar aplicativos de página única (SPAs) e APIs. No roteador, o código define a sequência de ações que acompanham a solicitação de um usuário.
A biblioteca padrão Go tem a maioria das funcionalidades necessárias para criar aplicativos da Web, incluindo roteamento. Você pode usar o ServeMux digite o net/http pacote para manuseio básico de rotas. Se você precisar de um tratamento de rota mais complexo, há muitos pacotes de roteamento para escolher.
Introdução ao roteamento em Go
O ecossistema Go é o lar de pacotes de roteamento que abstraem o desnecessário e facilitam a criação de aplicativos e serviços da Web.
Muitos frameworks da web Go implementam alguns desses pacotes de roteamento.
Aqui está um modelo de estrutura simples para o JSON resposta você retornará ao cliente neste tutorial.
modelo Informações estrutura {
Mensagem corda`json:"mensagem"`
Descrição corda`json:"descrição"`
}
A maioria dos roteadores Go ainda usa a rede/http Escritor de respostas e Solicitar métodos como parâmetros em funções do manipulador.
funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
// lógica de negócios da função do manipulador aqui
}
Além disso, você precisará iniciar um servidor com o Ouvir e servir método para iniciar o servidor na maioria dos pacotes.
erro := http. Ouvir e Servir(":8000", roteador)
E se err!= nada {
Retorna
}
Aqui estão alguns dos pacotes de roteamento populares no ecossistema Go.
1. O roteador Gorilla Mux
O pacote Gorilla Mux implementa um roteador de solicitação e um despachante de solicitação para solicitações HTTP. É como o http. ServeMux mas com funcionalidade adicional.
O roteador Gorilla Mux implementa o http. Manipulador interface e seus métodos são compatíveis com o ServeMux método. O pacote também implementa vários esquemas de URL e você pode usar roteadores como subroteadores (rotas aninhadas) para definir rotas semelhantes.
o Gorila Mux pacote faz parte do kit de ferramentas da web Gorilla. O kit de ferramentas inclui pacotes relacionados à web para resolver muitos problemas de mantendo os usuários logados com Sessões ao armazenamento de dados usando Cookies.
Execute este comando no terminal do seu espaço de trabalho para instalar o pacote Gorilla Mux.
vai get -u github.com/gorilla/mux
Veja como você pode configurar um PEGUE request route para uma função de manipulador que codifica uma resposta JSON com o pacote Gorilla Mux.
importar (
"codificação/json"
"github.com/gorilla/mux"
"registro"
"rede/http"
)funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você gravou com sucesso no cliente",
}erro := json. NewEncoder (escritor).Encode (resposta)
E se err!= nada {
registro. Fataln (err)
}
}funçãoa Principal() {
roteador := mux. NovoRoteador()
roteador. HandleFunc("/hello", hello).Methods("GET")
erro := http. Ouvir e Servir(":8000", roteador)
E se err!= nada {
Retorna
}
}
o olá função handler codifica o struct para JSON usando o Codificar método do Novo Codificador estrutura.
o a Principal função atribui uma nova instância do roteador Gorilla Mux ao roteador variável. Em seguida, chama o HandleFunc método para mapear a rota para a função do manipulador. Você pode usar o Métodos método para especificar um tipo de solicitação.
2. O roteador Chi
o Chi Router é um roteador leve, rápido e combinável para criar serviços da Web baseados em HTTP em Go. O roteador Chi é compatível com o http pacote e não há dependências externas para o roteador.
Ao contrário de muitos roteadores, o Chi fornece controle de contexto com o contexto pacote para tratamento de solicitação em tempo hábil.
Instale o roteador Chi em seus módulos Go com este comando.
vai obter github.com/vai-chi/chi
O roteamento com o roteador Gorilla Mux e o roteador Chi é muito semelhante. Veja como você pode configurar um similar PEGUE solicitação que codifica struct para JSON como resposta.
importar (
"codificação/json"
"github.com/vai-chi/chi/v5"
"registro"
"rede/http"
)funçãoa Principal() {
roteador := chi. NovoRoteador()
roteador. Get("/olá", olá)
erro := http. Ouvir e Servir(":8000", roteador)E se err!= nada {
Retorna
}
}funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você gravou com sucesso no cliente",
}erro := json. NewEncoder (escritor).Encode (resposta)
E se err!= nada {
registro. Fataln (err)
}
}
o olá função de manipulador é a função de manipulador para o PEGUE solicitar.
No a Principal função, o roteador variável é uma instância do roteador Chi. Você pode especificar um método de solicitação com o nome do método; nesse caso, Pegue recebe a rota e o identificador da função do manipulador como parâmetros.
3. O pacote HttpRouter
o HttpRouterName package é um multiplexador de solicitação leve e de alto desempenho. Ele fornece mais funcionalidade do que o ServeMux implementação do pacote http.
O pacote HttpRouter tem um pequeno volume de memória, alto desempenho e boa escalabilidade. É um dos roteadores mais antigos e usados no ecossistema Go, implementado em muitos estruturas Go populares, Incluindo a biblioteca de Gin.
Executar este comando no terminal do seu diretório de trabalho instalará o pacote HttpRouter.
vai obtenha github.com/julienschmidt/httprouter
O roteamento com o HttpRouter difere ligeiramente dos roteadores Chi e Gorilla Mux.
Veja como você pode configurar uma solicitação GET simples com o pacote HttpRouter.
importar (
"codificação/json"
"github.com/julienschmidt/httprouter"
"registro"
"rede/http"
)funçãoa Principal() {
roteador := httprouter. Novo()
roteador. GET("/olá", olá)
erro := http. Ouvir e Servir(":8000", roteador)E se err!= nada {
Retorna
}
}funçãoolá(escritor http. ResponseWriter, solicite *http. Pedido, _ httprouter. Parâmetros) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você atingiu com sucesso o endpoint da API",
}erro := json. NewEncoder (escritor).Encode (resposta)
E se err!= nada {
registro. Fataln (err)
}
}
As funções do manipulador para o pacote HttpRouter devem ter o Parâmetros método do roteador HTTP.
o roteador variável é uma instância de HttpRouter. Você pode configurar uma solicitação GET com o PEGUE método que recebe a rota e o identificador da função do manipulador.
4. O roteador Pat
Pat é um multiplexador de solicitação HTTP no estilo Sinatra que funciona com o pacote net/http do Go. O roteador Pat não possui outras funcionalidades além do roteamento.
Execute este comando em seu diretório de trabalho para instalar o Pat Router
vai obtenha github.com/bmizerany/pat
O roteador Pat implementa funcionalidades semelhantes ao roteador ServeMux método.
Veja como você pode lidar com o roteamento de solicitações com o tapinha pacote.
importar (
"codificação/json"
"github.com/bmizerany/pat"
"registro"
"rede/http"
)funçãoolá(escritor http. ResponseWriter, solicite *http. Solicitar) {
resposta := Informação {
Mensagem: "Sucesso",
Descrição: "Você atingiu o endpoint com sucesso",
}erro := json. NewEncoder (escritor).Encode (resposta)
E se err!= nada {
registro. Fataln("err")
}
}funçãoa Principal() {
roteador := pat. Novo() // instância do roteador
roteador. Get("/olá", http. HandlerFunc (olá))
http. Handle("/", roteador)
erro := http. Ouvir e Servir(":12345", nada)
E se err!= nada {
registro. Fatal("Ouvir e servir: ", err)
}
}
o Novo retorna uma instância de roteador. Você terá que envolver a função do manipulador com o HandlerFunc método. Você pode então usar o Lidar com método para especificar um caminho raiz e montar a instância do roteador antes de iniciar um servidor.
Construir um roteador não é tão difícil
Todos os roteadores neste artigo implementam a funcionalidade dos pacotes net e http. Você pode conferir a documentação do método ServeMux para saber como replicar um roteador com funcionalidade extra para atender às suas necessidades.
Frameworks como Gin e Fiber incluem funcionalidade de roteamento do pacote net ou pacotes externos que o implementam.