Работа с ответами в случае ошибок запроса, передать JSON и вернуть сообщение об ошибке или успехе - PullRequest
0 голосов
/ 26 сентября 2019

В 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))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...