transport.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. package transport
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "net/http"
  7. "standard/gokit/endpoint"
  8. )
  9. // Transport/transport.go 主要负责HTTP、gRpc、thrift等相关的逻辑
  10. // 这里有两个关键函数
  11. // DecodeRequest & EncodeResponse 函数签名是固定的哟
  12. // func DecodeRequest(c context.Context, request *http.Request) (interface{}, error)
  13. // func EncodeResponse(c context.Context, w http.ResponseWriter, response interface{}) error
  14. func HelloDecodeRequest(c context.Context, request *http.Request) (interface{}, error) {
  15. // 这里主要就是通过 request 拿到对应的参数构造成在 EndPoint中定义的 Request结构体即可
  16. name := request.URL.Query().Get("name")
  17. if name == "" {
  18. return nil, errors.New("无效参数")
  19. }
  20. // 这里返回的是
  21. return endpoint.HelloRequest{Name: name}, nil
  22. }
  23. // HelloEncodeResponse 通过响应封装成 EndPoint中定义的 Response结构体即可
  24. func HelloEncodeResponse(c context.Context, w http.ResponseWriter, response interface{}) error {
  25. // 这里将Response返回成有效的json格式给http
  26. // 设置请求头信息
  27. w.Header().Set("Content-Type", "application/json;charset=utf-8")
  28. // 使用内置json包转换
  29. return json.NewEncoder(w).Encode(response)
  30. }