前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP 请求中使用 protobuf 协议数据

HTTP 请求中使用 protobuf 协议数据

作者头像
seth-shi
发布2023-12-18 15:22:03
2820
发布2023-12-18 15:22:03
举报
文章被收录于专栏:seth-shi的专栏seth-shi的专栏

最近都在忙第三方广告对接的事情, 在此记录一下, 有些第三方的API文档扔了一个word文档,文档上几十上百个参数, 只有一个表格参数说明, 然后自己根据表格手写参数(真的折磨)

但是有几家就比较好, 会提供proto文件, 然后可以使用这个文件生成RequestResponse(点赞)


  • 对接的时候, 可以找商务人员问有没有提供proto文件, 然后拿来自己生成代码
    • protoc pb\xxx.proto --go_out=.
    • 生成之后, 请求参数, 响应参数, 枚举参数等等都有了, 对于后端对接非常舒服(希望以后后端的接口对接都能变成这样子)
  • 实际发送请求的示例代码如下
代码语言:javascript
复制
package main

import (
	"bytes"
	"io/ioutil"
	"log"
	"net/http"

	"github.com/golang/protobuf/proto"
	"xxxx/internal/pb"
)

func main() {
	getDataByAdServe()
}

func getDataByAdServe() {

    // 序列化请求数据
    r := &pb.AdProfRequest{}
    data, er := proto.Marshal(r)
    if er != nil {
        log.Fatal(er)
        return
    }
    
    // 发送 HTTP 请求, 注意实际使用设置请求超时时间
    reader := bytes.NewReader(data)
    resp, err := http.Post("http://127.0.0.1:8001/xxx", "application/x-protobuf", reader)
    if err != nil {
        log.Println(err)
        return
    }
    defer resp.Body.Close()
    
    //
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Println(err)
        return
    }
    
    // 反序列化响应
    var res pb.AdProfResponse
    if err := proto.Unmarshal(body, &res); err != nil {
        log.Println(err)
        return
    }
    
    log.Println(&res)
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档