Skip to content

Commit df3d811

Browse files
authored
uc query return s3 domains (#159)
* s3 domains * Adjust doc * add query test
1 parent 9fe7c57 commit df3d811

File tree

3 files changed

+85
-1
lines changed

3 files changed

+85
-1
lines changed

storagev2/apis/query_bucket_v4/api.go

+45-1
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,44 @@ func (j *ApiDomains) validate() error {
229229
return nil
230230
}
231231

232+
// 主 S3 域名列表
233+
type PreferedS3Domains = []string
234+
235+
// S3 域名
236+
type S3Domains struct {
237+
RegionAlias string // S3 Region
238+
PreferedApiDomains PreferedS3Domains // 主 S3 域名列表
239+
}
240+
type jsonS3Domains struct {
241+
RegionAlias string `json:"region_alias"` // S3 Region
242+
PreferedApiDomains PreferedS3Domains `json:"domains"` // 主 S3 域名列表
243+
}
244+
245+
func (j *S3Domains) MarshalJSON() ([]byte, error) {
246+
if err := j.validate(); err != nil {
247+
return nil, err
248+
}
249+
return json.Marshal(&jsonS3Domains{RegionAlias: j.RegionAlias, PreferedApiDomains: j.PreferedApiDomains})
250+
}
251+
func (j *S3Domains) UnmarshalJSON(data []byte) error {
252+
var nj jsonS3Domains
253+
if err := json.Unmarshal(data, &nj); err != nil {
254+
return err
255+
}
256+
j.RegionAlias = nj.RegionAlias
257+
j.PreferedApiDomains = nj.PreferedApiDomains
258+
return nil
259+
}
260+
func (j *S3Domains) validate() error {
261+
if j.RegionAlias == "" {
262+
return errors.MissingRequiredFieldError{Name: "RegionAlias"}
263+
}
264+
if len(j.PreferedApiDomains) == 0 {
265+
return errors.MissingRequiredFieldError{Name: "PreferedApiDomains"}
266+
}
267+
return nil
268+
}
269+
232270
// 存储空间服务域名
233271
type BucketQueryHost struct {
234272
RegionId string // 区域 ID
@@ -239,6 +277,7 @@ type BucketQueryHost struct {
239277
RsDomains RsDomains // 对象管理域名
240278
RsfDomains RsfDomains // 对象列举域名
241279
ApiDomains ApiDomains // API 域名
280+
S3Domains S3Domains // S3 域名
242281
}
243282
type jsonBucketQueryHost struct {
244283
RegionId string `json:"region"` // 区域 ID
@@ -249,13 +288,14 @@ type jsonBucketQueryHost struct {
249288
RsDomains RsDomains `json:"rs"` // 对象管理域名
250289
RsfDomains RsfDomains `json:"rsf"` // 对象列举域名
251290
ApiDomains ApiDomains `json:"api"` // API 域名
291+
S3Domains S3Domains `json:"s3"` // S3 域名
252292
}
253293

254294
func (j *BucketQueryHost) MarshalJSON() ([]byte, error) {
255295
if err := j.validate(); err != nil {
256296
return nil, err
257297
}
258-
return json.Marshal(&jsonBucketQueryHost{RegionId: j.RegionId, TimeToLive: j.TimeToLive, UpDomains: j.UpDomains, IoDomains: j.IoDomains, IoSrcDomains: j.IoSrcDomains, RsDomains: j.RsDomains, RsfDomains: j.RsfDomains, ApiDomains: j.ApiDomains})
298+
return json.Marshal(&jsonBucketQueryHost{RegionId: j.RegionId, TimeToLive: j.TimeToLive, UpDomains: j.UpDomains, IoDomains: j.IoDomains, IoSrcDomains: j.IoSrcDomains, RsDomains: j.RsDomains, RsfDomains: j.RsfDomains, ApiDomains: j.ApiDomains, S3Domains: j.S3Domains})
259299
}
260300
func (j *BucketQueryHost) UnmarshalJSON(data []byte) error {
261301
var nj jsonBucketQueryHost
@@ -270,6 +310,7 @@ func (j *BucketQueryHost) UnmarshalJSON(data []byte) error {
270310
j.RsDomains = nj.RsDomains
271311
j.RsfDomains = nj.RsfDomains
272312
j.ApiDomains = nj.ApiDomains
313+
j.S3Domains = nj.S3Domains
273314
return nil
274315
}
275316
func (j *BucketQueryHost) validate() error {
@@ -294,6 +335,9 @@ func (j *BucketQueryHost) validate() error {
294335
if err := j.ApiDomains.validate(); err != nil {
295336
return err
296337
}
338+
if err := j.S3Domains.validate(); err != nil {
339+
return err
340+
}
297341
return nil
298342
}
299343

storagev2/apistest/apis_test.go

+20
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/qiniu/go-sdk/v7/storagev2/errors"
1919
"github.com/qiniu/go-sdk/v7/storagev2/http_client"
2020
"github.com/qiniu/go-sdk/v7/storagev2/uptoken"
21+
"github.com/stretchr/testify/require"
2122
)
2223

2324
var (
@@ -105,3 +106,22 @@ func TestCreateBucket(t *testing.T) {
105106
t.FailNow()
106107
}
107108
}
109+
110+
func TestQuery(t *testing.T) {
111+
credentials := credentials.NewCredentials(testAK, testSK)
112+
113+
storage := apis.NewStorage(&http_client.Options{Credentials: credentials})
114+
115+
response, err := storage.QueryBucketV4(context.Background(), &apis.QueryBucketV4Request{
116+
Bucket: testBucket,
117+
AccessKey: testAK,
118+
}, nil)
119+
120+
require.NoError(t, err)
121+
122+
for _, host := range response.Hosts {
123+
require.NotNil(t, host.S3Domains)
124+
require.NotEmpty(t, host.S3Domains.RegionAlias)
125+
require.NotEmpty(t, host.S3Domains.PreferedApiDomains)
126+
}
127+
}

storagev2/internal/api-specs/query_bucket_v4.yml

+20
Original file line numberDiff line numberDiff line change
@@ -154,3 +154,23 @@ response:
154154
name: PreferedApiDomains
155155
documentation: 主 API 域名列表
156156
type: string
157+
- field_name: s3_domains
158+
key: s3
159+
documentation: S3 域名
160+
type:
161+
struct:
162+
name: S3Domains
163+
documentation: S3 域名
164+
fields:
165+
- field_name: region_alias
166+
key: region_alias
167+
documentation: S3 Region
168+
type: string
169+
- field_name: prefered_api_domains
170+
key: domains
171+
documentation: 主 S3 域名列表
172+
type:
173+
array:
174+
name: PreferedS3Domains
175+
documentation: 主 S3 域名列表
176+
type: string

0 commit comments

Comments
 (0)