Skip to content

Commit fe54ffd

Browse files
authored
feat(google-api-go-client): add x-goog-api-version header (#2563)
1 parent b313e4b commit fe54ffd

File tree

6 files changed

+57
-18
lines changed

6 files changed

+57
-18
lines changed

google-api-go-generator/gen.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2223,7 +2223,12 @@ func (meth *Method) generateCode() {
22232223
if !meth.IsRawRequest() && args.bodyArg() != nil && httpMethod != "GET" {
22242224
contentType = `"application/json"`
22252225
}
2226-
pn(`reqHeaders := gensupport.SetHeaders(c.s.userAgent(), %s, c.header_ )`, contentType)
2226+
apiVersion := meth.m.APIVersion
2227+
if apiVersion == "" {
2228+
pn(`reqHeaders := gensupport.SetHeaders(c.s.userAgent(), %s, c.header_)`, contentType)
2229+
} else {
2230+
pn(`reqHeaders := gensupport.SetHeaders(c.s.userAgent(), %s, c.header_, "x-goog-api-version", %q)`, contentType, apiVersion)
2231+
}
22272232
if httpMethod == "GET" {
22282233
pn(`if c.ifNoneMatch_ != "" {`)
22292234
pn(` reqHeaders.Set("If-None-Match", c.ifNoneMatch_)`)

google-api-go-generator/internal/disco/disco.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ type Method struct {
368368
Scopes []string
369369
MediaUpload *MediaUpload
370370
SupportsMediaDownload bool
371+
APIVersion string
371372

372373
JSONMap map[string]interface{} `json:"-"`
373374
}

google-api-go-generator/testdata/any.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@
433433
"list": {
434434
"id": "logging.projects.logs.list",
435435
"path": "v1beta3/projects/{projectsId}/logs",
436+
"apiVersion": "v1_20240501",
436437
"httpMethod": "GET",
437438
"description": "Lists log resources belonging to the specified project.",
438439
"parameters": {
@@ -477,6 +478,7 @@
477478
"delete": {
478479
"id": "logging.projects.logs.delete",
479480
"path": "v1beta3/projects/{projectsId}/logs/{logsId}",
481+
"apiVersion": "v1_20240501",
480482
"httpMethod": "DELETE",
481483
"description": "Deletes the specified log resource and all log entries contained in it.",
482484
"parameters": {
@@ -511,6 +513,7 @@
511513
"write": {
512514
"id": "logging.projects.logs.entries.write",
513515
"path": "v1beta3/projects/{projectsId}/logs/{logsId}/entries:write",
516+
"apiVersion": "v1_20240501",
514517
"httpMethod": "POST",
515518
"description": "Creates one or more log entries in a log. You must supply a list of `LogEntry` objects, named `entries`. Each `LogEntry` object must contain a payload object and a `LogEntryMetadata` object that describes the entry. You must fill in all the fields of the entry, metadata, and payload. You can also supply a map, `commonLabels`, that supplies default (key, value) data for the `entries[].metadata.labels` maps, saving you the trouble of creating identical copies for each entry.",
516519
"parameters": {
@@ -548,6 +551,7 @@
548551
"list": {
549552
"id": "logging.projects.logs.sinks.list",
550553
"path": "v1beta3/projects/{projectsId}/logs/{logsId}/sinks",
554+
"apiVersion": "v1_20240501",
551555
"httpMethod": "GET",
552556
"description": "Lists log sinks associated with the specified log.",
553557
"parameters": {
@@ -578,6 +582,7 @@
578582
"get": {
579583
"id": "logging.projects.logs.sinks.get",
580584
"path": "v1beta3/projects/{projectsId}/logs/{logsId}/sinks/{sinksId}",
585+
"apiVersion": "v1_20240501",
581586
"httpMethod": "GET",
582587
"description": "Gets the specified log sink resource.",
583588
"parameters": {
@@ -615,6 +620,7 @@
615620
"create": {
616621
"id": "logging.projects.logs.sinks.create",
617622
"path": "v1beta3/projects/{projectsId}/logs/{logsId}/sinks",
623+
"apiVersion": "v1_20240501",
618624
"httpMethod": "POST",
619625
"description": "Creates the specified log sink resource.",
620626
"parameters": {
@@ -648,6 +654,7 @@
648654
"update": {
649655
"id": "logging.projects.logs.sinks.update",
650656
"path": "v1beta3/projects/{projectsId}/logs/{logsId}/sinks/{sinksId}",
657+
"apiVersion": "v1_20240501",
651658
"httpMethod": "PUT",
652659
"description": "Creates or updates the specified log sink resource.",
653660
"parameters": {
@@ -688,6 +695,7 @@
688695
"delete": {
689696
"id": "logging.projects.logs.sinks.delete",
690697
"path": "v1beta3/projects/{projectsId}/logs/{logsId}/sinks/{sinksId}",
698+
"apiVersion": "v1_20240501",
691699
"httpMethod": "DELETE",
692700
"description": "Deletes the specified log sink resource.",
693701
"parameters": {
@@ -731,6 +739,7 @@
731739
"list": {
732740
"id": "logging.projects.logServices.list",
733741
"path": "v1beta3/projects/{projectsId}/logServices",
742+
"apiVersion": "v1_20240501",
734743
"httpMethod": "GET",
735744
"description": "Lists log services associated with log entries ingested for a project.",
736745
"parameters": {
@@ -774,6 +783,7 @@
774783
"list": {
775784
"id": "logging.projects.logServices.indexes.list",
776785
"path": "v1beta3/projects/{projectsId}/logServices/{logServicesId}/indexes",
786+
"apiVersion": "v1_20240501",
777787
"httpMethod": "GET",
778788
"description": "Lists log service indexes associated with a log service.",
779789
"parameters": {
@@ -835,6 +845,7 @@
835845
"list": {
836846
"id": "logging.projects.logServices.sinks.list",
837847
"path": "v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks",
848+
"apiVersion": "v1_20240501",
838849
"httpMethod": "GET",
839850
"description": "Lists log service sinks associated with the specified service.",
840851
"parameters": {
@@ -865,6 +876,7 @@
865876
"get": {
866877
"id": "logging.projects.logServices.sinks.get",
867878
"path": "v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks/{sinksId}",
879+
"apiVersion": "v1_20240501",
868880
"httpMethod": "GET",
869881
"description": "Gets the specified log service sink resource.",
870882
"parameters": {
@@ -902,6 +914,7 @@
902914
"create": {
903915
"id": "logging.projects.logServices.sinks.create",
904916
"path": "v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks",
917+
"apiVersion": "v1_20240501",
905918
"httpMethod": "POST",
906919
"description": "Creates the specified log service sink resource.",
907920
"parameters": {
@@ -935,6 +948,7 @@
935948
"update": {
936949
"id": "logging.projects.logServices.sinks.update",
937950
"path": "v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks/{sinksId}",
951+
"apiVersion": "v1_20240501",
938952
"httpMethod": "PUT",
939953
"description": "Creates or update the specified log service sink resource.",
940954
"parameters": {
@@ -975,6 +989,7 @@
975989
"delete": {
976990
"id": "logging.projects.logServices.sinks.delete",
977991
"path": "v1beta3/projects/{projectsId}/logServices/{logServicesId}/sinks/{sinksId}",
992+
"apiVersion": "v1_20240501",
978993
"httpMethod": "DELETE",
979994
"description": "Deletes the specified log service sink.",
980995
"parameters": {

google-api-go-generator/testdata/any.want

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ func (c *ProjectsLogServicesListCall) Header() http.Header {
749749
}
750750

751751
func (c *ProjectsLogServicesListCall) doRequest(alt string) (*http.Response, error) {
752-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
752+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
753753
if c.ifNoneMatch_ != "" {
754754
reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
755755
}
@@ -932,7 +932,7 @@ func (c *ProjectsLogServicesIndexesListCall) Header() http.Header {
932932
}
933933

934934
func (c *ProjectsLogServicesIndexesListCall) doRequest(alt string) (*http.Response, error) {
935-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
935+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
936936
if c.ifNoneMatch_ != "" {
937937
reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
938938
}
@@ -1059,7 +1059,7 @@ func (c *ProjectsLogServicesSinksCreateCall) Header() http.Header {
10591059
}
10601060

10611061
func (c *ProjectsLogServicesSinksCreateCall) doRequest(alt string) (*http.Response, error) {
1062-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
1062+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_, "x-goog-api-version", "v1_20240501")
10631063
var body io.Reader = nil
10641064
body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
10651065
if err != nil {
@@ -1165,7 +1165,7 @@ func (c *ProjectsLogServicesSinksDeleteCall) Header() http.Header {
11651165
}
11661166

11671167
func (c *ProjectsLogServicesSinksDeleteCall) doRequest(alt string) (*http.Response, error) {
1168-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
1168+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
11691169
var body io.Reader = nil
11701170
c.urlParams_.Set("alt", alt)
11711171
c.urlParams_.Set("prettyPrint", "false")
@@ -1277,7 +1277,7 @@ func (c *ProjectsLogServicesSinksGetCall) Header() http.Header {
12771277
}
12781278

12791279
func (c *ProjectsLogServicesSinksGetCall) doRequest(alt string) (*http.Response, error) {
1280-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
1280+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
12811281
if c.ifNoneMatch_ != "" {
12821282
reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
12831283
}
@@ -1390,7 +1390,7 @@ func (c *ProjectsLogServicesSinksListCall) Header() http.Header {
13901390
}
13911391

13921392
func (c *ProjectsLogServicesSinksListCall) doRequest(alt string) (*http.Response, error) {
1393-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
1393+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
13941394
if c.ifNoneMatch_ != "" {
13951395
reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
13961396
}
@@ -1498,7 +1498,7 @@ func (c *ProjectsLogServicesSinksUpdateCall) Header() http.Header {
14981498
}
14991499

15001500
func (c *ProjectsLogServicesSinksUpdateCall) doRequest(alt string) (*http.Response, error) {
1501-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
1501+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_, "x-goog-api-version", "v1_20240501")
15021502
var body io.Reader = nil
15031503
body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
15041504
if err != nil {
@@ -1603,7 +1603,7 @@ func (c *ProjectsLogsDeleteCall) Header() http.Header {
16031603
}
16041604

16051605
func (c *ProjectsLogsDeleteCall) doRequest(alt string) (*http.Response, error) {
1606-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
1606+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
16071607
var body io.Reader = nil
16081608
c.urlParams_.Set("alt", alt)
16091609
c.urlParams_.Set("prettyPrint", "false")
@@ -1749,7 +1749,7 @@ func (c *ProjectsLogsListCall) Header() http.Header {
17491749
}
17501750

17511751
func (c *ProjectsLogsListCall) doRequest(alt string) (*http.Response, error) {
1752-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
1752+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
17531753
if c.ifNoneMatch_ != "" {
17541754
reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
17551755
}
@@ -1881,7 +1881,7 @@ func (c *ProjectsLogsEntriesWriteCall) Header() http.Header {
18811881
}
18821882

18831883
func (c *ProjectsLogsEntriesWriteCall) doRequest(alt string) (*http.Response, error) {
1884-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
1884+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_, "x-goog-api-version", "v1_20240501")
18851885
var body io.Reader = nil
18861886
body, err := googleapi.WithoutDataWrapper.JSONReader(c.writelogentriesrequest)
18871887
if err != nil {
@@ -1987,7 +1987,7 @@ func (c *ProjectsLogsSinksCreateCall) Header() http.Header {
19871987
}
19881988

19891989
func (c *ProjectsLogsSinksCreateCall) doRequest(alt string) (*http.Response, error) {
1990-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
1990+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_, "x-goog-api-version", "v1_20240501")
19911991
var body io.Reader = nil
19921992
body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
19931993
if err != nil {
@@ -2093,7 +2093,7 @@ func (c *ProjectsLogsSinksDeleteCall) Header() http.Header {
20932093
}
20942094

20952095
func (c *ProjectsLogsSinksDeleteCall) doRequest(alt string) (*http.Response, error) {
2096-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
2096+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
20972097
var body io.Reader = nil
20982098
c.urlParams_.Set("alt", alt)
20992099
c.urlParams_.Set("prettyPrint", "false")
@@ -2205,7 +2205,7 @@ func (c *ProjectsLogsSinksGetCall) Header() http.Header {
22052205
}
22062206

22072207
func (c *ProjectsLogsSinksGetCall) doRequest(alt string) (*http.Response, error) {
2208-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
2208+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
22092209
if c.ifNoneMatch_ != "" {
22102210
reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
22112211
}
@@ -2317,7 +2317,7 @@ func (c *ProjectsLogsSinksListCall) Header() http.Header {
23172317
}
23182318

23192319
func (c *ProjectsLogsSinksListCall) doRequest(alt string) (*http.Response, error) {
2320-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
2320+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_, "x-goog-api-version", "v1_20240501")
23212321
if c.ifNoneMatch_ != "" {
23222322
reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
23232323
}
@@ -2425,7 +2425,7 @@ func (c *ProjectsLogsSinksUpdateCall) Header() http.Header {
24252425
}
24262426

24272427
func (c *ProjectsLogsSinksUpdateCall) doRequest(alt string) (*http.Response, error) {
2428-
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
2428+
reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_, "x-goog-api-version", "v1_20240501")
24292429
var body io.Reader = nil
24302430
body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
24312431
if err != nil {

internal/gensupport/params.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,15 @@ func SetOptions(u URLParams, opts ...googleapi.CallOption) {
5858
}
5959
}
6060

61-
// SetHeaders sets common headers for all requests.
62-
func SetHeaders(userAgent, contentType string, userHeaders http.Header) http.Header {
61+
// SetHeaders sets common headers for all requests. The keyvals header pairs
62+
// should have a corresponding value for every key provided. If there is an odd
63+
// number of keyvals this method will panic.
64+
func SetHeaders(userAgent, contentType string, userHeaders http.Header, keyvals ...string) http.Header {
6365
reqHeaders := make(http.Header)
6466
reqHeaders.Set("x-goog-api-client", "gl-go/"+GoVersion()+" gdcl/"+internal.Version)
67+
for i := 0; i < len(keyvals); i = i + 2 {
68+
reqHeaders.Set(keyvals[i], keyvals[i+1])
69+
}
6570
reqHeaders.Set("User-Agent", userAgent)
6671
if contentType != "" {
6772
reqHeaders.Set("Content-Type", contentType)

internal/gensupport/params_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
package gensupport
66

77
import (
8+
"net/http"
89
"testing"
910

1011
"google.golang.org/api/googleapi"
@@ -18,3 +19,15 @@ func TestSetOptionsGetMulti(t *testing.T) {
1819
t.Fatalf("URLParams.Encode() = %q, want %q", got, want)
1920
}
2021
}
22+
23+
func TestSetHeaders(t *testing.T) {
24+
userAgent := "google-api-go-client/123"
25+
contentType := "application/json"
26+
userHeaders := make(http.Header)
27+
userHeaders.Set("baz", "300")
28+
got := SetHeaders(userAgent, contentType, userHeaders, "foo", "100", "bar", "200")
29+
30+
if len(got) != 6 {
31+
t.Fatalf("SetHeaders() = %q, want len(6)", got)
32+
}
33+
}

0 commit comments

Comments
 (0)