Neste capítulo, apresentaremos a programação web go e Json para criar um serviço web API com tipos de dados de resposta na forma de uma API.
package main import "encoding/json" import "net/http" import "fmt" type student struct { ID string Name string Grade int } var data = []student{ student{"E001", "ethan", 21}, student{"W001", "wick", 22}, student{"B001", "bourne", 23}, student{"B002", "bond", 23}, }
A estrutura do aluno acima é usada como o tipo de elemento de fatia de dados de amostra, armazenado na variável de dados.
Em seguida, crie uma função user() para lidar com o endpoint /users. Nesta função existe um processo de detecção do tipo de solicitação através da propriedade r.Method(), para saber se o tipo de solicitação é Post ou Get ou outro.
func users(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { var result, err = json.Marshal(data) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write(result) return } http.Error(w, "", http.StatusBadRequest) }
Se a solicitação for um GET (recuperação de dados), então os dados serão codificados em JSON
usado como resposta.
A instrução w.Header().Set("Content-Type", "application/json") é usada para
determine o tipo de resposta, nomeadamente como JSON. Enquanto r.Write()
usado para registrar dados como resposta.
Caso contrário, se a solicitação for inválida, a resposta será definida como erro usando
Função http.Error().
Configure também um manipulador para o endpoint /user. A diferença entre este endpoint e
/usuários acima é:
O endpoint /users retorna todos os dados de amostra existentes (matriz).
O endpoint /user retorna apenas um dado, retirado dos dados
amostra com base em seu ID. Neste endpoint, o cliente deve enviar
também as informações de identificação dos dados procurados
func user(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { var id = r.FormValue("id") var result []byte var err error for _, each := range data { if each.ID == id { result, err = json.Marshal(each) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } w.Write(result) return } } http.Error(w, "User not found", http.StatusNotFound) return } http.Error(w, "", http.StatusBadRequest) }
O método r.FormValue() é usado para recuperar dados do formulário enviados de
cliente, neste contexto o dado referido é o ID.
Ao usar esse ID, são pesquisados dados relevantes. Se houver, então
retornado como resposta. Caso contrário, erro 400, solicitação incorreta
retornado com a mensagem Usuário não encontrado.
Finalmente, implemente os dois manipuladores acima.
func main() { http.HandleFunc("/users", users) http.HandleFunc("/user", user) fmt.Println("starting web server at http://localhost:8080/") http.ListenAndServe(":8080", nil) }
Execute o programa, agora o servidor web está ativo e os dados podem ser consumidos.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3