Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用DescribeOrderInfo接口与原有go-SDK不兼容问题 #19

Closed
hantmac opened this issue Nov 13, 2018 · 7 comments
Closed

使用DescribeOrderInfo接口与原有go-SDK不兼容问题 #19

hantmac opened this issue Nov 13, 2018 · 7 comments

Comments

@hantmac
Copy link

hantmac commented Nov 13, 2018

你好,我在使用你们提供的计费接口DescribeOrderInfo进行费用拉取,想在原有的sdk基础之上添加,仿照代码风格新建了一个模块ubiling:client.go, types_ubillings_order_infos.go,
describe_order_detail_info.go ,types_ubillings_resource_tag.go,调试的时候发现在ucloud/client.go的第93行,

// use response middle to build and convert response when response has been created. // such as retry, report traceback, print log and etc. for _, handler := range c.responseHandlers { resp, err = handler(c, req, resp, err) }
所返回的resp并不是response.CommonBase的格式,我在这之前,

body := httpResp.GetBody() for _, patch := range patches { body = patch.Patch(body) } fmt.Println(body) fmt.Println(string(body))

将http真正返回的body部分,打印出来,是包含orderInfo的正确的返回值;

但是在main.go中 采用以下代码,

`cfg, credential := loadConfig()
ubillingClient := ubillings.NewClient(cfg, credential)

req := ubillingClient.NewDescribeOrderDetailInfoRequest()
req.BeginTime = 1539417292
req.EndTime = 1542095692
req.SetRegion("kr-seoul-01")
req.Limit= 100


newUBilling, err := ubillingClient.DescribeOrderDetailInfo(req)

if err != nil {
	fmt.Println(err)
}

fmt.Println(newUBilling.OrderInfo)`

打印为空

ps: 目前计费部分的sdk我已经写完,有需要的话可以review,merge一下。

来自:ucloud用户的反馈

@yufeiminds
Copy link
Contributor

hi,@hantmac

感谢反馈,上面提到的问题需要具体的代码才能定位,针对 Issue 中所提问题的解答:

  • response.CommonBase 是基类,需要定义具体的 DescribeOrderDetailInfoResponse 才能正常反序列化
  • 因为 Golang 无法区分零值和空值,所以请求参数需要定义为指针类型,然后使用 req.BeginTime = ucloud.Int(1539417292) 才能正常序列化

可以 Fork 仓库将代码传上来,我们一起交流学习

@yufeiminds
Copy link
Contributor

欢迎成为 UCloud Contributors 的一员,可以按照下面的方式操作,我们会协助你将计费部分合并到 UCloud 仓库中。

  1. Fork 一个项目出来到自己的账号下,添加 SDK 的代码
  2. 我们会根据项目排期,有专门的同学一起沟通和交流
  3. Review 过程中,UCloud 的团队会向你的仓库提交一些补丁,包括
    1. 测试团队提供验收测试用例
    2. 一些 UCloud API 可能存在问题的补丁
  4. 测试通过后,合并代码到 UCloud SDK 仓库中

我们欢迎任何形式的 P&R,Issue,促进我们共同成长 ~ 👍

@hantmac
Copy link
Author

hantmac commented Nov 14, 2018

Hi, @yufeiminds ,

  1. 我已经将代码pull request,您可检查一下我定义的具体的 DescribeOrderDetailInfoResponse ;
  2. 刚刚按照你说的,req.BeginTime = ucloud.Int(1539417292),改了之后,response依然是:

{{DescribeOrderDetailInfoResponse 0 } []} retcode是对的;

感觉像是handler处理的时候出现问题,麻烦帮忙查一下,感谢~

@yufeiminds
Copy link
Contributor

新接口已经合并进主分支 (#20 #22),多谢贡献和反馈,也感谢你帮助我们发现了订单查询接口存在的问题。

如果需要更多的接口,可以在 Issue #21 中提及,我们会尽快通过 Code Generator 来生成 SDK。

虽然大部分接口 SDK 可以自动生成,但我们仍然希望能和社区的伙伴一起经历完整的协作流程,欢迎对以下任一项目的细节进行反馈和修正:

欢迎成为 UCloud Contributors 的一员,期待下一次交流。

如果没有其它问题,我们将关闭这个 Issue 😃

@hantmac
Copy link
Author

hantmac commented Nov 16, 2018

且慢,您那边测试,想下面这样使用ubill可以拿到正确的返回吗?

cfg, credential := loadConfig()
	ubillingClient := ubill.NewClient(cfg, credential)

	req := ubillingClient.NewDescribeOrderDetailInfoRequest()
	req.BeginTime = ucloud.Int(1539417292)
	req.EndTime = ucloud.Int(1542095692)
	req.SetRegion("kr-seoul-01")
	req.Limit= ucloud.Int(2)
	req.SetProjectId("org-04qk4t")


	newUBilling, err := ubillingClient.DescribeOrderDetailInfo(req)

	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(*newUBilling)

我用这种方式,response还是空的,我自己手动unmarshal的话是有response的。

@yufeiminds
Copy link
Contributor

我这边测试是有的,可以拉一下主分支的最新代码,我猜测是和合到主分支前我改的几个数据类型有关

另外 Region 和 ProjectId 这两个参数,也可以考虑使用

// 对该请求设置
req.Region = ucloud.String("kr-seoul-01")
req.ProjectId = ucloud.String("org-04qk4t")

// 对所有请求设置
cfg.Region = "kr-seoul-01"
cfg.ProjectId = "org-04qk4t"

这两种方法其中的一个,写起来更简洁一些

@hantmac
Copy link
Author

hantmac commented Nov 19, 2018

Solved

@hantmac hantmac closed this as completed Nov 19, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants