用户名和密码验证界面

Go语言作为后端语言常用的应用,最简单的就是做一个后端的用户名和密码验证了,这相当于后端的hello world,所以做一个简单的json验证的后端界面吧

要求

这是路径↓,post是用post方法来发送数据

[POST]/login

用户发送

{
    "username": "admin",
    "password": "123456",
    "token": "TOKEN"
}

如果TOKEN不对,返回json

{
    "code": 404
}

如果TOKEN对,用户名和密码不对,返回json信息

{
    "code": 400,
    "info": "wrong username or password"
}

如果TOKEN对,用户名和密码也对,返回json信息

{
    "code": 200,
    "session": "ABCD"
}

[GET]/sum

用户发送一系列数字如

{
    "number": [1, 2, 3, 4]
}

返回求和的结果

{
    "result": 10
}
代码
package main


import (
	"encoding/json"
	"io/ioutil"
	"net/http"
)


type User struct {
	Username string `json:"username"`
	Password string `json:"password"`
	Token    string `json:"token"`
}


type Sum struct {
	Number []int `json:"number"`
}


type Respond struct {
	Code       int32  `json:"code",omitempty`
	Infomation string `json:"info",omitempty`
	Session    string `json:"session",omitempty`
	Result     int32  `json:"result",omitempty`
}


func Compare(data User) Respond {
	var result Respond
	if data.Token != "TOKEN" {
		result.Code = 404
	} else if data.Username == "admin" && data.Password == "123456" {
		result.Code = 200
		result.Session = "ABCD"
	} else {
		result.Code = 400
		result.Infomation = "wrong username or password"
	}
	return result
}


func Login(writer http.ResponseWriter, request *http.Request) {
	defer request.Body.Close()
	con, _ := ioutil.ReadAll(request.Body)
	var data User
	json.Unmarshal(con, &data)
	con, _ = json.Marshal(Compare(data))
	writer.Write(con)
}


func Get_sum(writer http.ResponseWriter, request *http.Request) {
	sum := 0
	defer request.Body.Close()
	con, _ := ioutil.ReadAll(request.Body)
	var data Sum
	json.Unmarshal(con, &data)
	for i := range data.Number {
		sum = sum + data.Number[i]
	}
	var result Respond
	result.Result = int32(sum)
	con, _ = json.Marshal(result)
	writer.Write(con)
}


func main() {
	http.HandleFunc("/Login", Login)
	http.HandleFunc("/sum", Get_sum)
	http.ListenAndServe("localhost:8080", nil)
}


注意
request.Body.Close()