Go: RESTful - método POST e uso do JSON
Afluentes: Sistemas Distribuídos e Mobile
Método POST e JSON
No exemplo a seguir estamos trabalhando agora com uma estrutura de objeto JSON. Nossa estrutura possui três variáveis do tipo string
, sendo elas o Id, Name e Email. Observe que essas variáveis iniciam com a letra maiúscula, sendo que significa que são atributos públicos da nossa struct
, ou se preferir pode chamar de Objeto.
Outra coisa importante é avisar ao nosso código que essas informações serão usadas para gerar o objeto JSON, assim como também precisamos declarar um nome. Isso é feito logo após a declaração do atributo. Por exemplo:
Name string `json:"name"`
Informamos assim que no objeto JSON a ser criado, o nome da informação será name. O nome pode ser diferente do atributo do objeto declarado na nossa struct
.
Veja que agora também temos uma outra coisa a fazer. Vamos declarar que nosso pacote é do tipo JSON e UTF-8, tal como a linha abaixo:
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
Podemos fazer isso logo no início da função que trata o método.
Dessa forma, a aplicação que vai consumir nosso serviço web vai saber como tratar a informação de forma mais específica.
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/rs/cors"
)
type User struct {
Id string `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
}
func main() {
var user User
router := http.NewServeMux()
router.HandleFunc("GET /info", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
json.NewEncoder(w).Encode(user)
})
router.HandleFunc("POST /info", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
err := json.NewDecoder(r.Body).Decode(&user)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
})
c := cors.AllowAll()
r := c.Handler(router)
err := http.ListenAndServe("localhost:8080", r)
if err != nil {
fmt.Println(err.Error())
}
}
Atividade
- Para o exemplo acima, crie as funções para tratar os métodos
DELETE
.