怎么优雅的统一返回数据格式(HTTPJSON)

dzdh · 2024-11-12 18:14:57 · 727 次点击

拿 php+laravel 来说。任何地方。抛异常。在 exceptionhandler 里就重写返回就行。

go 里边是咋处理的。也是中间件吗?自带的 http.handler 没有自己造个中间件出来?

中间件处理的话。这样?

interface Result { func Ok():any  func Err() Err }
interface Err {func Msg() any      func Code() int }

struct xx {
}
func (x *xx) Ok() any {
    return "xxx"
}

func (x *xx) Err () Err {
     return nil
}

func xx() Result {
   return &xx{sdfasfafa}
}
举报· 727 次点击
登录 注册 站外分享
6 条回复  
kidlj 小成 2024-11-12 19:19:14
虽然我喜欢 FSHEX ,打算以后再也不在评论区贴代码了,垃圾。
kidlj 小成 2024-11-12 19:17:03
Echo 框架: 1. 定义一个 errors package: package errors import ( "fmt" "net/http" "github.com/labstack/echo/v4" ) func ERROR(err error, c echo.Context) { code := http.StatusInternalServerError message := "Internal Server Error" if he, ok := err.(*echo.HTTPError); ok { code = he.Code message = fmt.Sprint(he.Message) } _ = c.JSON(code, echo.Map{ "success": false, "message": message, }) } 2. 将 ERROR 函数指定为 Echo 的统一处理函数: package main e := echo.New() e.HTTPErrorHandler = errors.ERROR 3. 在任意 handler 返回 err: func (h *Handler) createCluster(c echo.Context) error { payload := &ClusterPayload{} err := c.Bind(payload) if err != nil { return echo.NewHTTPError( http.StatusBadRequest, err.Error()) } if err := payload.validate(); err != nil { return echo.NewHTTPError( http.StatusBadRequest, err.Error()) } cluster, err := h.service.CreateCluster(c.Request().Context(), payload) if ent.IsConstraintError(err) { return echo.NewHTTPError( http.StatusBadRequest, err.Error()) } if err != nil { fmt.Println(err) return echo.ErrInternalServerError } return c.JSON( http.StatusOK, echo.Map{ "success": true, "data": cluster, }) }
dyllen 小成 2024-11-12 19:12:19
你说对了,要用中间件处理,标准库的路由时没有中间件功能的,要么在自己造,要么用现成的框架。
aarontian 初学 2024-11-12 19:04:12
go 大把的框架+中间件,直接用就行了 可能 go 唯一麻烦的是得一路 return err ,可以考虑自定义一个兼容 error 的接口然后在 middleware 解析出 error_code 和 message
ninjashixuan 小成 2024-11-12 18:38:45
你都 php+laravel 那为什么 go 不 + gin/fiber/echo 等等都有 middleware ,不然就自己造轮子了。
ccccqqq 初学 2024-11-12 18:37:57
PHPer 不是低级的代名词。 建议仔细阅读 https://learnku.com/docs/guide/smart-questions/2032 如果无法解决,可以尝试访问 https://chatgpt.com/
返回顶部