对于一个请求,通常总是会有反馈的。请求是 request,反馈是 response。 这个是基础。
request
官网: https://docs.iris-go.com/iris/requests/url-query
headers
bind: https://docs.iris-go.com/iris/requests/headers
app.Get("/", handler)
func handler(ctx iris.Context) {
requestID := ctx.GetHeader("X-Request-Id")
authentication := ctx.GetHeader("Authentication")
}
URL Path Parameters
bind: https://docs.iris-go.com/iris/requests/url-path-params
app.Get("/{name}/{age:int}/{tail:path}", handler)
func handler(ctx iris.Context) {
params := ctx.Params()
name := params.Get("name")
age := params.GetIntDefault("age", 18)
tail := strings.Split(params.Get("tail"), "/")
}
更多 example:https://github.com/kataras/iris/tree/master/_examples/request-body
不过,如果仅仅只是拿到数据还是不够的。对类型检查,数据要求等也要处理了才更美。这里以 json 为例。
# 我们先定义一个 User 的结构体
type User struct {
Nickname string `json:"nickname" validate:"required"`
Gender int `json:"gender" validate:"gte=0,lte=2"`
Email string `json:"email" validate:"required,email"`
}
# 读数据进去
func Handler(ctx iris.Context) {
var user User
err := ctx.ReadJSON(&user)
if err != nil {
// Handle the error, below you will find the right way to do that...
if errs, ok := err.(validator.ValidationErrors); ok {
// Wrap the errors with JSON format, the underline library returns the errors as interface.
validationErrors := wrapValidationErrors(errs)
// Fire an application/json+problem response and stop the handlers chain.
ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
Title("Validation error").
Detail("One or more fields failed to be validated").
Type("/user/validation-errors").
Key("errors", validationErrors))
return
}
// It's probably an internal JSON error, let's dont give more info here.
ctx.StopWithStatus(iris.StatusInternalServerError)
return
}
ctx.JSON(iris.Map{"message": "OK"})
}
不仅如此,如果加入 orm 的数据库迁移就更好了。后边再去看吧。
Response
有了输入,那怎么可以少得了输出呢。
请看文档:https://docs.iris-go.com/iris/responses/json
# 试试
type User struct {
Nickname string `json:"nickname" validate:"required"`
Gender int `json:"gender" validate:"gte=0,lte=2"`
Email string `json:"email" validate:"required,email"`
}
func Get(ctx iris.Context) {
user := User{"给我一个理由忘记", 1, "admin@go.com"}
ctx.StatusCode(200)
ctx.JSON(user)
}
response 的时候, status code 这个很重要。常用的 code 200, 201, 403, 404 这些是需要根据场景来分配的。 response 返回的格式也有很多种。而作为 api,通常返回 json 格式的数据。
设置 http status code 码:
ctx.StatusCode(200)