首先,我使用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 😃
