golang gin框架中使用protocol buffers和JSON兩種協議


首先,我使用protobuf作為IDL,然后提供HTTP POST + JSON BODY的方式來發送請求。
能不能使用HTTTP POST + PB序列化后的二進制BODY呢?
做了一下嘗試,非常簡單:

func Report(c *gin.Context) {
    req := protocols.ReportRequest{}
    var err error
    if c.ContentType() == "application/x-protobuf" {
        err = c.ShouldBindBodyWith(&req, binding.ProtoBuf)
    } else {
        err = c.BindJSON(&req)
    }
    if err != nil {
        c.JSON(200, protocols.ReportResponse{
            Code:    1,
            Message: "parse json error:" + err.Error(),
        })
        xlog.Warnf("parse json error:%s", err.Error())
        return
    }
    //do biz
}

然后調用端在POST數據的時候,在header中加上 Content-Type: application/x-protobuf
最后接口就能同時支持JSON和protobuf了。 Have fun 😃


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM