最近都在忙第三方广告对接的事情, 在此记录一下, 有些第三方的API
文档扔了一个word
文档,文档上几十上百个参数, 只有一个表格参数说明, 然后自己根据表格手写参数(真的折磨)
但是有几家就比较好, 会提供proto
文件, 然后可以使用这个文件生成Request
和Response
(点赞)
- 对接的时候, 可以找商务人员问有没有提供
proto
文件, 然后拿来自己生成代码protoc pbxxx.proto --go_out=.
- 生成之后, 请求参数, 响应参数, 枚举参数等等都有了, 对于后端对接非常舒服(希望以后后端的接口对接都能变成这样子)
- 实际发送请求的示例代码如下
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)
}