Chirpstack笔记 -- GRPC API 的调用
Posted 洲陈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chirpstack笔记 -- GRPC API 的调用相关的知识,希望对你有一定的参考价值。
Chirpstack GRPC API 的调用
首先进入ChirpStack的官网
在Application Server 可以看到GRPC的 chirpstack-api,点击进入github,
可以看到上图目录结构
这里选go语言做例子
进入go的文件夹,里面是封装好的.pb.go文件
将代码下载到本地,用编译器启动,这里用的是Goland
接下来就可以编写测试代码了
先找到readme.md对应的语言的api文档,查询需要的函数
怎么查看文档就不用说了,根据需求查询对应函数
这里测试例子是获取JWT的Login方法
在目录下找出 InternalServiceClient,它的下方有Login方法
在调用方法之前,先找到返回此接口类型实例的函数,也在同一个文件下
回头看Login方法传入的参数,查看 LoginRequest 是什么
结构体参数需要 Email 、Password
lora server 的账号密码默认都为admin
根据以上的调用流程,以下为实例调用代码:
const (
Address string = "localhost:8080" // 服务端地址 xxx,xxx,xx,xxx:8080
)
func main() {
// 创建连接
conn, err := grpc.Dial(Address, grpc.WithInsecure())
if err != nil {
fmt.Println(err)
return
}
defer conn.Close()
// 返回值为 ApplicationServiceClient
loginClient := api.NewInternalServiceClient(conn)
// 构建Login的参数
loginreq := api.LoginRequest{
Email:"admin",
Password:"admin",
}
// 调用Login方法 参数一为context上下文、二为LoginRequest结构体
r, err := loginClient.Login(context.Background(),&loginreq)
if err != nil {
log.Println(err)
return
}
log.Println(r)
}
执行结果成功拿到返回的JWT
打印返回值
在调用其他grpc函数之前,得将获取的jwt设置进metadata,这样jwt校验就通过了
md := metadata.Pairs("authorization", JWT) // 刚刚获取的jwt ctx := metadata.NewOutgoingContext(context.Background(), md)
换个grpc函数调用测试一下
md := metadata.Pairs("authorization", r.Jwt) ctx := metadata.NewOutgoingContext(context.Background(), md) appClient := api.NewApplicationServiceClient(conn) req := api.GetApplicationRequest{ // 创建要发送的结构体 Id: 1, } // 根据ID获取应用 r2, err := appClient.Get(ctx,&req) if err != nil { log.Println(err) return } // 打印返回值 log.Println(r2)
打印返回值:
2021/06/21 17:43:55 application:<id:1 name:"APP-TEST" description:"\\346\\265\\213\\350\\257\\225" organization_id:1 service_profile_id:"15b399d7-01bb-441b-aa3b-e96ea 794f897" >
测试完成。
以上是关于Chirpstack笔记 -- GRPC API 的调用的主要内容,如果未能解决你的问题,请参考以下文章