В Go я кодирую сервер, который может правильно ответить на запрос, в следующих спецификациях:
REQUEST
Метод: POST
Путь: / register
Заголовки: "Content-Type": "application / json"
Body (пример): {"Name": "Lucas", "Email": "lucas@email.com", "Pass": "123456", "Gender": "masc"}
И я хочу вернуть что-то вроде этого
RESPONSES
Если метод недопустим:необходимо ответить на код 405 и указать пустое тело
Если заголовок недействителен: необходимо ответить на код 400, а текст {"message": "неверный заголовок"}
Если некоторая информация не заполненав: Код 400 и тело {"message": "недействительное тело"} должны быть даны ответы
В случае успеха: пользователь должен быть сохранен в одном срезе, и ему необходимо ответить, код 200 и тело {"сообщения":"пользователь успешно зарегистрирован"}
Вот что я пробовал до сих пор.
package main
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"time"
"github.com/gorilla/mux"
)
type User struct {
Name string `json:name`
Email string `json:email`
Pass string `json:pass`
Gender string `json:gender`
}
func main() {
StartServer()
}
// Function to Start the server
func StartServer() {
duration, _ := time.ParseDuration("1000ns")
r := mux.NewRouter()
r.HandleFunc("/signup", Signup).Methods("POST").HeadersRegexp("Content-Type", "application/json")
server := &http.Server{
Addr: "192.168.0.18:8082",
IdleTimeout: duration,
Handler: r,
}
log.Print(server.ListenAndServe())
}
// Function that recive a Request, deal with the errors e send a Response
func Signup(res http.ResponseWriter, req *http.Request) {
var u User
body, _ := ioutil.ReadAll(req.Body)
err := json.Unmarshal(body, &u)
if err != nil {
log.Println(err)
}
res.Write([]byte(body))
}