阿里大鱼Golang SDK —— alidayu-go

前言

现如今短信服务基本已经成为每个产品的标配,短信验证码、通知短信等等。阿里大鱼(也称阿里大于,下统称为阿里大鱼)在国内算是比较好的短信服务平台了,作为阿里出品自然为开发者们提供了许多语言的SDK,但其中并不包括Golang,这也是alidayu-go产生的原因。 在使用alidayu-go的时候不能脱离官方文档,因为我们经常需要查询字段信息,传送门 => 阿里大鱼

安装、使用

安装、使用可以直接看Github上的README,很详细,这里就不赘述了。写这篇博客主要是想讲一下alidayu-go的扩展。

Github地址: https://github.com/gwpp/alidayu-go

扩展

这个SDK的关键点不是实现了阿里大鱼的3个API,而是给使用者提供了一个可以自有扩展的框架,以【短信发送记录查询】接口为例。

type AlibabaAliqinFcSmsNumQueryRequest struct {
    BizId       string `json:"biz_id"`
    RecNum      string `json:"rec_num"`
    QueryDate   string `json:"query_date"`
    CurrentPage string `json:"current_page"`
    PageSize    string `json:"page_size"`
}

func NewAlibabaAliqinFcSmsNumQueryRequest() *AlibabaAliqinFcSmsNumQueryRequest {
    return new(AlibabaAliqinFcSmsNumQueryRequest)
}

func (req *AlibabaAliqinFcSmsNumQueryRequest) GetMethodName() string {
    return "alibaba.aliqin.fc.sms.num.query"
}

func (req *AlibabaAliqinFcSmsNumQueryRequest) ParamsIsValid() error {
    if len(req.RecNum) == 0 {
        return errors.New("rec_num is required")
    }
    if len(req.QueryDate) == 0 {
        return errors.New("query_date is required")
    }
    if len(req.CurrentPage) == 0 {
        return errors.New("current_page is required")
    }
    if len(req.PageSize) == 0 {
        return errors.New("page_size is required")
    }

    return nil
}

这几十行代码几乎就是【短信发送记录查询】的全部了,可以发现非常简单。

  • 首先定义一个XXXRequest 结构体,在官方文档上找到对应接口说明,把接口请求参数作为XXXRequest的属性,并设置json tag。
  • 实现 AlibabaRequest interface的两个方法,便于TopClient获取该接口的method和校验参数合法性
  • 调用:
client := NewTopClient(APP_KEY, APP_SECRET)
req := NewXXXRequest()
req.aaa = "aaa"
req.bbb = "bbb"
response, err := client.Execute(req)
if err != nil {
    // code here ...
    return
}
// code here ...
  • 然后。。。。。。。。。然后就没有然后了,就这样,你就实现了一个XXXRequest

写在最后

笔者水平有限,如果大家发现了什么BUG,欢迎Github Issue我,或者直接下方评论,相互学习,共同进步。

    原文作者:gwpp
    原文地址: https://www.jianshu.com/p/8c5c6fcc82d4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞