zoukankan      html  css  js  c++  java
  • 4.通过HttpMethod执行不同的服务方法

    package Services
    
    import (
        "context"
        "fmt"
        "github.com/go-kit/kit/endpoint"
    )
    
    type UserRequest struct { //封装User请求结构体,包含参数名和方法
        Uid    int `json:"uid"`
        Method string
    }
    
    type UserResponse struct {
        Result string `json:"result"`
    }
    
    func GenUserEnPoint(userService IUserService) endpoint.Endpoint {
        return func(ctx context.Context, request interface{}) (response interface{}, err error) {
            r := request.(UserRequest) //通过类型断言获取请求结构体
            result := "nothings"
            if r.Method == "GET" { //通过判断请求方法走不通的处理方法
                result = userService.GetName(r.Uid)
            } else if r.Method == "DELETE" {
                err := userService.DelUser(r.Uid)
                if err != nil {
                    result = err.Error()
                } else {
                    result = fmt.Sprintf("userid为%d的用户已删除", r.Uid)
                }
            }
            return UserResponse{Result: result}, nil
        }
    }
    

    Transport

    package Services
    
    import (
        "context"
        "encoding/json"
        "errors"
        mymux "github.com/gorilla/mux"
        "net/http"
        "strconv"
    )
    
    func DecodeUserRequest(c context.Context, r *http.Request) (interface{}, error) { //这个函数决定了使用哪个request来请求
        vars := mymux.Vars(r)
        if uid, ok := vars["uid"]; ok {
            uid, _ := strconv.Atoi(uid)
            return UserRequest{Uid: uid, Method: r.Method}, nil //组装请求参数和方法
        }
        return nil, errors.New("参数错误") //如果发生错误返回给客户端这个错误,如果没有返回endpoint的执行结果
    }
    
    func EncodeUserResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
        w.Header().Set("Content-type", "application/json")
        return json.NewEncoder(w).Encode(response)
    }
    

    EndPoint

    package Services
    
    import (
        "context"
        "fmt"
        "github.com/go-kit/kit/endpoint"
    )
    
    type UserRequest struct { //封装User请求结构体
        Uid    int `json:"uid"`
        Method string
    }
    
    type UserResponse struct {
        Result string `json:"result"`
    }
    
    func GenUserEnPoint(userService IUserService) endpoint.Endpoint { //当EncodeUserRequest和DecodeUserResponse都不报错的时候才会走这个函数
        return func(ctx context.Context, request interface{}) (response interface{}, err error) {
            r := request.(UserRequest) //通过类型断言获取请求结构体
            result := "nothings"
            if r.Method == "GET" {
                result = userService.GetName(r.Uid)
            } else if r.Method == "DELETE" {
                err := userService.DelUser(r.Uid)
                if err != nil {
                    result = err.Error()
                } else {
                    result = fmt.Sprintf("userid为%d的用户已删除", r.Uid)
                }
            }
            return UserResponse{Result: result}, nil
        }
    }
    




  • 相关阅读:
    帝国cms字母导航功能制作教程
    HTML 学习
    DOM
    C# DataTable 使用原创
    GridView中编辑状态下实现DropDownList默认值(原创)
    C#精髓 GridView72大绝技(清清月儿)
    SQL注入攻击<收藏>
    Web网页安全色谱<收藏>
    GridView根据linkButton值不同跳转不同页面(原创)
    解决"Failed to access IIS metabase"
  • 原文地址:https://www.cnblogs.com/hualou/p/12076471.html
Copyright © 2011-2022 走看看