Go SDK使用指导
本章节介绍了Go SDK的使用说明,您可以参考本章节进行快速集成开发。
开发前准备
- 已注册华为账号并开通华为云,完成实名认证。
国际站和欧洲站用户在以下情况下需要进行账号实名认证。
- 根据中国大陆相关法规要求,购买和使用中国大陆节点云产品服务的用户需要实名认证。
- 购买视频直播服务时,如果您选择的区域包含中国大陆,则需要实名认证。
- 具备已备案的域名用于直播推流和播放,并在视频直播控制台添加推流和播放域名,且已完成域名关联。
- 已具备开发环境 ,支持go 1.14及以上版本。
- 已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台访问密钥。 页面上创建和查看您的AK/SK。具体请参见
- 已获取直播服务对应区域的项目ID,请在华为云控制台API凭证。 页面上查看项目ID。具体请参见
安装SDK
视频直播服务端Go SDK支持go 1.14及以上版本。执行go version检查当前Go的版本信息。
使用go get安装华为云Go SDK,执行如下命令安装华为云Go SDK库以及相关依赖库,具体的SDK版本号请参见SDK开发中心。
1 2 3 4 |
# 安装华为云Go库 go get github.com/huaweicloud/huaweicloud-sdk-go-v3 # 安装依赖 go get github.com/json-iterator/go |
开始使用
- 导入依赖模块。
1 2 3 4 5 6 7 8 9 10
import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler" live "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1/model" "net/http" "os" )
- 配置客户端属性。
- 默认配置
1 2
# Use default configuration httpConfig := config.DefaultHttpConfig()
- (可选操作)配置代理。
1 2 3 4 5 6 7 8 9
// 根据需要配置网络代理 // 代理服务器的password直接写入代码,会有很大安全风险。建议密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。 // 代理配置设置前,请先在本地环境中设置环境变量PROXY_PASSWORD httpConfig.WithProxy(config.NewProxy(). WithSchema("http"). WithHost("proxy.huaweicloud.com"). WithPort(80). WithUsername("testuser"). WithPassword(os.Getenv("PROXY_PASSWORD")))
- (可选操作)配置连接。
1
httpConfig.WithTimeout(30);
- (可选操作)配置SSL。
1 2
// 根据需要配置是否跳过SSL证书校验 httpConfig.WithIgnoreSSLVerification(true);
- 默认配置
- 初始化认证信息。
支持两种方式认证,您可以根据实际情况进行选择。
- 使用永久AK/SK
首先需要获取永久AK和SK,以及projectId,您可以参考开发前准备获取。
1 2 3 4 5
auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). Build()
- 使用临时AK/SK
首先需要获取临时AK、SK和SecurityToken,您可以通过token获取或者通过委托授权获取。
1 2 3 4 5 6
auth := basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). WithProjectId(projectId). WithSecurityToken(securityToken). Build()
相关参数说明如下所示:- ak:华为云账号Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。
- sk:华为云账号Secret Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。
- projectId:云服务所在项目ID ,根据您需要操作的项目所属区域选择对应的项目ID 。
- securityToken:采用临时AK/SK认证场景下的安全票据。
- 使用永久AK/SK
- 初始化客户端。
1 2 3 4 5 6 7
# 初始化直播服务的客户端 client := live.NewLiveClient( live.LiveClientBuilder(). WithEndpoints(endpoints). WithCredential(auth). WithHttpConfig(config.DefaultHttpConfig()). Build())
endpoint:直播服务应用区域和各服务的终端节点,具体请参见地区和终端节点。
- 发送请求并查看响应。
1 2 3 4 5 6 7 8 9 10
// 初始化请求,以调用接口查询直播转码模板为例 request := &model.ShowTranscodingsTemplateRequest{ Domain: "play.example.huaweicloud.com", } response, err := client.ShowTranscodingsTemplate(request) if err == nil { fmt.Printf("%+v\n",response) } else { fmt.Println(err) }
- 异常处理。
表1 异常处理 一级分类
一级分类说明
ServiceResponseError
service response error
url.Error
connect endpoint error
1 2 3 4 5 6 7
# 异常处理 response, err := client.ShowTranscodingsTemplate(request) if err == nil { fmt.Println(response) } else { fmt.Println(err) }
- 原始Http侦听器。
在某些场景下可能对业务发出的Http请求进行Debug,需要看到原始的Http请求和返回信息,SDK提供侦听器功能获取原始的和加密的Http请求和返回信息。
原始信息打印仅在debug阶段使用,请不要在生产系统中将原始的Http头和Body信息打印到日志,这些信息并未加密且其中包含敏感数据;当Body体为二进制内容,即Content-Type标识为二进制时body为"***",详细内容不输出。
认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
func RequestHandler(request http.Request) { fmt.Println(request) } func ResponseHandler(response http.Response) { fmt.Println(response) } client := live.NewLiveAPIClient( live.LiveAPIClientBuilder(). WithEndpoints([]string{"{your endpoint}"}). WithCredential( basic.NewCredentialsBuilder(). WithAk(os.Getenv("HUAWEICLOUD_SDK_AK")). WithSk(os.Getenv("HUAWEICLOUD_SDK_SK")). WithProjectId("{your project id}"). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler. NewHttpHandler(). AddRequestHandler(RequestHandler). AddResponseHandler(ResponseHandler))). Build())
代码示例
调用前请根据实际情况替换如下变量:{your endpoint} 以及 {your project id}。
认证用的AK、SK直接写入代码,会有很大安全风险,建议密文形式存放在配置文件或者环境变量中,待使用时再解密,以确保安全。
本示例以AK、SK保存在环境变量中为例。运行本示例前,请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
package main import ( "fmt" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler" live "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1" "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1/model" "net/http" "os" ) func RequestHandler(request http.Request) { fmt.Println(request) } func ResponseHandler(response http.Response) { fmt.Println(response) } func main() { client := live.NewLiveAPIClient( live.LiveAPIClientBuilder(). WithEndpoints([]string{"{your endpoint}"}). WithCredential( basic.NewCredentialsBuilder(). WithAk(os.Getenv("HUAWEICLOUD_SDK_AK")). WithSk(os.Getenv("HUAWEICLOUD_SDK_SK")). WithProjectId("{your project id}"). Build()). WithHttpConfig(config.DefaultHttpConfig(). WithIgnoreSSLVerification(true). WithHttpHandler(httphandler. NewHttpHandler(). AddRequestHandler(RequestHandler). AddResponseHandler(ResponseHandler))). Build()) request := &model.ShowTranscodingsTemplateRequest{ Domain: "play.example.huaweicloud.com", } response, err := client.ShowTranscodingsTemplate(request) if err == nil { fmt.Println("%+v\n",response) } else { fmt.Println(err) } } |