Chirpstack笔记 -- GRPC API 的调用

Chirpstack GRPC API 的调用

首先进入ChirpStack的官网

https://www.chirpstack.io/

Chirpstack笔记 -- GRPC API 的调用

 

 

 

 

 

 

 

在Application Server 可以看到GRPC的 chirpstack-api,点击进入github,

Chirpstack笔记 -- GRPC API 的调用

 

 

 

 

 

 

 

Chirpstack笔记 -- GRPC API 的调用

 

 

 

可以看到上图目录结构

这里选go语言做例子

进入go的文件夹,里面是封装好的.pb.go文件

 

Chirpstack笔记 -- GRPC API 的调用

 

 

 

将代码下载到本地,用编译器启动,这里用的是Goland

 

接下来就可以编写测试代码了

先找到readme.md对应的语言的api文档,查询需要的函数

Chirpstack笔记 -- GRPC API 的调用

 

 

 怎么查看文档就不用说了,根据需求查询对应函数

 

这里测试例子是获取JWT的Login方法

在目录下找出 InternalServiceClient,它的下方有Login方法

Chirpstack笔记 -- GRPC API 的调用

 

 

 

在调用方法之前,先找到返回此接口类型实例的函数,也在同一个文件下

Chirpstack笔记 -- GRPC API 的调用

回头看Login方法传入的参数,查看 LoginRequest 是什么

Chirpstack笔记 -- GRPC API 的调用

结构体参数需要 Email 、Password

lora server 的账号密码默认都为admin

Chirpstack笔记 -- GRPC API 的调用

 

 

 

根据以上的调用流程,以下为实例调用代码:

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

打印返回值

 Chirpstack笔记 -- GRPC API 的调用

 

 

在调用其他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" >

 

测试完成。

 

上一篇:Spark SQL 初探: 使用大数据分析2000万数据


下一篇:GitHub 标星 54K + 2K!这才是程序员写逼格满满的 PPT 的正确姿势!