标签:md err api -- GRPC API Println Login metadata
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" >
测试完成。
标签:md,err,api,--,GRPC,API,Println,Login,metadata 来源: https://www.cnblogs.com/zhouqichen/p/14914901.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。