• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html><body>
2<style>
3
4body, h1, h2, h3, div, span, p, pre, a {
5  margin: 0;
6  padding: 0;
7  border: 0;
8  font-weight: inherit;
9  font-style: inherit;
10  font-size: 100%;
11  font-family: inherit;
12  vertical-align: baseline;
13}
14
15body {
16  font-size: 13px;
17  padding: 1em;
18}
19
20h1 {
21  font-size: 26px;
22  margin-bottom: 1em;
23}
24
25h2 {
26  font-size: 24px;
27  margin-bottom: 1em;
28}
29
30h3 {
31  font-size: 20px;
32  margin-bottom: 1em;
33  margin-top: 1em;
34}
35
36pre, code {
37  line-height: 1.5;
38  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
39}
40
41pre {
42  margin-top: 0.5em;
43}
44
45h1, h2, h3, p {
46  font-family: Arial, sans serif;
47}
48
49h1, h2, h3 {
50  border-bottom: solid #CCC 1px;
51}
52
53.toc_element {
54  margin-top: 0.5em;
55}
56
57.firstline {
58  margin-left: 2 em;
59}
60
61.method  {
62  margin-top: 1em;
63  border: solid 1px #CCC;
64  padding: 1em;
65  background: #EEE;
66}
67
68.details {
69  font-weight: bold;
70  font-size: 14px;
71}
72
73</style>
74
75<h1><a href="servicemanagement_v1.html">Google Service Management API</a> . <a href="servicemanagement_v1.services.html">services</a> . <a href="servicemanagement_v1.services.configs.html">configs</a></h1>
76<h2>Instance Methods</h2>
77<p class="toc_element">
78  <code><a href="#create">create(serviceName, body, x__xgafv=None)</a></code></p>
79<p class="firstline">Creates a new service configuration (version) for a managed service.</p>
80<p class="toc_element">
81  <code><a href="#get">get(serviceName, configId, x__xgafv=None, view=None)</a></code></p>
82<p class="firstline">Gets a service configuration (version) for a managed service.</p>
83<p class="toc_element">
84  <code><a href="#list">list(serviceName, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
85<p class="firstline">Lists the history of the service configuration for a managed service,</p>
86<p class="toc_element">
87  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
88<p class="firstline">Retrieves the next page of results.</p>
89<p class="toc_element">
90  <code><a href="#submit">submit(serviceName, body, x__xgafv=None)</a></code></p>
91<p class="firstline">Creates a new service configuration (version) for a managed service based</p>
92<h3>Method Details</h3>
93<div class="method">
94    <code class="details" id="create">create(serviceName, body, x__xgafv=None)</code>
95  <pre>Creates a new service configuration (version) for a managed service.
96This method only stores the service configuration. To roll out the service
97configuration to backend systems please call
98CreateServiceRollout.
99
100Args:
101  serviceName: string, The name of the service.  See the [overview](/service-management/overview)
102for naming requirements.  For example: `example.googleapis.com`. (required)
103  body: object, The request body. (required)
104    The object takes the form of:
105
106{ # `Service` is the root object of Google service configuration schema. It
107    # describes basic information about a service, such as the name and the
108    # title, and delegates other aspects to sub-sections. Each sub-section is
109    # either a proto message or a repeated proto message that configures a
110    # specific aspect, such as auth. See each proto message definition for details.
111    #
112    # Example:
113    #
114    #     type: google.api.Service
115    #     config_version: 3
116    #     name: calendar.googleapis.com
117    #     title: Google Calendar API
118    #     apis:
119    #     - name: google.calendar.v3.Calendar
120    #     authentication:
121    #       providers:
122    #       - id: google_calendar_auth
123    #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
124    #         issuer: https://securetoken.google.com
125    #       rules:
126    #       - selector: "*"
127    #         requirements:
128    #           provider_id: google_calendar_auth
129  "control": { # Selects and configures the service controller used by the service.  The # Configuration for the service control plane.
130      # service controller handles features like abuse, quota, billing, logging,
131      # monitoring, etc.
132    "environment": "A String", # The service control environment to use. If empty, no control plane
133        # feature (like quota and billing) will be enabled.
134  },
135  "monitoredResources": [ # Defines the monitored resources used by this service. This is required
136      # by the Service.monitoring and Service.logging configurations.
137    { # An object that describes the schema of a MonitoredResource object using a
138        # type name and a set of labels.  For example, the monitored resource
139        # descriptor for Google Compute Engine VM instances has a type of
140        # `"gce_instance"` and specifies the use of the labels `"instance_id"` and
141        # `"zone"` to identify particular VM instances.
142        #
143        # Different APIs can support different monitored resource types. APIs generally
144        # provide a `list` method that returns the monitored resource descriptors used
145        # by the API.
146      "type": "A String", # Required. The monitored resource type. For example, the type
147          # `"cloudsql_database"` represents databases in Google Cloud SQL.
148          # The maximum length of this value is 256 characters.
149      "labels": [ # Required. A set of labels used to describe instances of this monitored
150          # resource type. For example, an individual Google Cloud SQL database is
151          # identified by values for the labels `"database_id"` and `"zone"`.
152        { # A description of a label.
153          "valueType": "A String", # The type of data that can be assigned to the label.
154          "description": "A String", # A human-readable description for the label.
155          "key": "A String", # The label key.
156        },
157      ],
158      "displayName": "A String", # Optional. A concise name for the monitored resource type that might be
159          # displayed in user interfaces. It should be a Title Cased Noun Phrase,
160          # without any article or other determiners. For example,
161          # `"Google Cloud SQL Database"`.
162      "name": "A String", # Optional. The resource name of the monitored resource descriptor:
163          # `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where
164          # {type} is the value of the `type` field in this object and
165          # {project_id} is a project ID that provides API-specific context for
166          # accessing the type.  APIs that do not use project information can use the
167          # resource name format `"monitoredResourceDescriptors/{type}"`.
168      "description": "A String", # Optional. A detailed description of the monitored resource type that might
169          # be used in documentation.
170    },
171  ],
172  "logs": [ # Defines the logs used by this service.
173    { # A description of a log type. Example in YAML format:
174        #
175        #     - name: library.googleapis.com/activity_history
176        #       description: The history of borrowing and returning library items.
177        #       display_name: Activity
178        #       labels:
179        #       - key: /customer_id
180        #         description: Identifier of a library customer
181      "labels": [ # The set of labels that are available to describe a specific log entry.
182          # Runtime requests that contain labels not specified here are
183          # considered invalid.
184        { # A description of a label.
185          "valueType": "A String", # The type of data that can be assigned to the label.
186          "description": "A String", # A human-readable description for the label.
187          "key": "A String", # The label key.
188        },
189      ],
190      "displayName": "A String", # The human-readable name for this log. This information appears on
191          # the user interface and should be concise.
192      "name": "A String", # The name of the log. It must be less than 512 characters long and can
193          # include the following characters: upper- and lower-case alphanumeric
194          # characters [A-Za-z0-9], and punctuation characters including
195          # slash, underscore, hyphen, period [/_-.].
196      "description": "A String", # A human-readable description of this log. This information appears in
197          # the documentation and can contain details.
198    },
199  ],
200  "systemParameters": { # ### System parameter configuration # System parameter configuration.
201      #
202      # A system parameter is a special kind of parameter defined by the API
203      # system, not by an individual API. It is typically mapped to an HTTP header
204      # and/or a URL query parameter. This configuration specifies which methods
205      # change the names of the system parameters.
206    "rules": [ # Define system parameters.
207        #
208        # The parameters defined here will override the default parameters
209        # implemented by the system. If this field is missing from the service
210        # config, default system parameters will be used. Default system parameters
211        # and names is implementation-dependent.
212        #
213        # Example: define api key for all methods
214        #
215        #     system_parameters
216        #       rules:
217        #         - selector: "*"
218        #           parameters:
219        #             - name: api_key
220        #               url_query_parameter: api_key
221        #
222        #
223        # Example: define 2 api key names for a specific method.
224        #
225        #     system_parameters
226        #       rules:
227        #         - selector: "/ListShelves"
228        #           parameters:
229        #             - name: api_key
230        #               http_header: Api-Key1
231        #             - name: api_key
232        #               http_header: Api-Key2
233        #
234        # **NOTE:** All service configuration rules follow "last one wins" order.
235      { # Define a system parameter rule mapping system parameter definitions to
236          # methods.
237        "parameters": [ # Define parameters. Multiple names may be defined for a parameter.
238            # For a given method call, only one of them should be used. If multiple
239            # names are used the behavior is implementation-dependent.
240            # If none of the specified names are present the behavior is
241            # parameter-dependent.
242          { # Define a parameter's name and location. The parameter may be passed as either
243              # an HTTP header or a URL query parameter, and if both are passed the behavior
244              # is implementation-dependent.
245            "urlQueryParameter": "A String", # Define the URL query parameter name to use for the parameter. It is case
246                # sensitive.
247            "httpHeader": "A String", # Define the HTTP header name to use for the parameter. It is case
248                # insensitive.
249            "name": "A String", # Define the name of the parameter, such as "api_key" . It is case sensitive.
250          },
251        ],
252        "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
253            # methods in all APIs.
254            #
255            # Refer to selector for syntax details.
256      },
257    ],
258  },
259  "id": "A String", # A unique ID for a specific instance of this message, typically assigned
260      # by the client for tracking purpose. If empty, the server may choose to
261      # generate one instead.
262  "backend": { # `Backend` defines the backend configuration for a service. # API backend configuration.
263    "rules": [ # A list of API backend rules that apply to individual API methods.
264        #
265        # **NOTE:** All service configuration rules follow "last one wins" order.
266      { # A backend rule provides configuration for an individual API element.
267        "selector": "A String", # Selects the methods to which this rule applies.
268            #
269            # Refer to selector for syntax details.
270        "minDeadline": 3.14, # Minimum deadline in seconds needed for this method. Calls having deadline
271            # value lower than this will be rejected.
272        "deadline": 3.14, # The number of seconds to wait for a response from a request.  The
273            # default depends on the deployment context.
274        "address": "A String", # The address of the API backend.
275      },
276    ],
277  },
278  "monitoring": { # Monitoring configuration of the service. # Monitoring configuration.
279      #
280      # The example below shows how to configure monitored resources and metrics
281      # for monitoring. In the example, a monitored resource and two metrics are
282      # defined. The `library.googleapis.com/book/returned_count` metric is sent
283      # to both producer and consumer projects, whereas the
284      # `library.googleapis.com/book/overdue_count` metric is only sent to the
285      # consumer project.
286      #
287      #     monitored_resources:
288      #     - type: library.googleapis.com/branch
289      #       labels:
290      #       - key: /city
291      #         description: The city where the library branch is located in.
292      #       - key: /name
293      #         description: The name of the branch.
294      #     metrics:
295      #     - name: library.googleapis.com/book/returned_count
296      #       metric_kind: DELTA
297      #       value_type: INT64
298      #       labels:
299      #       - key: /customer_id
300      #     - name: library.googleapis.com/book/overdue_count
301      #       metric_kind: GAUGE
302      #       value_type: INT64
303      #       labels:
304      #       - key: /customer_id
305      #     monitoring:
306      #       producer_destinations:
307      #       - monitored_resource: library.googleapis.com/branch
308      #         metrics:
309      #         - library.googleapis.com/book/returned_count
310      #       consumer_destinations:
311      #       - monitored_resource: library.googleapis.com/branch
312      #         metrics:
313      #         - library.googleapis.com/book/returned_count
314      #         - library.googleapis.com/book/overdue_count
315    "producerDestinations": [ # Monitoring configurations for sending metrics to the producer project.
316        # There can be multiple producer destinations, each one must have a
317        # different monitored resource type. A metric can be used in at most
318        # one producer destination.
319      { # Configuration of a specific monitoring destination (the producer project
320          # or the consumer project).
321        "monitoredResource": "A String", # The monitored resource type. The type must be defined in
322            # Service.monitored_resources section.
323        "metrics": [ # Names of the metrics to report to this monitoring destination.
324            # Each name must be defined in Service.metrics section.
325          "A String",
326        ],
327      },
328    ],
329    "consumerDestinations": [ # Monitoring configurations for sending metrics to the consumer project.
330        # There can be multiple consumer destinations, each one must have a
331        # different monitored resource type. A metric can be used in at most
332        # one consumer destination.
333      { # Configuration of a specific monitoring destination (the producer project
334          # or the consumer project).
335        "monitoredResource": "A String", # The monitored resource type. The type must be defined in
336            # Service.monitored_resources section.
337        "metrics": [ # Names of the metrics to report to this monitoring destination.
338            # Each name must be defined in Service.metrics section.
339          "A String",
340        ],
341      },
342    ],
343  },
344  "title": "A String", # The product title associated with this service.
345  "authentication": { # `Authentication` defines the authentication configuration for an API. # Auth configuration.
346      #
347      # Example for an API targeted for external use:
348      #
349      #     name: calendar.googleapis.com
350      #     authentication:
351      #       providers:
352      #       - id: google_calendar_auth
353      #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
354      #         issuer: https://securetoken.google.com
355      #       rules:
356      #       - selector: "*"
357      #         requirements:
358      #           provider_id: google_calendar_auth
359    "rules": [ # A list of authentication rules that apply to individual API methods.
360        #
361        # **NOTE:** All service configuration rules follow "last one wins" order.
362      { # Authentication rules for the service.
363          #
364          # By default, if a method has any authentication requirements, every request
365          # must include a valid credential matching one of the requirements.
366          # It's an error to include more than one kind of credential in a single
367          # request.
368          #
369          # If a method doesn't have any auth requirements, request credentials will be
370          # ignored.
371        "oauth": { # OAuth scopes are a way to define data and permissions on data. For example, # The requirements for OAuth credentials.
372            # there are scopes defined for "Read-only access to Google Calendar" and
373            # "Access to Cloud Platform". Users can consent to a scope for an application,
374            # giving it permission to access that data on their behalf.
375            #
376            # OAuth scope specifications should be fairly coarse grained; a user will need
377            # to see and understand the text description of what your scope means.
378            #
379            # In most cases: use one or at most two OAuth scopes for an entire family of
380            # products. If your product has multiple APIs, you should probably be sharing
381            # the OAuth scope across all of those APIs.
382            #
383            # When you need finer grained OAuth consent screens: talk with your product
384            # management about how developers will use them in practice.
385            #
386            # Please note that even though each of the canonical scopes is enough for a
387            # request to be accepted and passed to the backend, a request can still fail
388            # due to the backend requiring additional scopes or permissions.
389          "canonicalScopes": "A String", # The list of publicly documented OAuth scopes that are allowed access. An
390              # OAuth token containing any of these scopes will be accepted.
391              #
392              # Example:
393              #
394              #      canonical_scopes: https://www.googleapis.com/auth/calendar,
395              #                        https://www.googleapis.com/auth/calendar.read
396        },
397        "requirements": [ # Requirements for additional authentication providers.
398          { # User-defined authentication requirements, including support for
399              # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
400            "providerId": "A String", # id from authentication provider.
401                #
402                # Example:
403                #
404                #     provider_id: bookstore_auth
405            "audiences": "A String", # NOTE: This will be deprecated soon, once AuthProvider.audiences is
406                # implemented and accepted in all the runtime components.
407                #
408                # The list of JWT
409                # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
410                # that are allowed to access. A JWT containing any of these audiences will
411                # be accepted. When this setting is absent, only JWTs with audience
412                # "https://Service_name/API_name"
413                # will be accepted. For example, if no audiences are in the setting,
414                # LibraryService API will only accept JWTs with the following audience
415                # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
416                #
417                # Example:
418                #
419                #     audiences: bookstore_android.apps.googleusercontent.com,
420                #                bookstore_web.apps.googleusercontent.com
421          },
422        ],
423        "allowWithoutCredential": True or False, # Whether to allow requests without a credential. The credential can be
424            # an OAuth token, Google cookies (first-party auth) or EndUserCreds.
425            #
426            # For requests without credentials, if the service control environment is
427            # specified, each incoming request **must** be associated with a service
428            # consumer. This can be done by passing an API key that belongs to a consumer
429            # project.
430        "customAuth": { # Configuration for a custom authentication provider. # Configuration for custom authentication.
431          "provider": "A String", # A configuration string containing connection information for the
432              # authentication provider, typically formatted as a SmartService string
433              # (go/smartservice).
434        },
435        "selector": "A String", # Selects the methods to which this rule applies.
436            #
437            # Refer to selector for syntax details.
438      },
439    ],
440    "providers": [ # Defines a set of authentication providers that a service supports.
441      { # Configuration for an anthentication provider, including support for
442          # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
443        "audiences": "A String", # The list of JWT
444            # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
445            # that are allowed to access. A JWT containing any of these audiences will
446            # be accepted. When this setting is absent, only JWTs with audience
447            # "https://Service_name/API_name"
448            # will be accepted. For example, if no audiences are in the setting,
449            # LibraryService API will only accept JWTs with the following audience
450            # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
451            #
452            # Example:
453            #
454            #     audiences: bookstore_android.apps.googleusercontent.com,
455            #                bookstore_web.apps.googleusercontent.com
456        "jwksUri": "A String", # URL of the provider's public key set to validate signature of the JWT. See
457            # [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
458            # Optional if the key set document:
459            #  - can be retrieved from
460            #    [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html
461            #    of the issuer.
462            #  - can be inferred from the email domain of the issuer (e.g. a Google service account).
463            #
464            # Example: https://www.googleapis.com/oauth2/v1/certs
465        "id": "A String", # The unique identifier of the auth provider. It will be referred to by
466            # `AuthRequirement.provider_id`.
467            #
468            # Example: "bookstore_auth".
469        "issuer": "A String", # Identifies the principal that issued the JWT. See
470            # https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1
471            # Usually a URL or an email address.
472            #
473            # Example: https://securetoken.google.com
474            # Example: 1234567-compute@developer.gserviceaccount.com
475      },
476    ],
477  },
478  "usage": { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
479    "rules": [ # A list of usage rules that apply to individual API methods.
480        #
481        # **NOTE:** All service configuration rules follow "last one wins" order.
482      { # Usage configuration rules for the service.
483          #
484          # NOTE: Under development.
485          #
486          #
487          # Use this rule to configure unregistered calls for the service. Unregistered
488          # calls are calls that do not contain consumer project identity.
489          # (Example: calls that do not contain an API key).
490          # By default, API methods do not allow unregistered calls, and each method call
491          # must be identified by a consumer project identity. Use this rule to
492          # allow/disallow unregistered calls.
493          #
494          # Example of an API that wants to allow unregistered calls for entire service.
495          #
496          #     usage:
497          #       rules:
498          #       - selector: "*"
499          #         allow_unregistered_calls: true
500          #
501          # Example of a method that wants to allow unregistered calls.
502          #
503          #     usage:
504          #       rules:
505          #       - selector: "google.example.library.v1.LibraryService.CreateBook"
506          #         allow_unregistered_calls: true
507        "allowUnregisteredCalls": True or False, # True, if the method allows unregistered calls; false otherwise.
508        "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
509            # methods in all APIs.
510            #
511            # Refer to selector for syntax details.
512      },
513    ],
514    "producerNotificationChannel": "A String", # The full resource name of a channel used for sending notifications to the
515        # service producer.
516        #
517        # Google Service Management currently only supports
518        # [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
519        # channel. To use Google Cloud Pub/Sub as the channel, this must be the name
520        # of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
521        # documented in https://cloud.google.com/pubsub/docs/overview.
522    "requirements": [ # Requirements that must be satisfied before a consumer project can use the
523        # service. Each requirement is of the form <service.name>/<requirement-id>;
524        # for example 'serviceusage.googleapis.com/billing-enabled'.
525      "A String",
526    ],
527  },
528  "configVersion": 42, # The version of the service configuration. The config version may
529      # influence interpretation of the configuration, for example, to
530      # determine defaults. This is documented together with applicable
531      # options. The current default for the config version itself is `3`.
532  "producerProjectId": "A String", # The id of the Google developer project that owns the service.
533      # Members of this project can manage the service configuration,
534      # manage consumption of the service, etc.
535  "http": { # Defines the HTTP configuration for a service. It contains a list of # HTTP configuration.
536      # HttpRule, each specifying the mapping of an RPC method
537      # to one or more HTTP REST API methods.
538    "rules": [ # A list of HTTP configuration rules that apply to individual API methods.
539        #
540        # **NOTE:** All service configuration rules follow "last one wins" order.
541      { # `HttpRule` defines the mapping of an RPC method to one or more HTTP
542          # REST APIs.  The mapping determines what portions of the request
543          # message are populated from the path, query parameters, or body of
544          # the HTTP request.  The mapping is typically specified as an
545          # `google.api.http` annotation, see "google/api/annotations.proto"
546          # for details.
547          #
548          # The mapping consists of a field specifying the path template and
549          # method kind.  The path template can refer to fields in the request
550          # message, as in the example below which describes a REST GET
551          # operation on a resource collection of messages:
552          #
553          #
554          #     service Messaging {
555          #       rpc GetMessage(GetMessageRequest) returns (Message) {
556          #         option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}";
557          #       }
558          #     }
559          #     message GetMessageRequest {
560          #       message SubMessage {
561          #         string subfield = 1;
562          #       }
563          #       string message_id = 1; // mapped to the URL
564          #       SubMessage sub = 2;    // `sub.subfield` is url-mapped
565          #     }
566          #     message Message {
567          #       string text = 1; // content of the resource
568          #     }
569          #
570          # The same http annotation can alternatively be expressed inside the
571          # `GRPC API Configuration` YAML file.
572          #
573          #     http:
574          #       rules:
575          #         - selector: <proto_package_name>.Messaging.GetMessage
576          #           get: /v1/messages/{message_id}/{sub.subfield}
577          #
578          # This definition enables an automatic, bidrectional mapping of HTTP
579          # JSON to RPC. Example:
580          #
581          # HTTP | RPC
582          # -----|-----
583          # `GET /v1/messages/123456/foo`  | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))`
584          #
585          # In general, not only fields but also field paths can be referenced
586          # from a path pattern. Fields mapped to the path pattern cannot be
587          # repeated and must have a primitive (non-message) type.
588          #
589          # Any fields in the request message which are not bound by the path
590          # pattern automatically become (optional) HTTP query
591          # parameters. Assume the following definition of the request message:
592          #
593          #
594          #     service Messaging {
595          #       rpc GetMessage(GetMessageRequest) returns (Message) {
596          #         option (google.api.http).get = "/v1/messages/{message_id}";
597          #       }
598          #     }
599          #     message GetMessageRequest {
600          #       message SubMessage {
601          #         string subfield = 1;
602          #       }
603          #       string message_id = 1; // mapped to the URL
604          #       int64 revision = 2;    // becomes a parameter
605          #       SubMessage sub = 3;    // `sub.subfield` becomes a parameter
606          #     }
607          #
608          #
609          # This enables a HTTP JSON to RPC mapping as below:
610          #
611          # HTTP | RPC
612          # -----|-----
613          # `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))`
614          #
615          # Note that fields which are mapped to HTTP parameters must have a
616          # primitive type or a repeated primitive type. Message types are not
617          # allowed. In the case of a repeated type, the parameter can be
618          # repeated in the URL, as in `...?param=A&param=B`.
619          #
620          # For HTTP method kinds which allow a request body, the `body` field
621          # specifies the mapping. Consider a REST update method on the
622          # message resource collection:
623          #
624          #
625          #     service Messaging {
626          #       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {
627          #         option (google.api.http) = {
628          #           put: "/v1/messages/{message_id}"
629          #           body: "message"
630          #         };
631          #       }
632          #     }
633          #     message UpdateMessageRequest {
634          #       string message_id = 1; // mapped to the URL
635          #       Message message = 2;   // mapped to the body
636          #     }
637          #
638          #
639          # The following HTTP JSON to RPC mapping is enabled, where the
640          # representation of the JSON in the request body is determined by
641          # protos JSON encoding:
642          #
643          # HTTP | RPC
644          # -----|-----
645          # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })`
646          #
647          # The special name `*` can be used in the body mapping to define that
648          # every field not bound by the path template should be mapped to the
649          # request body.  This enables the following alternative definition of
650          # the update method:
651          #
652          #     service Messaging {
653          #       rpc UpdateMessage(Message) returns (Message) {
654          #         option (google.api.http) = {
655          #           put: "/v1/messages/{message_id}"
656          #           body: "*"
657          #         };
658          #       }
659          #     }
660          #     message Message {
661          #       string message_id = 1;
662          #       string text = 2;
663          #     }
664          #
665          #
666          # The following HTTP JSON to RPC mapping is enabled:
667          #
668          # HTTP | RPC
669          # -----|-----
670          # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")`
671          #
672          # Note that when using `*` in the body mapping, it is not possible to
673          # have HTTP parameters, as all fields not bound by the path end in
674          # the body. This makes this option more rarely used in practice of
675          # defining REST APIs. The common usage of `*` is in custom methods
676          # which don't use the URL at all for transferring data.
677          #
678          # It is possible to define multiple HTTP methods for one RPC by using
679          # the `additional_bindings` option. Example:
680          #
681          #     service Messaging {
682          #       rpc GetMessage(GetMessageRequest) returns (Message) {
683          #         option (google.api.http) = {
684          #           get: "/v1/messages/{message_id}"
685          #           additional_bindings {
686          #             get: "/v1/users/{user_id}/messages/{message_id}"
687          #           }
688          #         };
689          #       }
690          #     }
691          #     message GetMessageRequest {
692          #       string message_id = 1;
693          #       string user_id = 2;
694          #     }
695          #
696          #
697          # This enables the following two alternative HTTP JSON to RPC
698          # mappings:
699          #
700          # HTTP | RPC
701          # -----|-----
702          # `GET /v1/messages/123456` | `GetMessage(message_id: "123456")`
703          # `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")`
704          #
705          # # Rules for HTTP mapping
706          #
707          # The rules for mapping HTTP path, query parameters, and body fields
708          # to the request message are as follows:
709          #
710          # 1. The `body` field specifies either `*` or a field path, or is
711          #    omitted. If omitted, it assumes there is no HTTP body.
712          # 2. Leaf fields (recursive expansion of nested messages in the
713          #    request) can be classified into three types:
714          #     (a) Matched in the URL template.
715          #     (b) Covered by body (if body is `*`, everything except (a) fields;
716          #         else everything under the body field)
717          #     (c) All other fields.
718          # 3. URL query parameters found in the HTTP request are mapped to (c) fields.
719          # 4. Any body sent with an HTTP request can contain only (b) fields.
720          #
721          # The syntax of the path template is as follows:
722          #
723          #     Template = "/" Segments [ Verb ] ;
724          #     Segments = Segment { "/" Segment } ;
725          #     Segment  = "*" | "**" | LITERAL | Variable ;
726          #     Variable = "{" FieldPath [ "=" Segments ] "}" ;
727          #     FieldPath = IDENT { "." IDENT } ;
728          #     Verb     = ":" LITERAL ;
729          #
730          # The syntax `*` matches a single path segment. It follows the semantics of
731          # [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String
732          # Expansion.
733          #
734          # The syntax `**` matches zero or more path segments. It follows the semantics
735          # of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved
736          # Expansion. NOTE: it must be the last segment in the path except the Verb.
737          #
738          # The syntax `LITERAL` matches literal text in the URL path.
739          #
740          # The syntax `Variable` matches the entire path as specified by its template;
741          # this nested template must not contain further variables. If a variable
742          # matches a single path segment, its template may be omitted, e.g. `{var}`
743          # is equivalent to `{var=*}`.
744          #
745          # NOTE: the field paths in variables and in the `body` must not refer to
746          # repeated fields or map fields.
747          #
748          # Use CustomHttpPattern to specify any HTTP method that is not included in the
749          # `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified for
750          # a given URL path rule. The wild-card rule is useful for services that provide
751          # content to Web (HTML) clients.
752        "body": "A String", # The name of the request field whose value is mapped to the HTTP body, or
753            # `*` for mapping all fields not captured by the path pattern to the HTTP
754            # body. NOTE: the referred field must not be a repeated field and must be
755            # present at the top-level of request message type.
756        "get": "A String", # Used for listing and getting information about resources.
757        "restCollection": "A String", # Optional. The REST collection name is by default derived from the URL
758            # pattern. If specified, this field overrides the default collection name.
759            # Example:
760            #
761            #     rpc AddressesAggregatedList(AddressesAggregatedListRequest)
762            #         returns (AddressesAggregatedListResponse) {
763            #       option (google.api.http) = {
764            #         get: "/v1/projects/{project_id}/aggregated/addresses"
765            #         rest_collection: "projects.addresses"
766            #       };
767            #     }
768            #
769            # This method has the automatically derived collection name
770            # "projects.aggregated". Because, semantically, this rpc is actually an
771            # operation on the "projects.addresses" collection, the `rest_collection`
772            # field is configured to override the derived collection name.
773        "additionalBindings": [ # Additional HTTP bindings for the selector. Nested bindings must
774            # not contain an `additional_bindings` field themselves (that is,
775            # the nesting may only be one level deep).
776          # Object with schema name: HttpRule
777        ],
778        "mediaUpload": { # Defines the Media configuration for a service in case of an upload. # Use this only for Scotty Requests. Do not use this for media support using
779            # Bytestream, add instead
780            # [][google.bytestream.RestByteStream] as an API to your
781            # configuration for Bytestream methods.
782            # Use this only for Scotty Requests. Do not use this for media support using
783            # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
784            # your configuration for Bytestream methods.
785          "progressNotification": True or False, # Whether to receive a notification for progress changes of media upload.
786          "startNotification": True or False, # Whether to receive a notification on the start of media upload.
787          "mimeTypes": [ # An array of mimetype patterns. Esf will only accept uploads that match one
788              # of the given patterns.
789            "A String",
790          ],
791          "completeNotification": True or False, # A boolean that determines whether a notification for the completion of an
792              # upload should be sent to the backend. These notifications will not be seen
793              # by the client and will not consume quota.
794          "enabled": True or False, # Whether upload is enabled.
795          "uploadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
796              #
797              # Specify name of the upload service if one is used for upload.
798          "maxSize": "A String", # Optional maximum acceptable size for an upload.
799              # The size is specified in bytes.
800          "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
801        },
802        "selector": "A String", # Selects methods to which this rule applies.
803            #
804            # Refer to selector for syntax details.
805        "responseBody": "A String", # The name of the response field whose value is mapped to the HTTP body of
806            # response. Other response fields are ignored. This field is optional. When
807            # not set, the response message will be used as HTTP body of response.
808            # NOTE: the referred field must be not a repeated field and must be present
809            # at the top-level of response message type.
810        "restMethodName": "A String", # Optional. The rest method name is by default derived from the URL
811            # pattern. If specified, this field overrides the default method name.
812            # Example:
813            #
814            #     rpc CreateResource(CreateResourceRequest)
815            #         returns (CreateResourceResponse) {
816            #       option (google.api.http) = {
817            #         post: "/v1/resources",
818            #         body: "resource",
819            #         rest_method_name: "insert"
820            #       };
821            #     }
822            #
823            # This method has the automatically derived rest method name "create", but
824            #  for backwards compatability with apiary, it is specified as insert.
825        "mediaDownload": { # Defines the Media configuration for a service in case of a download. # Use this only for Scotty Requests. Do not use this for bytestream methods.
826            # For media support, add instead [][google.bytestream.RestByteStream] as an
827            # API to your configuration.
828            # Use this only for Scotty Requests. Do not use this for media support using
829            # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
830            # your configuration for Bytestream methods.
831          "useDirectDownload": True or False, # A boolean that determines if direct download from ESF should be used for
832              # download of this media.
833          "enabled": True or False, # Whether download is enabled.
834          "completeNotification": True or False, # A boolean that determines whether a notification for the completion of a
835              # download should be sent to the backend.
836          "maxDirectDownloadSize": "A String", # Optional maximum acceptable size for direct download.
837              # The size is specified in bytes.
838          "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
839          "downloadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
840              #
841              # Specify name of the download service if one is used for download.
842        },
843        "put": "A String", # Used for updating a resource.
844        "patch": "A String", # Used for updating a resource.
845        "post": "A String", # Used for creating a resource.
846        "custom": { # A custom pattern is used for defining custom HTTP verb. # Custom pattern is used for defining custom verbs.
847          "path": "A String", # The path matched by this custom verb.
848          "kind": "A String", # The name of this custom HTTP verb.
849        },
850        "delete": "A String", # Used for deleting a resource.
851      },
852    ],
853    "fullyDecodeReservedExpansion": True or False, # When set to true, URL path parmeters will be fully URI-decoded except in
854        # cases of single segment matches in reserved expansion, where "%2F" will be
855        # left encoded.
856        #
857        # The default behavior is to not decode RFC 6570 reserved characters in multi
858        # segment matches.
859  },
860  "apis": [ # A list of API interfaces exported by this service. Only the `name` field
861      # of the google.protobuf.Api needs to be provided by the configuration
862      # author, as the remaining fields will be derived from the IDL during the
863      # normalization process. It is an error to specify an API interface here
864      # which cannot be resolved against the associated IDL files.
865    { # Api is a light-weight descriptor for a protocol buffer service.
866      "name": "A String", # The fully qualified name of this api, including package name
867          # followed by the api's simple name.
868      "sourceContext": { # `SourceContext` represents information about the source of a # Source context for the protocol buffer service represented by this
869          # message.
870          # protobuf element, like the file in which it is defined.
871        "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
872            # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
873      },
874      "mixins": [ # Included APIs. See Mixin.
875        { # Declares an API to be included in this API. The including API must
876            # redeclare all the methods from the included API, but documentation
877            # and options are inherited as follows:
878            #
879            # - If after comment and whitespace stripping, the documentation
880            #   string of the redeclared method is empty, it will be inherited
881            #   from the original method.
882            #
883            # - Each annotation belonging to the service config (http,
884            #   visibility) which is not set in the redeclared method will be
885            #   inherited.
886            #
887            # - If an http annotation is inherited, the path pattern will be
888            #   modified as follows. Any version prefix will be replaced by the
889            #   version of the including API plus the root path if specified.
890            #
891            # Example of a simple mixin:
892            #
893            #     package google.acl.v1;
894            #     service AccessControl {
895            #       // Get the underlying ACL object.
896            #       rpc GetAcl(GetAclRequest) returns (Acl) {
897            #         option (google.api.http).get = "/v1/{resource=**}:getAcl";
898            #       }
899            #     }
900            #
901            #     package google.storage.v2;
902            #     service Storage {
903            #       //       rpc GetAcl(GetAclRequest) returns (Acl);
904            #
905            #       // Get a data record.
906            #       rpc GetData(GetDataRequest) returns (Data) {
907            #         option (google.api.http).get = "/v2/{resource=**}";
908            #       }
909            #     }
910            #
911            # Example of a mixin configuration:
912            #
913            #     apis:
914            #     - name: google.storage.v2.Storage
915            #       mixins:
916            #       - name: google.acl.v1.AccessControl
917            #
918            # The mixin construct implies that all methods in `AccessControl` are
919            # also declared with same name and request/response types in
920            # `Storage`. A documentation generator or annotation processor will
921            # see the effective `Storage.GetAcl` method after inherting
922            # documentation and annotations as follows:
923            #
924            #     service Storage {
925            #       // Get the underlying ACL object.
926            #       rpc GetAcl(GetAclRequest) returns (Acl) {
927            #         option (google.api.http).get = "/v2/{resource=**}:getAcl";
928            #       }
929            #       ...
930            #     }
931            #
932            # Note how the version in the path pattern changed from `v1` to `v2`.
933            #
934            # If the `root` field in the mixin is specified, it should be a
935            # relative path under which inherited HTTP paths are placed. Example:
936            #
937            #     apis:
938            #     - name: google.storage.v2.Storage
939            #       mixins:
940            #       - name: google.acl.v1.AccessControl
941            #         root: acls
942            #
943            # This implies the following inherited HTTP annotation:
944            #
945            #     service Storage {
946            #       // Get the underlying ACL object.
947            #       rpc GetAcl(GetAclRequest) returns (Acl) {
948            #         option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
949            #       }
950            #       ...
951            #     }
952          "root": "A String", # If non-empty specifies a path under which inherited HTTP paths
953              # are rooted.
954          "name": "A String", # The fully qualified name of the API which is included.
955        },
956      ],
957      "syntax": "A String", # The source syntax of the service.
958      "version": "A String", # A version string for this api. If specified, must have the form
959          # `major-version.minor-version`, as in `1.10`. If the minor version
960          # is omitted, it defaults to zero. If the entire version field is
961          # empty, the major version is derived from the package name, as
962          # outlined below. If the field is not empty, the version in the
963          # package name will be verified to be consistent with what is
964          # provided here.
965          #
966          # The versioning schema uses [semantic
967          # versioning](http://semver.org) where the major version number
968          # indicates a breaking change and the minor version an additive,
969          # non-breaking change. Both version numbers are signals to users
970          # what to expect from different versions, and should be carefully
971          # chosen based on the product plan.
972          #
973          # The major version is also reflected in the package name of the
974          # API, which must end in `v<major-version>`, as in
975          # `google.feature.v1`. For major versions 0 and 1, the suffix can
976          # be omitted. Zero major versions must only be used for
977          # experimental, none-GA apis.
978      "options": [ # Any metadata attached to the API.
979        { # A protocol buffer option, which can be attached to a message, field,
980            # enumeration, etc.
981          "name": "A String", # The option's name. For protobuf built-in options (options defined in
982              # descriptor.proto), this is the short name. For example, `"map_entry"`.
983              # For custom options, it should be the fully-qualified name. For example,
984              # `"google.api.http"`.
985          "value": { # The option's value packed in an Any message. If the value is a primitive,
986              # the corresponding wrapper type defined in google/protobuf/wrappers.proto
987              # should be used. If the value is an enum, it should be stored as an int32
988              # value using the google.protobuf.Int32Value type.
989            "a_key": "", # Properties of the object. Contains field @type with type URL.
990          },
991        },
992      ],
993      "methods": [ # The methods of this api, in unspecified order.
994        { # Method represents a method of an api.
995          "name": "A String", # The simple name of this method.
996          "requestStreaming": True or False, # If true, the request is streamed.
997          "responseTypeUrl": "A String", # The URL of the output message type.
998          "requestTypeUrl": "A String", # A URL of the input message type.
999          "responseStreaming": True or False, # If true, the response is streamed.
1000          "syntax": "A String", # The source syntax of this method.
1001          "options": [ # Any metadata attached to the method.
1002            { # A protocol buffer option, which can be attached to a message, field,
1003                # enumeration, etc.
1004              "name": "A String", # The option's name. For protobuf built-in options (options defined in
1005                  # descriptor.proto), this is the short name. For example, `"map_entry"`.
1006                  # For custom options, it should be the fully-qualified name. For example,
1007                  # `"google.api.http"`.
1008              "value": { # The option's value packed in an Any message. If the value is a primitive,
1009                  # the corresponding wrapper type defined in google/protobuf/wrappers.proto
1010                  # should be used. If the value is an enum, it should be stored as an int32
1011                  # value using the google.protobuf.Int32Value type.
1012                "a_key": "", # Properties of the object. Contains field @type with type URL.
1013              },
1014            },
1015          ],
1016        },
1017      ],
1018    },
1019  ],
1020  "customError": { # Customize service error responses.  For example, list any service # Custom error configuration.
1021      # specific protobuf types that can appear in error detail lists of
1022      # error responses.
1023      #
1024      # Example:
1025      #
1026      #     custom_error:
1027      #       types:
1028      #       - google.foo.v1.CustomError
1029      #       - google.foo.v1.AnotherError
1030    "rules": [ # The list of custom error rules that apply to individual API messages.
1031        #
1032        # **NOTE:** All service configuration rules follow "last one wins" order.
1033      { # A custom error rule.
1034        "isErrorType": True or False, # Mark this message as possible payload in error response.  Otherwise,
1035            # objects of this type will be filtered when they appear in error payload.
1036        "selector": "A String", # Selects messages to which this rule applies.
1037            #
1038            # Refer to selector for syntax details.
1039      },
1040    ],
1041    "types": [ # The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.
1042      "A String",
1043    ],
1044  },
1045  "quota": { # Quota configuration helps to achieve fairness and budgeting in service # Quota configuration.
1046      # usage.
1047      #
1048      # The quota configuration works this way:
1049      # - The service configuration defines a set of metrics.
1050      # - For API calls, the quota.metric_rules maps methods to metrics with
1051      #   corresponding costs.
1052      # - The quota.limits defines limits on the metrics, which will be used for
1053      #   quota checks at runtime.
1054      #
1055      # An example quota configuration in yaml format:
1056      #
1057      #    quota:
1058      #
1059      #      - name: apiWriteQpsPerProject
1060      #        metric: library.googleapis.com/write_calls
1061      #        unit: "1/min/{project}"  # rate limit for consumer projects
1062      #        values:
1063      #          STANDARD: 10000
1064      #
1065      #
1066      #      # The metric rules bind all methods to the read_calls metric,
1067      #      # except for the UpdateBook and DeleteBook methods. These two methods
1068      #      # are mapped to the write_calls metric, with the UpdateBook method
1069      #      # consuming at twice rate as the DeleteBook method.
1070      #      metric_rules:
1071      #      - selector: "*"
1072      #        metric_costs:
1073      #          library.googleapis.com/read_calls: 1
1074      #      - selector: google.example.library.v1.LibraryService.UpdateBook
1075      #        metric_costs:
1076      #          library.googleapis.com/write_calls: 2
1077      #      - selector: google.example.library.v1.LibraryService.DeleteBook
1078      #        metric_costs:
1079      #          library.googleapis.com/write_calls: 1
1080      #
1081      #  Corresponding Metric definition:
1082      #
1083      #      metrics:
1084      #      - name: library.googleapis.com/read_calls
1085      #        display_name: Read requests
1086      #        metric_kind: DELTA
1087      #        value_type: INT64
1088      #
1089      #      - name: library.googleapis.com/write_calls
1090      #        display_name: Write requests
1091      #        metric_kind: DELTA
1092      #        value_type: INT64
1093    "metricRules": [ # List of `MetricRule` definitions, each one mapping a selected method to one
1094        # or more metrics.
1095      { # Bind API methods to metrics. Binding a method to a metric causes that
1096          # metric's configured quota behaviors to apply to the method call.
1097        "metricCosts": { # Metrics to update when the selected methods are called, and the associated
1098            # cost applied to each metric.
1099            #
1100            # The key of the map is the metric name, and the values are the amount
1101            # increased for the metric against which the quota limits are defined.
1102            # The value must not be negative.
1103          "a_key": "A String",
1104        },
1105        "selector": "A String", # Selects the methods to which this rule applies.
1106            #
1107            # Refer to selector for syntax details.
1108      },
1109    ],
1110    "limits": [ # List of `QuotaLimit` definitions for the service.
1111      { # `QuotaLimit` defines a specific limit that applies over a specified duration
1112          # for a limit type. There can be at most one limit for a duration and limit
1113          # type combination defined within a `QuotaGroup`.
1114        "displayName": "A String", # User-visible display name for this limit.
1115            # Optional. If not set, the UI will provide a default display name based on
1116            # the quota configuration. This field can be used to override the default
1117            # display name generated from the configuration.
1118        "description": "A String", # Optional. User-visible, extended description for this quota limit.
1119            # Should be used only when more context is needed to understand this limit
1120            # than provided by the limit's display name (see: `display_name`).
1121        "defaultLimit": "A String", # Default number of tokens that can be consumed during the specified
1122            # duration. This is the number of tokens assigned when a client
1123            # application developer activates the service for his/her project.
1124            #
1125            # Specifying a value of 0 will block all requests. This can be used if you
1126            # are provisioning quota to selected consumers and blocking others.
1127            # Similarly, a value of -1 will indicate an unlimited quota. No other
1128            # negative values are allowed.
1129            #
1130            # Used by group-based quotas only.
1131        "metric": "A String", # The name of the metric this quota limit applies to. The quota limits with
1132            # the same metric will be checked together during runtime. The metric must be
1133            # defined within the service config.
1134            #
1135            # Used by metric-based quotas only.
1136        "values": { # Tiered limit values, currently only STANDARD is supported.
1137          "a_key": "A String",
1138        },
1139        "maxLimit": "A String", # Maximum number of tokens that can be consumed during the specified
1140            # duration. Client application developers can override the default limit up
1141            # to this maximum. If specified, this value cannot be set to a value less
1142            # than the default limit. If not specified, it is set to the default limit.
1143            #
1144            # To allow clients to apply overrides with no upper bound, set this to -1,
1145            # indicating unlimited maximum quota.
1146            #
1147            # Used by group-based quotas only.
1148        "duration": "A String", # Duration of this limit in textual notation. Example: "100s", "24h", "1d".
1149            # For duration longer than a day, only multiple of days is supported. We
1150            # support only "100s" and "1d" for now. Additional support will be added in
1151            # the future. "0" indicates indefinite duration.
1152            #
1153            # Used by group-based quotas only.
1154        "freeTier": "A String", # Free tier value displayed in the Developers Console for this limit.
1155            # The free tier is the number of tokens that will be subtracted from the
1156            # billed amount when billing is enabled.
1157            # This field can only be set on a limit with duration "1d", in a billable
1158            # group; it is invalid on any other limit. If this field is not set, it
1159            # defaults to 0, indicating that there is no free tier for this service.
1160            #
1161            # Used by group-based quotas only.
1162        "unit": "A String", # Specify the unit of the quota limit. It uses the same syntax as
1163            # Metric.unit. The supported unit kinds are determined by the quota
1164            # backend system.
1165            #
1166            # The [Google Service Control](https://cloud.google.com/service-control)
1167            # supports the following unit components:
1168            # * One of the time intevals:
1169            #   * "/min"  for quota every minute.
1170            #   * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
1171            #   * Otherwise the quota won't be reset by time, such as storage limit.
1172            # * One and only one of the granted containers:
1173            #   * "/{project}" quota for a project
1174            #
1175            # Here are some examples:
1176            # * "1/min/{project}" for quota per minute per project.
1177            #
1178            # Note: the order of unit components is insignificant.
1179            # The "1" at the beginning is required to follow the metric unit syntax.
1180            #
1181            # Used by metric-based quotas only.
1182        "name": "A String", # Name of the quota limit. The name is used to refer to the limit when
1183            # overriding the default limit on per-consumer basis.
1184            #
1185            # For metric-based quota limits, the name must be provided, and it must be
1186            # unique within the service. The name can only include alphanumeric
1187            # characters as well as '-'.
1188            #
1189            # The maximum length of the limit name is 64 characters.
1190            #
1191            # The name of a limit is used as a unique identifier for this limit.
1192            # Therefore, once a limit has been put into use, its name should be
1193            # immutable. You can use the display_name field to provide a user-friendly
1194            # name for the limit. The display name can be evolved over time without
1195            # affecting the identity of the limit.
1196      },
1197    ],
1198  },
1199  "visibility": { # `Visibility` defines restrictions for the visibility of service # API visibility configuration.
1200      # elements.  Restrictions are specified using visibility labels
1201      # (e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.
1202      #
1203      # Users and projects can have access to more than one visibility label. The
1204      # effective visibility for multiple labels is the union of each label's
1205      # elements, plus any unrestricted elements.
1206      #
1207      # If an element and its parents have no restrictions, visibility is
1208      # unconditionally granted.
1209      #
1210      # Example:
1211      #
1212      #     visibility:
1213      #       rules:
1214      #       - selector: google.calendar.Calendar.EnhancedSearch
1215      #         restriction: TRUSTED_TESTER
1216      #       - selector: google.calendar.Calendar.Delegate
1217      #         restriction: GOOGLE_INTERNAL
1218      #
1219      # Here, all methods are publicly visible except for the restricted methods
1220      # EnhancedSearch and Delegate.
1221    "rules": [ # A list of visibility rules that apply to individual API elements.
1222        #
1223        # **NOTE:** All service configuration rules follow "last one wins" order.
1224      { # A visibility rule provides visibility configuration for an individual API
1225          # element.
1226        "restriction": "A String", # A comma-separated list of visibility labels that apply to the `selector`.
1227            # Any of the listed labels can be used to grant the visibility.
1228            #
1229            # If a rule has multiple labels, removing one of the labels but not all of
1230            # them can break clients.
1231            #
1232            # Example:
1233            #
1234            #     visibility:
1235            #       rules:
1236            #       - selector: google.calendar.Calendar.EnhancedSearch
1237            #         restriction: GOOGLE_INTERNAL, TRUSTED_TESTER
1238            #
1239            # Removing GOOGLE_INTERNAL from this restriction will break clients that
1240            # rely on this method and only had access to it through GOOGLE_INTERNAL.
1241        "selector": "A String", # Selects methods, messages, fields, enums, etc. to which this rule applies.
1242            #
1243            # Refer to selector for syntax details.
1244      },
1245    ],
1246  },
1247  "metrics": [ # Defines the metrics used by this service.
1248    { # Defines a metric type and its schema. Once a metric descriptor is created,
1249        # deleting or altering it stops data collection and makes the metric type's
1250        # existing data unusable.
1251      "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces.
1252          # Use sentence case without an ending period, for example "Request count".
1253      "description": "A String", # A detailed description of the metric, which can be used in documentation.
1254      "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
1255          # Some combinations of `metric_kind` and `value_type` might not be supported.
1256      "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
1257          # Some combinations of `metric_kind` and `value_type` might not be supported.
1258      "labels": [ # The set of labels that can be used to describe a specific
1259          # instance of this metric type. For example, the
1260          # `appengine.googleapis.com/http/server/response_latencies` metric
1261          # type has a label for the HTTP response code, `response_code`, so
1262          # you can look at latencies for successful responses or just
1263          # for responses that failed.
1264        { # A description of a label.
1265          "valueType": "A String", # The type of data that can be assigned to the label.
1266          "description": "A String", # A human-readable description for the label.
1267          "key": "A String", # The label key.
1268        },
1269      ],
1270      "type": "A String", # The metric type, including its DNS name prefix. The type is not
1271          # URL-encoded.  All user-defined custom metric types have the DNS name
1272          # `custom.googleapis.com`.  Metric types should use a natural hierarchical
1273          # grouping. For example:
1274          #
1275          #     "custom.googleapis.com/invoice/paid/amount"
1276          #     "appengine.googleapis.com/http/server/response_latencies"
1277      "unit": "A String", # The unit in which the metric value is reported. It is only applicable
1278          # if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The
1279          # supported units are a subset of [The Unified Code for Units of
1280          # Measure](http://unitsofmeasure.org/ucum.html) standard:
1281          #
1282          # **Basic units (UNIT)**
1283          #
1284          # * `bit`   bit
1285          # * `By`    byte
1286          # * `s`     second
1287          # * `min`   minute
1288          # * `h`     hour
1289          # * `d`     day
1290          #
1291          # **Prefixes (PREFIX)**
1292          #
1293          # * `k`     kilo    (10**3)
1294          # * `M`     mega    (10**6)
1295          # * `G`     giga    (10**9)
1296          # * `T`     tera    (10**12)
1297          # * `P`     peta    (10**15)
1298          # * `E`     exa     (10**18)
1299          # * `Z`     zetta   (10**21)
1300          # * `Y`     yotta   (10**24)
1301          # * `m`     milli   (10**-3)
1302          # * `u`     micro   (10**-6)
1303          # * `n`     nano    (10**-9)
1304          # * `p`     pico    (10**-12)
1305          # * `f`     femto   (10**-15)
1306          # * `a`     atto    (10**-18)
1307          # * `z`     zepto   (10**-21)
1308          # * `y`     yocto   (10**-24)
1309          # * `Ki`    kibi    (2**10)
1310          # * `Mi`    mebi    (2**20)
1311          # * `Gi`    gibi    (2**30)
1312          # * `Ti`    tebi    (2**40)
1313          #
1314          # **Grammar**
1315          #
1316          # The grammar includes the dimensionless unit `1`, such as `1/s`.
1317          #
1318          # The grammar also includes these connectors:
1319          #
1320          # * `/`    division (as an infix operator, e.g. `1/s`).
1321          # * `.`    multiplication (as an infix operator, e.g. `GBy.d`)
1322          #
1323          # The grammar for a unit is as follows:
1324          #
1325          #     Expression = Component { "." Component } { "/" Component } ;
1326          #
1327          #     Component = [ PREFIX ] UNIT [ Annotation ]
1328          #               | Annotation
1329          #               | "1"
1330          #               ;
1331          #
1332          #     Annotation = "{" NAME "}" ;
1333          #
1334          # Notes:
1335          #
1336          # * `Annotation` is just a comment if it follows a `UNIT` and is
1337          #    equivalent to `1` if it is used alone. For examples,
1338          #    `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.
1339          # * `NAME` is a sequence of non-blank printable ASCII characters not
1340          #    containing '{' or '}'.
1341      "name": "A String", # The resource name of the metric descriptor. Depending on the
1342          # implementation, the name typically includes: (1) the parent resource name
1343          # that defines the scope of the metric type or of its data; and (2) the
1344          # metric's URL-encoded type, which also appears in the `type` field of this
1345          # descriptor. For example, following is the resource name of a custom
1346          # metric within the GCP project `my-project-id`:
1347          #
1348          #     "projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount"
1349    },
1350  ],
1351  "enums": [ # A list of all enum types included in this API service.  Enums
1352      # referenced directly or indirectly by the `apis` are automatically
1353      # included.  Enums which are not referenced but shall be included
1354      # should be listed here by name. Example:
1355      #
1356      #     enums:
1357      #     - name: google.someapi.v1.SomeEnum
1358    { # Enum type definition.
1359      "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
1360          # protobuf element, like the file in which it is defined.
1361        "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
1362            # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
1363      },
1364      "enumvalue": [ # Enum value definitions.
1365        { # Enum value definition.
1366          "options": [ # Protocol buffer options.
1367            { # A protocol buffer option, which can be attached to a message, field,
1368                # enumeration, etc.
1369              "name": "A String", # The option's name. For protobuf built-in options (options defined in
1370                  # descriptor.proto), this is the short name. For example, `"map_entry"`.
1371                  # For custom options, it should be the fully-qualified name. For example,
1372                  # `"google.api.http"`.
1373              "value": { # The option's value packed in an Any message. If the value is a primitive,
1374                  # the corresponding wrapper type defined in google/protobuf/wrappers.proto
1375                  # should be used. If the value is an enum, it should be stored as an int32
1376                  # value using the google.protobuf.Int32Value type.
1377                "a_key": "", # Properties of the object. Contains field @type with type URL.
1378              },
1379            },
1380          ],
1381          "name": "A String", # Enum value name.
1382          "number": 42, # Enum value number.
1383        },
1384      ],
1385      "options": [ # Protocol buffer options.
1386        { # A protocol buffer option, which can be attached to a message, field,
1387            # enumeration, etc.
1388          "name": "A String", # The option's name. For protobuf built-in options (options defined in
1389              # descriptor.proto), this is the short name. For example, `"map_entry"`.
1390              # For custom options, it should be the fully-qualified name. For example,
1391              # `"google.api.http"`.
1392          "value": { # The option's value packed in an Any message. If the value is a primitive,
1393              # the corresponding wrapper type defined in google/protobuf/wrappers.proto
1394              # should be used. If the value is an enum, it should be stored as an int32
1395              # value using the google.protobuf.Int32Value type.
1396            "a_key": "", # Properties of the object. Contains field @type with type URL.
1397          },
1398        },
1399      ],
1400      "name": "A String", # Enum type name.
1401      "syntax": "A String", # The source syntax.
1402    },
1403  ],
1404  "types": [ # A list of all proto message types included in this API service.
1405      # Types referenced directly or indirectly by the `apis` are
1406      # automatically included.  Messages which are not referenced but
1407      # shall be included, such as types used by the `google.protobuf.Any` type,
1408      # should be listed here by name. Example:
1409      #
1410      #     types:
1411      #     - name: google.protobuf.Int32
1412    { # A protocol buffer message type.
1413      "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
1414        "A String",
1415      ],
1416      "name": "A String", # The fully qualified message name.
1417      "fields": [ # The list of fields.
1418        { # A single field of a message type.
1419          "kind": "A String", # The field type.
1420          "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
1421              # types. The first type has index 1; zero means the type is not in the list.
1422          "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
1423              # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
1424          "name": "A String", # The field name.
1425          "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
1426          "jsonName": "A String", # The field JSON name.
1427          "number": 42, # The field number.
1428          "cardinality": "A String", # The field cardinality.
1429          "options": [ # The protocol buffer options.
1430            { # A protocol buffer option, which can be attached to a message, field,
1431                # enumeration, etc.
1432              "name": "A String", # The option's name. For protobuf built-in options (options defined in
1433                  # descriptor.proto), this is the short name. For example, `"map_entry"`.
1434                  # For custom options, it should be the fully-qualified name. For example,
1435                  # `"google.api.http"`.
1436              "value": { # The option's value packed in an Any message. If the value is a primitive,
1437                  # the corresponding wrapper type defined in google/protobuf/wrappers.proto
1438                  # should be used. If the value is an enum, it should be stored as an int32
1439                  # value using the google.protobuf.Int32Value type.
1440                "a_key": "", # Properties of the object. Contains field @type with type URL.
1441              },
1442            },
1443          ],
1444          "packed": True or False, # Whether to use alternative packed wire representation.
1445        },
1446      ],
1447      "syntax": "A String", # The source syntax.
1448      "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
1449          # protobuf element, like the file in which it is defined.
1450        "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
1451            # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
1452      },
1453      "options": [ # The protocol buffer options.
1454        { # A protocol buffer option, which can be attached to a message, field,
1455            # enumeration, etc.
1456          "name": "A String", # The option's name. For protobuf built-in options (options defined in
1457              # descriptor.proto), this is the short name. For example, `"map_entry"`.
1458              # For custom options, it should be the fully-qualified name. For example,
1459              # `"google.api.http"`.
1460          "value": { # The option's value packed in an Any message. If the value is a primitive,
1461              # the corresponding wrapper type defined in google/protobuf/wrappers.proto
1462              # should be used. If the value is an enum, it should be stored as an int32
1463              # value using the google.protobuf.Int32Value type.
1464            "a_key": "", # Properties of the object. Contains field @type with type URL.
1465          },
1466        },
1467      ],
1468    },
1469  ],
1470  "logging": { # Logging configuration of the service. # Logging configuration.
1471      #
1472      # The following example shows how to configure logs to be sent to the
1473      # producer and consumer projects. In the example, the `activity_history`
1474      # log is sent to both the producer and consumer projects, whereas the
1475      # `purchase_history` log is only sent to the producer project.
1476      #
1477      #     monitored_resources:
1478      #     - type: library.googleapis.com/branch
1479      #       labels:
1480      #       - key: /city
1481      #         description: The city where the library branch is located in.
1482      #       - key: /name
1483      #         description: The name of the branch.
1484      #     logs:
1485      #     - name: activity_history
1486      #       labels:
1487      #       - key: /customer_id
1488      #     - name: purchase_history
1489      #     logging:
1490      #       producer_destinations:
1491      #       - monitored_resource: library.googleapis.com/branch
1492      #         logs:
1493      #         - activity_history
1494      #         - purchase_history
1495      #       consumer_destinations:
1496      #       - monitored_resource: library.googleapis.com/branch
1497      #         logs:
1498      #         - activity_history
1499    "producerDestinations": [ # Logging configurations for sending logs to the producer project.
1500        # There can be multiple producer destinations, each one must have a
1501        # different monitored resource type. A log can be used in at most
1502        # one producer destination.
1503      { # Configuration of a specific logging destination (the producer project
1504          # or the consumer project).
1505        "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
1506            # Service.monitored_resources section.
1507        "logs": [ # Names of the logs to be sent to this destination. Each name must
1508            # be defined in the Service.logs section. If the log name is
1509            # not a domain scoped name, it will be automatically prefixed with
1510            # the service name followed by "/".
1511          "A String",
1512        ],
1513      },
1514    ],
1515    "consumerDestinations": [ # Logging configurations for sending logs to the consumer project.
1516        # There can be multiple consumer destinations, each one must have a
1517        # different monitored resource type. A log can be used in at most
1518        # one consumer destination.
1519      { # Configuration of a specific logging destination (the producer project
1520          # or the consumer project).
1521        "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
1522            # Service.monitored_resources section.
1523        "logs": [ # Names of the logs to be sent to this destination. Each name must
1524            # be defined in the Service.logs section. If the log name is
1525            # not a domain scoped name, it will be automatically prefixed with
1526            # the service name followed by "/".
1527          "A String",
1528        ],
1529      },
1530    ],
1531  },
1532  "name": "A String", # The DNS address at which this service is available,
1533      # e.g. `calendar.googleapis.com`.
1534  "documentation": { # `Documentation` provides the information for describing a service. # Additional API documentation.
1535      #
1536      # Example:
1537      # <pre><code>documentation:
1538      #   summary: >
1539      #     The Google Calendar API gives access
1540      #     to most calendar features.
1541      #   pages:
1542      #   - name: Overview
1543      #     content: &#40;== include google/foo/overview.md ==&#41;
1544      #   - name: Tutorial
1545      #     content: &#40;== include google/foo/tutorial.md ==&#41;
1546      #     subpages;
1547      #     - name: Java
1548      #       content: &#40;== include google/foo/tutorial_java.md ==&#41;
1549      #   rules:
1550      #   - selector: google.calendar.Calendar.Get
1551      #     description: >
1552      #       ...
1553      #   - selector: google.calendar.Calendar.Put
1554      #     description: >
1555      #       ...
1556      # </code></pre>
1557      # Documentation is provided in markdown syntax. In addition to
1558      # standard markdown features, definition lists, tables and fenced
1559      # code blocks are supported. Section headers can be provided and are
1560      # interpreted relative to the section nesting of the context where
1561      # a documentation fragment is embedded.
1562      #
1563      # Documentation from the IDL is merged with documentation defined
1564      # via the config at normalization time, where documentation provided
1565      # by config rules overrides IDL provided.
1566      #
1567      # A number of constructs specific to the API platform are supported
1568      # in documentation text.
1569      #
1570      # In order to reference a proto element, the following
1571      # notation can be used:
1572      # <pre><code>&#91;fully.qualified.proto.name]&#91;]</code></pre>
1573      # To override the display text used for the link, this can be used:
1574      # <pre><code>&#91;display text]&#91;fully.qualified.proto.name]</code></pre>
1575      # Text can be excluded from doc using the following notation:
1576      # <pre><code>&#40;-- internal comment --&#41;</code></pre>
1577      # Comments can be made conditional using a visibility label. The below
1578      # text will be only rendered if the `BETA` label is available:
1579      # <pre><code>&#40;--BETA: comment for BETA users --&#41;</code></pre>
1580      # A few directives are available in documentation. Note that
1581      # directives must appear on a single line to be properly
1582      # identified. The `include` directive includes a markdown file from
1583      # an external source:
1584      # <pre><code>&#40;== include path/to/file ==&#41;</code></pre>
1585      # The `resource_for` directive marks a message to be the resource of
1586      # a collection in REST view. If it is not specified, tools attempt
1587      # to infer the resource from the operations in a collection:
1588      # <pre><code>&#40;== resource_for v1.shelves.books ==&#41;</code></pre>
1589      # The directive `suppress_warning` does not directly affect documentation
1590      # and is documented together with service config validation.
1591    "rules": [ # A list of documentation rules that apply to individual API elements.
1592        #
1593        # **NOTE:** All service configuration rules follow "last one wins" order.
1594      { # A documentation rule provides information about individual API elements.
1595        "description": "A String", # Description of the selected API(s).
1596        "deprecationDescription": "A String", # Deprecation description of the selected element(s). It can be provided if an
1597            # element is marked as `deprecated`.
1598        "selector": "A String", # The selector is a comma-separated list of patterns. Each pattern is a
1599            # qualified name of the element which may end in "*", indicating a wildcard.
1600            # Wildcards are only allowed at the end and for a whole component of the
1601            # qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To
1602            # specify a default for all applicable elements, the whole pattern "*"
1603            # is used.
1604      },
1605    ],
1606    "documentationRootUrl": "A String", # The URL to the root of documentation.
1607    "overview": "A String", # Declares a single overview page. For example:
1608        # <pre><code>documentation:
1609        #   summary: ...
1610        #   overview: &#40;== include overview.md ==&#41;
1611        # </code></pre>
1612        # This is a shortcut for the following declaration (using pages style):
1613        # <pre><code>documentation:
1614        #   summary: ...
1615        #   pages:
1616        #   - name: Overview
1617        #     content: &#40;== include overview.md ==&#41;
1618        # </code></pre>
1619        # Note: you cannot specify both `overview` field and `pages` field.
1620    "pages": [ # The top level pages for the documentation set.
1621      { # Represents a documentation page. A page can contain subpages to represent
1622          # nested documentation set structure.
1623        "content": "A String", # The Markdown content of the page. You can use <code>&#40;== include {path} ==&#41;</code>
1624            # to include content from a Markdown file.
1625        "subpages": [ # Subpages of this page. The order of subpages specified here will be
1626            # honored in the generated docset.
1627          # Object with schema name: Page
1628        ],
1629        "name": "A String", # The name of the page. It will be used as an identity of the page to
1630            # generate URI of the page, text of the link to this page in navigation,
1631            # etc. The full page name (start from the root page name to this page
1632            # concatenated with `.`) can be used as reference to the page in your
1633            # documentation. For example:
1634            # <pre><code>pages:
1635            # - name: Tutorial
1636            #   content: &#40;== include tutorial.md ==&#41;
1637            #   subpages:
1638            #   - name: Java
1639            #     content: &#40;== include tutorial_java.md ==&#41;
1640            # </code></pre>
1641            # You can reference `Java` page using Markdown reference link syntax:
1642            # `Java`.
1643      },
1644    ],
1645    "summary": "A String", # A short summary of what the service does. Can only be provided by
1646        # plain text.
1647  },
1648  "sourceInfo": { # Source information used to create a Service Config # Output only. The source information for this configuration if available.
1649    "sourceFiles": [ # All files used during config generation.
1650      {
1651        "a_key": "", # Properties of the object. Contains field @type with type URL.
1652      },
1653    ],
1654  },
1655  "systemTypes": [ # A list of all proto message types included in this API service.
1656      # It serves similar purpose as [google.api.Service.types], except that
1657      # these types are not needed by user-defined APIs. Therefore, they will not
1658      # show up in the generated discovery doc. This field should only be used
1659      # to define system APIs in ESF.
1660    { # A protocol buffer message type.
1661      "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
1662        "A String",
1663      ],
1664      "name": "A String", # The fully qualified message name.
1665      "fields": [ # The list of fields.
1666        { # A single field of a message type.
1667          "kind": "A String", # The field type.
1668          "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
1669              # types. The first type has index 1; zero means the type is not in the list.
1670          "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
1671              # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
1672          "name": "A String", # The field name.
1673          "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
1674          "jsonName": "A String", # The field JSON name.
1675          "number": 42, # The field number.
1676          "cardinality": "A String", # The field cardinality.
1677          "options": [ # The protocol buffer options.
1678            { # A protocol buffer option, which can be attached to a message, field,
1679                # enumeration, etc.
1680              "name": "A String", # The option's name. For protobuf built-in options (options defined in
1681                  # descriptor.proto), this is the short name. For example, `"map_entry"`.
1682                  # For custom options, it should be the fully-qualified name. For example,
1683                  # `"google.api.http"`.
1684              "value": { # The option's value packed in an Any message. If the value is a primitive,
1685                  # the corresponding wrapper type defined in google/protobuf/wrappers.proto
1686                  # should be used. If the value is an enum, it should be stored as an int32
1687                  # value using the google.protobuf.Int32Value type.
1688                "a_key": "", # Properties of the object. Contains field @type with type URL.
1689              },
1690            },
1691          ],
1692          "packed": True or False, # Whether to use alternative packed wire representation.
1693        },
1694      ],
1695      "syntax": "A String", # The source syntax.
1696      "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
1697          # protobuf element, like the file in which it is defined.
1698        "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
1699            # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
1700      },
1701      "options": [ # The protocol buffer options.
1702        { # A protocol buffer option, which can be attached to a message, field,
1703            # enumeration, etc.
1704          "name": "A String", # The option's name. For protobuf built-in options (options defined in
1705              # descriptor.proto), this is the short name. For example, `"map_entry"`.
1706              # For custom options, it should be the fully-qualified name. For example,
1707              # `"google.api.http"`.
1708          "value": { # The option's value packed in an Any message. If the value is a primitive,
1709              # the corresponding wrapper type defined in google/protobuf/wrappers.proto
1710              # should be used. If the value is an enum, it should be stored as an int32
1711              # value using the google.protobuf.Int32Value type.
1712            "a_key": "", # Properties of the object. Contains field @type with type URL.
1713          },
1714        },
1715      ],
1716    },
1717  ],
1718  "context": { # `Context` defines which contexts an API requests. # Context configuration.
1719      #
1720      # Example:
1721      #
1722      #     context:
1723      #       rules:
1724      #       - selector: "*"
1725      #         requested:
1726      #         - google.rpc.context.ProjectContext
1727      #         - google.rpc.context.OriginContext
1728      #
1729      # The above specifies that all methods in the API request
1730      # `google.rpc.context.ProjectContext` and
1731      # `google.rpc.context.OriginContext`.
1732      #
1733      # Available context types are defined in package
1734      # `google.rpc.context`.
1735    "rules": [ # A list of RPC context rules that apply to individual API methods.
1736        #
1737        # **NOTE:** All service configuration rules follow "last one wins" order.
1738      { # A context rule provides information about the context for an individual API
1739          # element.
1740        "provided": [ # A list of full type names of provided contexts.
1741          "A String",
1742        ],
1743        "selector": "A String", # Selects the methods to which this rule applies.
1744            #
1745            # Refer to selector for syntax details.
1746        "requested": [ # A list of full type names of requested contexts.
1747          "A String",
1748        ],
1749      },
1750    ],
1751  },
1752  "endpoints": [ # Configuration for network endpoints.  If this is empty, then an endpoint
1753      # with the same name as the service is automatically generated to service all
1754      # defined APIs.
1755    { # `Endpoint` describes a network endpoint that serves a set of APIs.
1756        # A service may expose any number of endpoints, and all endpoints share the
1757        # same service configuration, such as quota configuration and monitoring
1758        # configuration.
1759        #
1760        # Example service configuration:
1761        #
1762        #     name: library-example.googleapis.com
1763        #     endpoints:
1764        #       # Below entry makes 'google.example.library.v1.Library'
1765        #       # API be served from endpoint address library-example.googleapis.com.
1766        #       # It also allows HTTP OPTIONS calls to be passed to the backend, for
1767        #       # it to decide whether the subsequent cross-origin request is
1768        #       # allowed to proceed.
1769        #     - name: library-example.googleapis.com
1770        #       allow_cors: true
1771      "target": "A String", # The specification of an Internet routable address of API frontend that will
1772          # handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
1773          # It should be either a valid IPv4 address or a fully-qualified domain name.
1774          # For example, "8.8.8.8" or "myservice.appspot.com".
1775      "apis": [ # The list of APIs served by this endpoint.
1776          #
1777          # If no APIs are specified this translates to "all APIs" exported by the
1778          # service, as defined in the top-level service configuration.
1779        "A String",
1780      ],
1781      "allowCors": True or False, # Allowing
1782          # [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
1783          # cross-domain traffic, would allow the backends served from this endpoint to
1784          # receive and respond to HTTP OPTIONS requests. The response will be used by
1785          # the browser to determine whether the subsequent cross-origin request is
1786          # allowed to proceed.
1787      "name": "A String", # The canonical name of this endpoint.
1788      "features": [ # The list of features enabled on this endpoint.
1789        "A String",
1790      ],
1791      "aliases": [ # DEPRECATED: This field is no longer supported. Instead of using aliases,
1792          # please specify multiple google.api.Endpoint for each of the intented
1793          # alias.
1794          #
1795          # Additional names that this endpoint will be hosted on.
1796        "A String",
1797      ],
1798    },
1799  ],
1800  "experimental": { # Experimental service configuration. These configuration options can # Experimental configuration.
1801      # only be used by whitelisted users.
1802    "authorization": { # Configuration of authorization. # Authorization configuration.
1803        #
1804        # This section determines the authorization provider, if unspecified, then no
1805        # authorization check will be done.
1806        #
1807        # Example:
1808        #
1809        #     experimental:
1810        #       authorization:
1811        #         provider: firebaserules.googleapis.com
1812      "provider": "A String", # The name of the authorization provider, such as
1813          # firebaserules.googleapis.com.
1814    },
1815  },
1816}
1817
1818  x__xgafv: string, V1 error format.
1819    Allowed values
1820      1 - v1 error format
1821      2 - v2 error format
1822
1823Returns:
1824  An object of the form:
1825
1826    { # `Service` is the root object of Google service configuration schema. It
1827      # describes basic information about a service, such as the name and the
1828      # title, and delegates other aspects to sub-sections. Each sub-section is
1829      # either a proto message or a repeated proto message that configures a
1830      # specific aspect, such as auth. See each proto message definition for details.
1831      #
1832      # Example:
1833      #
1834      #     type: google.api.Service
1835      #     config_version: 3
1836      #     name: calendar.googleapis.com
1837      #     title: Google Calendar API
1838      #     apis:
1839      #     - name: google.calendar.v3.Calendar
1840      #     authentication:
1841      #       providers:
1842      #       - id: google_calendar_auth
1843      #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
1844      #         issuer: https://securetoken.google.com
1845      #       rules:
1846      #       - selector: "*"
1847      #         requirements:
1848      #           provider_id: google_calendar_auth
1849    "control": { # Selects and configures the service controller used by the service.  The # Configuration for the service control plane.
1850        # service controller handles features like abuse, quota, billing, logging,
1851        # monitoring, etc.
1852      "environment": "A String", # The service control environment to use. If empty, no control plane
1853          # feature (like quota and billing) will be enabled.
1854    },
1855    "monitoredResources": [ # Defines the monitored resources used by this service. This is required
1856        # by the Service.monitoring and Service.logging configurations.
1857      { # An object that describes the schema of a MonitoredResource object using a
1858          # type name and a set of labels.  For example, the monitored resource
1859          # descriptor for Google Compute Engine VM instances has a type of
1860          # `"gce_instance"` and specifies the use of the labels `"instance_id"` and
1861          # `"zone"` to identify particular VM instances.
1862          #
1863          # Different APIs can support different monitored resource types. APIs generally
1864          # provide a `list` method that returns the monitored resource descriptors used
1865          # by the API.
1866        "type": "A String", # Required. The monitored resource type. For example, the type
1867            # `"cloudsql_database"` represents databases in Google Cloud SQL.
1868            # The maximum length of this value is 256 characters.
1869        "labels": [ # Required. A set of labels used to describe instances of this monitored
1870            # resource type. For example, an individual Google Cloud SQL database is
1871            # identified by values for the labels `"database_id"` and `"zone"`.
1872          { # A description of a label.
1873            "valueType": "A String", # The type of data that can be assigned to the label.
1874            "description": "A String", # A human-readable description for the label.
1875            "key": "A String", # The label key.
1876          },
1877        ],
1878        "displayName": "A String", # Optional. A concise name for the monitored resource type that might be
1879            # displayed in user interfaces. It should be a Title Cased Noun Phrase,
1880            # without any article or other determiners. For example,
1881            # `"Google Cloud SQL Database"`.
1882        "name": "A String", # Optional. The resource name of the monitored resource descriptor:
1883            # `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where
1884            # {type} is the value of the `type` field in this object and
1885            # {project_id} is a project ID that provides API-specific context for
1886            # accessing the type.  APIs that do not use project information can use the
1887            # resource name format `"monitoredResourceDescriptors/{type}"`.
1888        "description": "A String", # Optional. A detailed description of the monitored resource type that might
1889            # be used in documentation.
1890      },
1891    ],
1892    "logs": [ # Defines the logs used by this service.
1893      { # A description of a log type. Example in YAML format:
1894          #
1895          #     - name: library.googleapis.com/activity_history
1896          #       description: The history of borrowing and returning library items.
1897          #       display_name: Activity
1898          #       labels:
1899          #       - key: /customer_id
1900          #         description: Identifier of a library customer
1901        "labels": [ # The set of labels that are available to describe a specific log entry.
1902            # Runtime requests that contain labels not specified here are
1903            # considered invalid.
1904          { # A description of a label.
1905            "valueType": "A String", # The type of data that can be assigned to the label.
1906            "description": "A String", # A human-readable description for the label.
1907            "key": "A String", # The label key.
1908          },
1909        ],
1910        "displayName": "A String", # The human-readable name for this log. This information appears on
1911            # the user interface and should be concise.
1912        "name": "A String", # The name of the log. It must be less than 512 characters long and can
1913            # include the following characters: upper- and lower-case alphanumeric
1914            # characters [A-Za-z0-9], and punctuation characters including
1915            # slash, underscore, hyphen, period [/_-.].
1916        "description": "A String", # A human-readable description of this log. This information appears in
1917            # the documentation and can contain details.
1918      },
1919    ],
1920    "systemParameters": { # ### System parameter configuration # System parameter configuration.
1921        #
1922        # A system parameter is a special kind of parameter defined by the API
1923        # system, not by an individual API. It is typically mapped to an HTTP header
1924        # and/or a URL query parameter. This configuration specifies which methods
1925        # change the names of the system parameters.
1926      "rules": [ # Define system parameters.
1927          #
1928          # The parameters defined here will override the default parameters
1929          # implemented by the system. If this field is missing from the service
1930          # config, default system parameters will be used. Default system parameters
1931          # and names is implementation-dependent.
1932          #
1933          # Example: define api key for all methods
1934          #
1935          #     system_parameters
1936          #       rules:
1937          #         - selector: "*"
1938          #           parameters:
1939          #             - name: api_key
1940          #               url_query_parameter: api_key
1941          #
1942          #
1943          # Example: define 2 api key names for a specific method.
1944          #
1945          #     system_parameters
1946          #       rules:
1947          #         - selector: "/ListShelves"
1948          #           parameters:
1949          #             - name: api_key
1950          #               http_header: Api-Key1
1951          #             - name: api_key
1952          #               http_header: Api-Key2
1953          #
1954          # **NOTE:** All service configuration rules follow "last one wins" order.
1955        { # Define a system parameter rule mapping system parameter definitions to
1956            # methods.
1957          "parameters": [ # Define parameters. Multiple names may be defined for a parameter.
1958              # For a given method call, only one of them should be used. If multiple
1959              # names are used the behavior is implementation-dependent.
1960              # If none of the specified names are present the behavior is
1961              # parameter-dependent.
1962            { # Define a parameter's name and location. The parameter may be passed as either
1963                # an HTTP header or a URL query parameter, and if both are passed the behavior
1964                # is implementation-dependent.
1965              "urlQueryParameter": "A String", # Define the URL query parameter name to use for the parameter. It is case
1966                  # sensitive.
1967              "httpHeader": "A String", # Define the HTTP header name to use for the parameter. It is case
1968                  # insensitive.
1969              "name": "A String", # Define the name of the parameter, such as "api_key" . It is case sensitive.
1970            },
1971          ],
1972          "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
1973              # methods in all APIs.
1974              #
1975              # Refer to selector for syntax details.
1976        },
1977      ],
1978    },
1979    "id": "A String", # A unique ID for a specific instance of this message, typically assigned
1980        # by the client for tracking purpose. If empty, the server may choose to
1981        # generate one instead.
1982    "backend": { # `Backend` defines the backend configuration for a service. # API backend configuration.
1983      "rules": [ # A list of API backend rules that apply to individual API methods.
1984          #
1985          # **NOTE:** All service configuration rules follow "last one wins" order.
1986        { # A backend rule provides configuration for an individual API element.
1987          "selector": "A String", # Selects the methods to which this rule applies.
1988              #
1989              # Refer to selector for syntax details.
1990          "minDeadline": 3.14, # Minimum deadline in seconds needed for this method. Calls having deadline
1991              # value lower than this will be rejected.
1992          "deadline": 3.14, # The number of seconds to wait for a response from a request.  The
1993              # default depends on the deployment context.
1994          "address": "A String", # The address of the API backend.
1995        },
1996      ],
1997    },
1998    "monitoring": { # Monitoring configuration of the service. # Monitoring configuration.
1999        #
2000        # The example below shows how to configure monitored resources and metrics
2001        # for monitoring. In the example, a monitored resource and two metrics are
2002        # defined. The `library.googleapis.com/book/returned_count` metric is sent
2003        # to both producer and consumer projects, whereas the
2004        # `library.googleapis.com/book/overdue_count` metric is only sent to the
2005        # consumer project.
2006        #
2007        #     monitored_resources:
2008        #     - type: library.googleapis.com/branch
2009        #       labels:
2010        #       - key: /city
2011        #         description: The city where the library branch is located in.
2012        #       - key: /name
2013        #         description: The name of the branch.
2014        #     metrics:
2015        #     - name: library.googleapis.com/book/returned_count
2016        #       metric_kind: DELTA
2017        #       value_type: INT64
2018        #       labels:
2019        #       - key: /customer_id
2020        #     - name: library.googleapis.com/book/overdue_count
2021        #       metric_kind: GAUGE
2022        #       value_type: INT64
2023        #       labels:
2024        #       - key: /customer_id
2025        #     monitoring:
2026        #       producer_destinations:
2027        #       - monitored_resource: library.googleapis.com/branch
2028        #         metrics:
2029        #         - library.googleapis.com/book/returned_count
2030        #       consumer_destinations:
2031        #       - monitored_resource: library.googleapis.com/branch
2032        #         metrics:
2033        #         - library.googleapis.com/book/returned_count
2034        #         - library.googleapis.com/book/overdue_count
2035      "producerDestinations": [ # Monitoring configurations for sending metrics to the producer project.
2036          # There can be multiple producer destinations, each one must have a
2037          # different monitored resource type. A metric can be used in at most
2038          # one producer destination.
2039        { # Configuration of a specific monitoring destination (the producer project
2040            # or the consumer project).
2041          "monitoredResource": "A String", # The monitored resource type. The type must be defined in
2042              # Service.monitored_resources section.
2043          "metrics": [ # Names of the metrics to report to this monitoring destination.
2044              # Each name must be defined in Service.metrics section.
2045            "A String",
2046          ],
2047        },
2048      ],
2049      "consumerDestinations": [ # Monitoring configurations for sending metrics to the consumer project.
2050          # There can be multiple consumer destinations, each one must have a
2051          # different monitored resource type. A metric can be used in at most
2052          # one consumer destination.
2053        { # Configuration of a specific monitoring destination (the producer project
2054            # or the consumer project).
2055          "monitoredResource": "A String", # The monitored resource type. The type must be defined in
2056              # Service.monitored_resources section.
2057          "metrics": [ # Names of the metrics to report to this monitoring destination.
2058              # Each name must be defined in Service.metrics section.
2059            "A String",
2060          ],
2061        },
2062      ],
2063    },
2064    "title": "A String", # The product title associated with this service.
2065    "authentication": { # `Authentication` defines the authentication configuration for an API. # Auth configuration.
2066        #
2067        # Example for an API targeted for external use:
2068        #
2069        #     name: calendar.googleapis.com
2070        #     authentication:
2071        #       providers:
2072        #       - id: google_calendar_auth
2073        #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
2074        #         issuer: https://securetoken.google.com
2075        #       rules:
2076        #       - selector: "*"
2077        #         requirements:
2078        #           provider_id: google_calendar_auth
2079      "rules": [ # A list of authentication rules that apply to individual API methods.
2080          #
2081          # **NOTE:** All service configuration rules follow "last one wins" order.
2082        { # Authentication rules for the service.
2083            #
2084            # By default, if a method has any authentication requirements, every request
2085            # must include a valid credential matching one of the requirements.
2086            # It's an error to include more than one kind of credential in a single
2087            # request.
2088            #
2089            # If a method doesn't have any auth requirements, request credentials will be
2090            # ignored.
2091          "oauth": { # OAuth scopes are a way to define data and permissions on data. For example, # The requirements for OAuth credentials.
2092              # there are scopes defined for "Read-only access to Google Calendar" and
2093              # "Access to Cloud Platform". Users can consent to a scope for an application,
2094              # giving it permission to access that data on their behalf.
2095              #
2096              # OAuth scope specifications should be fairly coarse grained; a user will need
2097              # to see and understand the text description of what your scope means.
2098              #
2099              # In most cases: use one or at most two OAuth scopes for an entire family of
2100              # products. If your product has multiple APIs, you should probably be sharing
2101              # the OAuth scope across all of those APIs.
2102              #
2103              # When you need finer grained OAuth consent screens: talk with your product
2104              # management about how developers will use them in practice.
2105              #
2106              # Please note that even though each of the canonical scopes is enough for a
2107              # request to be accepted and passed to the backend, a request can still fail
2108              # due to the backend requiring additional scopes or permissions.
2109            "canonicalScopes": "A String", # The list of publicly documented OAuth scopes that are allowed access. An
2110                # OAuth token containing any of these scopes will be accepted.
2111                #
2112                # Example:
2113                #
2114                #      canonical_scopes: https://www.googleapis.com/auth/calendar,
2115                #                        https://www.googleapis.com/auth/calendar.read
2116          },
2117          "requirements": [ # Requirements for additional authentication providers.
2118            { # User-defined authentication requirements, including support for
2119                # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
2120              "providerId": "A String", # id from authentication provider.
2121                  #
2122                  # Example:
2123                  #
2124                  #     provider_id: bookstore_auth
2125              "audiences": "A String", # NOTE: This will be deprecated soon, once AuthProvider.audiences is
2126                  # implemented and accepted in all the runtime components.
2127                  #
2128                  # The list of JWT
2129                  # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
2130                  # that are allowed to access. A JWT containing any of these audiences will
2131                  # be accepted. When this setting is absent, only JWTs with audience
2132                  # "https://Service_name/API_name"
2133                  # will be accepted. For example, if no audiences are in the setting,
2134                  # LibraryService API will only accept JWTs with the following audience
2135                  # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
2136                  #
2137                  # Example:
2138                  #
2139                  #     audiences: bookstore_android.apps.googleusercontent.com,
2140                  #                bookstore_web.apps.googleusercontent.com
2141            },
2142          ],
2143          "allowWithoutCredential": True or False, # Whether to allow requests without a credential. The credential can be
2144              # an OAuth token, Google cookies (first-party auth) or EndUserCreds.
2145              #
2146              # For requests without credentials, if the service control environment is
2147              # specified, each incoming request **must** be associated with a service
2148              # consumer. This can be done by passing an API key that belongs to a consumer
2149              # project.
2150          "customAuth": { # Configuration for a custom authentication provider. # Configuration for custom authentication.
2151            "provider": "A String", # A configuration string containing connection information for the
2152                # authentication provider, typically formatted as a SmartService string
2153                # (go/smartservice).
2154          },
2155          "selector": "A String", # Selects the methods to which this rule applies.
2156              #
2157              # Refer to selector for syntax details.
2158        },
2159      ],
2160      "providers": [ # Defines a set of authentication providers that a service supports.
2161        { # Configuration for an anthentication provider, including support for
2162            # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
2163          "audiences": "A String", # The list of JWT
2164              # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
2165              # that are allowed to access. A JWT containing any of these audiences will
2166              # be accepted. When this setting is absent, only JWTs with audience
2167              # "https://Service_name/API_name"
2168              # will be accepted. For example, if no audiences are in the setting,
2169              # LibraryService API will only accept JWTs with the following audience
2170              # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
2171              #
2172              # Example:
2173              #
2174              #     audiences: bookstore_android.apps.googleusercontent.com,
2175              #                bookstore_web.apps.googleusercontent.com
2176          "jwksUri": "A String", # URL of the provider's public key set to validate signature of the JWT. See
2177              # [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
2178              # Optional if the key set document:
2179              #  - can be retrieved from
2180              #    [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html
2181              #    of the issuer.
2182              #  - can be inferred from the email domain of the issuer (e.g. a Google service account).
2183              #
2184              # Example: https://www.googleapis.com/oauth2/v1/certs
2185          "id": "A String", # The unique identifier of the auth provider. It will be referred to by
2186              # `AuthRequirement.provider_id`.
2187              #
2188              # Example: "bookstore_auth".
2189          "issuer": "A String", # Identifies the principal that issued the JWT. See
2190              # https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1
2191              # Usually a URL or an email address.
2192              #
2193              # Example: https://securetoken.google.com
2194              # Example: 1234567-compute@developer.gserviceaccount.com
2195        },
2196      ],
2197    },
2198    "usage": { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
2199      "rules": [ # A list of usage rules that apply to individual API methods.
2200          #
2201          # **NOTE:** All service configuration rules follow "last one wins" order.
2202        { # Usage configuration rules for the service.
2203            #
2204            # NOTE: Under development.
2205            #
2206            #
2207            # Use this rule to configure unregistered calls for the service. Unregistered
2208            # calls are calls that do not contain consumer project identity.
2209            # (Example: calls that do not contain an API key).
2210            # By default, API methods do not allow unregistered calls, and each method call
2211            # must be identified by a consumer project identity. Use this rule to
2212            # allow/disallow unregistered calls.
2213            #
2214            # Example of an API that wants to allow unregistered calls for entire service.
2215            #
2216            #     usage:
2217            #       rules:
2218            #       - selector: "*"
2219            #         allow_unregistered_calls: true
2220            #
2221            # Example of a method that wants to allow unregistered calls.
2222            #
2223            #     usage:
2224            #       rules:
2225            #       - selector: "google.example.library.v1.LibraryService.CreateBook"
2226            #         allow_unregistered_calls: true
2227          "allowUnregisteredCalls": True or False, # True, if the method allows unregistered calls; false otherwise.
2228          "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
2229              # methods in all APIs.
2230              #
2231              # Refer to selector for syntax details.
2232        },
2233      ],
2234      "producerNotificationChannel": "A String", # The full resource name of a channel used for sending notifications to the
2235          # service producer.
2236          #
2237          # Google Service Management currently only supports
2238          # [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
2239          # channel. To use Google Cloud Pub/Sub as the channel, this must be the name
2240          # of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
2241          # documented in https://cloud.google.com/pubsub/docs/overview.
2242      "requirements": [ # Requirements that must be satisfied before a consumer project can use the
2243          # service. Each requirement is of the form <service.name>/<requirement-id>;
2244          # for example 'serviceusage.googleapis.com/billing-enabled'.
2245        "A String",
2246      ],
2247    },
2248    "configVersion": 42, # The version of the service configuration. The config version may
2249        # influence interpretation of the configuration, for example, to
2250        # determine defaults. This is documented together with applicable
2251        # options. The current default for the config version itself is `3`.
2252    "producerProjectId": "A String", # The id of the Google developer project that owns the service.
2253        # Members of this project can manage the service configuration,
2254        # manage consumption of the service, etc.
2255    "http": { # Defines the HTTP configuration for a service. It contains a list of # HTTP configuration.
2256        # HttpRule, each specifying the mapping of an RPC method
2257        # to one or more HTTP REST API methods.
2258      "rules": [ # A list of HTTP configuration rules that apply to individual API methods.
2259          #
2260          # **NOTE:** All service configuration rules follow "last one wins" order.
2261        { # `HttpRule` defines the mapping of an RPC method to one or more HTTP
2262            # REST APIs.  The mapping determines what portions of the request
2263            # message are populated from the path, query parameters, or body of
2264            # the HTTP request.  The mapping is typically specified as an
2265            # `google.api.http` annotation, see "google/api/annotations.proto"
2266            # for details.
2267            #
2268            # The mapping consists of a field specifying the path template and
2269            # method kind.  The path template can refer to fields in the request
2270            # message, as in the example below which describes a REST GET
2271            # operation on a resource collection of messages:
2272            #
2273            #
2274            #     service Messaging {
2275            #       rpc GetMessage(GetMessageRequest) returns (Message) {
2276            #         option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}";
2277            #       }
2278            #     }
2279            #     message GetMessageRequest {
2280            #       message SubMessage {
2281            #         string subfield = 1;
2282            #       }
2283            #       string message_id = 1; // mapped to the URL
2284            #       SubMessage sub = 2;    // `sub.subfield` is url-mapped
2285            #     }
2286            #     message Message {
2287            #       string text = 1; // content of the resource
2288            #     }
2289            #
2290            # The same http annotation can alternatively be expressed inside the
2291            # `GRPC API Configuration` YAML file.
2292            #
2293            #     http:
2294            #       rules:
2295            #         - selector: <proto_package_name>.Messaging.GetMessage
2296            #           get: /v1/messages/{message_id}/{sub.subfield}
2297            #
2298            # This definition enables an automatic, bidrectional mapping of HTTP
2299            # JSON to RPC. Example:
2300            #
2301            # HTTP | RPC
2302            # -----|-----
2303            # `GET /v1/messages/123456/foo`  | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))`
2304            #
2305            # In general, not only fields but also field paths can be referenced
2306            # from a path pattern. Fields mapped to the path pattern cannot be
2307            # repeated and must have a primitive (non-message) type.
2308            #
2309            # Any fields in the request message which are not bound by the path
2310            # pattern automatically become (optional) HTTP query
2311            # parameters. Assume the following definition of the request message:
2312            #
2313            #
2314            #     service Messaging {
2315            #       rpc GetMessage(GetMessageRequest) returns (Message) {
2316            #         option (google.api.http).get = "/v1/messages/{message_id}";
2317            #       }
2318            #     }
2319            #     message GetMessageRequest {
2320            #       message SubMessage {
2321            #         string subfield = 1;
2322            #       }
2323            #       string message_id = 1; // mapped to the URL
2324            #       int64 revision = 2;    // becomes a parameter
2325            #       SubMessage sub = 3;    // `sub.subfield` becomes a parameter
2326            #     }
2327            #
2328            #
2329            # This enables a HTTP JSON to RPC mapping as below:
2330            #
2331            # HTTP | RPC
2332            # -----|-----
2333            # `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))`
2334            #
2335            # Note that fields which are mapped to HTTP parameters must have a
2336            # primitive type or a repeated primitive type. Message types are not
2337            # allowed. In the case of a repeated type, the parameter can be
2338            # repeated in the URL, as in `...?param=A&param=B`.
2339            #
2340            # For HTTP method kinds which allow a request body, the `body` field
2341            # specifies the mapping. Consider a REST update method on the
2342            # message resource collection:
2343            #
2344            #
2345            #     service Messaging {
2346            #       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {
2347            #         option (google.api.http) = {
2348            #           put: "/v1/messages/{message_id}"
2349            #           body: "message"
2350            #         };
2351            #       }
2352            #     }
2353            #     message UpdateMessageRequest {
2354            #       string message_id = 1; // mapped to the URL
2355            #       Message message = 2;   // mapped to the body
2356            #     }
2357            #
2358            #
2359            # The following HTTP JSON to RPC mapping is enabled, where the
2360            # representation of the JSON in the request body is determined by
2361            # protos JSON encoding:
2362            #
2363            # HTTP | RPC
2364            # -----|-----
2365            # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })`
2366            #
2367            # The special name `*` can be used in the body mapping to define that
2368            # every field not bound by the path template should be mapped to the
2369            # request body.  This enables the following alternative definition of
2370            # the update method:
2371            #
2372            #     service Messaging {
2373            #       rpc UpdateMessage(Message) returns (Message) {
2374            #         option (google.api.http) = {
2375            #           put: "/v1/messages/{message_id}"
2376            #           body: "*"
2377            #         };
2378            #       }
2379            #     }
2380            #     message Message {
2381            #       string message_id = 1;
2382            #       string text = 2;
2383            #     }
2384            #
2385            #
2386            # The following HTTP JSON to RPC mapping is enabled:
2387            #
2388            # HTTP | RPC
2389            # -----|-----
2390            # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")`
2391            #
2392            # Note that when using `*` in the body mapping, it is not possible to
2393            # have HTTP parameters, as all fields not bound by the path end in
2394            # the body. This makes this option more rarely used in practice of
2395            # defining REST APIs. The common usage of `*` is in custom methods
2396            # which don't use the URL at all for transferring data.
2397            #
2398            # It is possible to define multiple HTTP methods for one RPC by using
2399            # the `additional_bindings` option. Example:
2400            #
2401            #     service Messaging {
2402            #       rpc GetMessage(GetMessageRequest) returns (Message) {
2403            #         option (google.api.http) = {
2404            #           get: "/v1/messages/{message_id}"
2405            #           additional_bindings {
2406            #             get: "/v1/users/{user_id}/messages/{message_id}"
2407            #           }
2408            #         };
2409            #       }
2410            #     }
2411            #     message GetMessageRequest {
2412            #       string message_id = 1;
2413            #       string user_id = 2;
2414            #     }
2415            #
2416            #
2417            # This enables the following two alternative HTTP JSON to RPC
2418            # mappings:
2419            #
2420            # HTTP | RPC
2421            # -----|-----
2422            # `GET /v1/messages/123456` | `GetMessage(message_id: "123456")`
2423            # `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")`
2424            #
2425            # # Rules for HTTP mapping
2426            #
2427            # The rules for mapping HTTP path, query parameters, and body fields
2428            # to the request message are as follows:
2429            #
2430            # 1. The `body` field specifies either `*` or a field path, or is
2431            #    omitted. If omitted, it assumes there is no HTTP body.
2432            # 2. Leaf fields (recursive expansion of nested messages in the
2433            #    request) can be classified into three types:
2434            #     (a) Matched in the URL template.
2435            #     (b) Covered by body (if body is `*`, everything except (a) fields;
2436            #         else everything under the body field)
2437            #     (c) All other fields.
2438            # 3. URL query parameters found in the HTTP request are mapped to (c) fields.
2439            # 4. Any body sent with an HTTP request can contain only (b) fields.
2440            #
2441            # The syntax of the path template is as follows:
2442            #
2443            #     Template = "/" Segments [ Verb ] ;
2444            #     Segments = Segment { "/" Segment } ;
2445            #     Segment  = "*" | "**" | LITERAL | Variable ;
2446            #     Variable = "{" FieldPath [ "=" Segments ] "}" ;
2447            #     FieldPath = IDENT { "." IDENT } ;
2448            #     Verb     = ":" LITERAL ;
2449            #
2450            # The syntax `*` matches a single path segment. It follows the semantics of
2451            # [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String
2452            # Expansion.
2453            #
2454            # The syntax `**` matches zero or more path segments. It follows the semantics
2455            # of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved
2456            # Expansion. NOTE: it must be the last segment in the path except the Verb.
2457            #
2458            # The syntax `LITERAL` matches literal text in the URL path.
2459            #
2460            # The syntax `Variable` matches the entire path as specified by its template;
2461            # this nested template must not contain further variables. If a variable
2462            # matches a single path segment, its template may be omitted, e.g. `{var}`
2463            # is equivalent to `{var=*}`.
2464            #
2465            # NOTE: the field paths in variables and in the `body` must not refer to
2466            # repeated fields or map fields.
2467            #
2468            # Use CustomHttpPattern to specify any HTTP method that is not included in the
2469            # `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified for
2470            # a given URL path rule. The wild-card rule is useful for services that provide
2471            # content to Web (HTML) clients.
2472          "body": "A String", # The name of the request field whose value is mapped to the HTTP body, or
2473              # `*` for mapping all fields not captured by the path pattern to the HTTP
2474              # body. NOTE: the referred field must not be a repeated field and must be
2475              # present at the top-level of request message type.
2476          "get": "A String", # Used for listing and getting information about resources.
2477          "restCollection": "A String", # Optional. The REST collection name is by default derived from the URL
2478              # pattern. If specified, this field overrides the default collection name.
2479              # Example:
2480              #
2481              #     rpc AddressesAggregatedList(AddressesAggregatedListRequest)
2482              #         returns (AddressesAggregatedListResponse) {
2483              #       option (google.api.http) = {
2484              #         get: "/v1/projects/{project_id}/aggregated/addresses"
2485              #         rest_collection: "projects.addresses"
2486              #       };
2487              #     }
2488              #
2489              # This method has the automatically derived collection name
2490              # "projects.aggregated". Because, semantically, this rpc is actually an
2491              # operation on the "projects.addresses" collection, the `rest_collection`
2492              # field is configured to override the derived collection name.
2493          "additionalBindings": [ # Additional HTTP bindings for the selector. Nested bindings must
2494              # not contain an `additional_bindings` field themselves (that is,
2495              # the nesting may only be one level deep).
2496            # Object with schema name: HttpRule
2497          ],
2498          "mediaUpload": { # Defines the Media configuration for a service in case of an upload. # Use this only for Scotty Requests. Do not use this for media support using
2499              # Bytestream, add instead
2500              # [][google.bytestream.RestByteStream] as an API to your
2501              # configuration for Bytestream methods.
2502              # Use this only for Scotty Requests. Do not use this for media support using
2503              # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
2504              # your configuration for Bytestream methods.
2505            "progressNotification": True or False, # Whether to receive a notification for progress changes of media upload.
2506            "startNotification": True or False, # Whether to receive a notification on the start of media upload.
2507            "mimeTypes": [ # An array of mimetype patterns. Esf will only accept uploads that match one
2508                # of the given patterns.
2509              "A String",
2510            ],
2511            "completeNotification": True or False, # A boolean that determines whether a notification for the completion of an
2512                # upload should be sent to the backend. These notifications will not be seen
2513                # by the client and will not consume quota.
2514            "enabled": True or False, # Whether upload is enabled.
2515            "uploadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
2516                #
2517                # Specify name of the upload service if one is used for upload.
2518            "maxSize": "A String", # Optional maximum acceptable size for an upload.
2519                # The size is specified in bytes.
2520            "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
2521          },
2522          "selector": "A String", # Selects methods to which this rule applies.
2523              #
2524              # Refer to selector for syntax details.
2525          "responseBody": "A String", # The name of the response field whose value is mapped to the HTTP body of
2526              # response. Other response fields are ignored. This field is optional. When
2527              # not set, the response message will be used as HTTP body of response.
2528              # NOTE: the referred field must be not a repeated field and must be present
2529              # at the top-level of response message type.
2530          "restMethodName": "A String", # Optional. The rest method name is by default derived from the URL
2531              # pattern. If specified, this field overrides the default method name.
2532              # Example:
2533              #
2534              #     rpc CreateResource(CreateResourceRequest)
2535              #         returns (CreateResourceResponse) {
2536              #       option (google.api.http) = {
2537              #         post: "/v1/resources",
2538              #         body: "resource",
2539              #         rest_method_name: "insert"
2540              #       };
2541              #     }
2542              #
2543              # This method has the automatically derived rest method name "create", but
2544              #  for backwards compatability with apiary, it is specified as insert.
2545          "mediaDownload": { # Defines the Media configuration for a service in case of a download. # Use this only for Scotty Requests. Do not use this for bytestream methods.
2546              # For media support, add instead [][google.bytestream.RestByteStream] as an
2547              # API to your configuration.
2548              # Use this only for Scotty Requests. Do not use this for media support using
2549              # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
2550              # your configuration for Bytestream methods.
2551            "useDirectDownload": True or False, # A boolean that determines if direct download from ESF should be used for
2552                # download of this media.
2553            "enabled": True or False, # Whether download is enabled.
2554            "completeNotification": True or False, # A boolean that determines whether a notification for the completion of a
2555                # download should be sent to the backend.
2556            "maxDirectDownloadSize": "A String", # Optional maximum acceptable size for direct download.
2557                # The size is specified in bytes.
2558            "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
2559            "downloadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
2560                #
2561                # Specify name of the download service if one is used for download.
2562          },
2563          "put": "A String", # Used for updating a resource.
2564          "patch": "A String", # Used for updating a resource.
2565          "post": "A String", # Used for creating a resource.
2566          "custom": { # A custom pattern is used for defining custom HTTP verb. # Custom pattern is used for defining custom verbs.
2567            "path": "A String", # The path matched by this custom verb.
2568            "kind": "A String", # The name of this custom HTTP verb.
2569          },
2570          "delete": "A String", # Used for deleting a resource.
2571        },
2572      ],
2573      "fullyDecodeReservedExpansion": True or False, # When set to true, URL path parmeters will be fully URI-decoded except in
2574          # cases of single segment matches in reserved expansion, where "%2F" will be
2575          # left encoded.
2576          #
2577          # The default behavior is to not decode RFC 6570 reserved characters in multi
2578          # segment matches.
2579    },
2580    "apis": [ # A list of API interfaces exported by this service. Only the `name` field
2581        # of the google.protobuf.Api needs to be provided by the configuration
2582        # author, as the remaining fields will be derived from the IDL during the
2583        # normalization process. It is an error to specify an API interface here
2584        # which cannot be resolved against the associated IDL files.
2585      { # Api is a light-weight descriptor for a protocol buffer service.
2586        "name": "A String", # The fully qualified name of this api, including package name
2587            # followed by the api's simple name.
2588        "sourceContext": { # `SourceContext` represents information about the source of a # Source context for the protocol buffer service represented by this
2589            # message.
2590            # protobuf element, like the file in which it is defined.
2591          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
2592              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
2593        },
2594        "mixins": [ # Included APIs. See Mixin.
2595          { # Declares an API to be included in this API. The including API must
2596              # redeclare all the methods from the included API, but documentation
2597              # and options are inherited as follows:
2598              #
2599              # - If after comment and whitespace stripping, the documentation
2600              #   string of the redeclared method is empty, it will be inherited
2601              #   from the original method.
2602              #
2603              # - Each annotation belonging to the service config (http,
2604              #   visibility) which is not set in the redeclared method will be
2605              #   inherited.
2606              #
2607              # - If an http annotation is inherited, the path pattern will be
2608              #   modified as follows. Any version prefix will be replaced by the
2609              #   version of the including API plus the root path if specified.
2610              #
2611              # Example of a simple mixin:
2612              #
2613              #     package google.acl.v1;
2614              #     service AccessControl {
2615              #       // Get the underlying ACL object.
2616              #       rpc GetAcl(GetAclRequest) returns (Acl) {
2617              #         option (google.api.http).get = "/v1/{resource=**}:getAcl";
2618              #       }
2619              #     }
2620              #
2621              #     package google.storage.v2;
2622              #     service Storage {
2623              #       //       rpc GetAcl(GetAclRequest) returns (Acl);
2624              #
2625              #       // Get a data record.
2626              #       rpc GetData(GetDataRequest) returns (Data) {
2627              #         option (google.api.http).get = "/v2/{resource=**}";
2628              #       }
2629              #     }
2630              #
2631              # Example of a mixin configuration:
2632              #
2633              #     apis:
2634              #     - name: google.storage.v2.Storage
2635              #       mixins:
2636              #       - name: google.acl.v1.AccessControl
2637              #
2638              # The mixin construct implies that all methods in `AccessControl` are
2639              # also declared with same name and request/response types in
2640              # `Storage`. A documentation generator or annotation processor will
2641              # see the effective `Storage.GetAcl` method after inherting
2642              # documentation and annotations as follows:
2643              #
2644              #     service Storage {
2645              #       // Get the underlying ACL object.
2646              #       rpc GetAcl(GetAclRequest) returns (Acl) {
2647              #         option (google.api.http).get = "/v2/{resource=**}:getAcl";
2648              #       }
2649              #       ...
2650              #     }
2651              #
2652              # Note how the version in the path pattern changed from `v1` to `v2`.
2653              #
2654              # If the `root` field in the mixin is specified, it should be a
2655              # relative path under which inherited HTTP paths are placed. Example:
2656              #
2657              #     apis:
2658              #     - name: google.storage.v2.Storage
2659              #       mixins:
2660              #       - name: google.acl.v1.AccessControl
2661              #         root: acls
2662              #
2663              # This implies the following inherited HTTP annotation:
2664              #
2665              #     service Storage {
2666              #       // Get the underlying ACL object.
2667              #       rpc GetAcl(GetAclRequest) returns (Acl) {
2668              #         option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
2669              #       }
2670              #       ...
2671              #     }
2672            "root": "A String", # If non-empty specifies a path under which inherited HTTP paths
2673                # are rooted.
2674            "name": "A String", # The fully qualified name of the API which is included.
2675          },
2676        ],
2677        "syntax": "A String", # The source syntax of the service.
2678        "version": "A String", # A version string for this api. If specified, must have the form
2679            # `major-version.minor-version`, as in `1.10`. If the minor version
2680            # is omitted, it defaults to zero. If the entire version field is
2681            # empty, the major version is derived from the package name, as
2682            # outlined below. If the field is not empty, the version in the
2683            # package name will be verified to be consistent with what is
2684            # provided here.
2685            #
2686            # The versioning schema uses [semantic
2687            # versioning](http://semver.org) where the major version number
2688            # indicates a breaking change and the minor version an additive,
2689            # non-breaking change. Both version numbers are signals to users
2690            # what to expect from different versions, and should be carefully
2691            # chosen based on the product plan.
2692            #
2693            # The major version is also reflected in the package name of the
2694            # API, which must end in `v<major-version>`, as in
2695            # `google.feature.v1`. For major versions 0 and 1, the suffix can
2696            # be omitted. Zero major versions must only be used for
2697            # experimental, none-GA apis.
2698        "options": [ # Any metadata attached to the API.
2699          { # A protocol buffer option, which can be attached to a message, field,
2700              # enumeration, etc.
2701            "name": "A String", # The option's name. For protobuf built-in options (options defined in
2702                # descriptor.proto), this is the short name. For example, `"map_entry"`.
2703                # For custom options, it should be the fully-qualified name. For example,
2704                # `"google.api.http"`.
2705            "value": { # The option's value packed in an Any message. If the value is a primitive,
2706                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
2707                # should be used. If the value is an enum, it should be stored as an int32
2708                # value using the google.protobuf.Int32Value type.
2709              "a_key": "", # Properties of the object. Contains field @type with type URL.
2710            },
2711          },
2712        ],
2713        "methods": [ # The methods of this api, in unspecified order.
2714          { # Method represents a method of an api.
2715            "name": "A String", # The simple name of this method.
2716            "requestStreaming": True or False, # If true, the request is streamed.
2717            "responseTypeUrl": "A String", # The URL of the output message type.
2718            "requestTypeUrl": "A String", # A URL of the input message type.
2719            "responseStreaming": True or False, # If true, the response is streamed.
2720            "syntax": "A String", # The source syntax of this method.
2721            "options": [ # Any metadata attached to the method.
2722              { # A protocol buffer option, which can be attached to a message, field,
2723                  # enumeration, etc.
2724                "name": "A String", # The option's name. For protobuf built-in options (options defined in
2725                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
2726                    # For custom options, it should be the fully-qualified name. For example,
2727                    # `"google.api.http"`.
2728                "value": { # The option's value packed in an Any message. If the value is a primitive,
2729                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
2730                    # should be used. If the value is an enum, it should be stored as an int32
2731                    # value using the google.protobuf.Int32Value type.
2732                  "a_key": "", # Properties of the object. Contains field @type with type URL.
2733                },
2734              },
2735            ],
2736          },
2737        ],
2738      },
2739    ],
2740    "customError": { # Customize service error responses.  For example, list any service # Custom error configuration.
2741        # specific protobuf types that can appear in error detail lists of
2742        # error responses.
2743        #
2744        # Example:
2745        #
2746        #     custom_error:
2747        #       types:
2748        #       - google.foo.v1.CustomError
2749        #       - google.foo.v1.AnotherError
2750      "rules": [ # The list of custom error rules that apply to individual API messages.
2751          #
2752          # **NOTE:** All service configuration rules follow "last one wins" order.
2753        { # A custom error rule.
2754          "isErrorType": True or False, # Mark this message as possible payload in error response.  Otherwise,
2755              # objects of this type will be filtered when they appear in error payload.
2756          "selector": "A String", # Selects messages to which this rule applies.
2757              #
2758              # Refer to selector for syntax details.
2759        },
2760      ],
2761      "types": [ # The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.
2762        "A String",
2763      ],
2764    },
2765    "quota": { # Quota configuration helps to achieve fairness and budgeting in service # Quota configuration.
2766        # usage.
2767        #
2768        # The quota configuration works this way:
2769        # - The service configuration defines a set of metrics.
2770        # - For API calls, the quota.metric_rules maps methods to metrics with
2771        #   corresponding costs.
2772        # - The quota.limits defines limits on the metrics, which will be used for
2773        #   quota checks at runtime.
2774        #
2775        # An example quota configuration in yaml format:
2776        #
2777        #    quota:
2778        #
2779        #      - name: apiWriteQpsPerProject
2780        #        metric: library.googleapis.com/write_calls
2781        #        unit: "1/min/{project}"  # rate limit for consumer projects
2782        #        values:
2783        #          STANDARD: 10000
2784        #
2785        #
2786        #      # The metric rules bind all methods to the read_calls metric,
2787        #      # except for the UpdateBook and DeleteBook methods. These two methods
2788        #      # are mapped to the write_calls metric, with the UpdateBook method
2789        #      # consuming at twice rate as the DeleteBook method.
2790        #      metric_rules:
2791        #      - selector: "*"
2792        #        metric_costs:
2793        #          library.googleapis.com/read_calls: 1
2794        #      - selector: google.example.library.v1.LibraryService.UpdateBook
2795        #        metric_costs:
2796        #          library.googleapis.com/write_calls: 2
2797        #      - selector: google.example.library.v1.LibraryService.DeleteBook
2798        #        metric_costs:
2799        #          library.googleapis.com/write_calls: 1
2800        #
2801        #  Corresponding Metric definition:
2802        #
2803        #      metrics:
2804        #      - name: library.googleapis.com/read_calls
2805        #        display_name: Read requests
2806        #        metric_kind: DELTA
2807        #        value_type: INT64
2808        #
2809        #      - name: library.googleapis.com/write_calls
2810        #        display_name: Write requests
2811        #        metric_kind: DELTA
2812        #        value_type: INT64
2813      "metricRules": [ # List of `MetricRule` definitions, each one mapping a selected method to one
2814          # or more metrics.
2815        { # Bind API methods to metrics. Binding a method to a metric causes that
2816            # metric's configured quota behaviors to apply to the method call.
2817          "metricCosts": { # Metrics to update when the selected methods are called, and the associated
2818              # cost applied to each metric.
2819              #
2820              # The key of the map is the metric name, and the values are the amount
2821              # increased for the metric against which the quota limits are defined.
2822              # The value must not be negative.
2823            "a_key": "A String",
2824          },
2825          "selector": "A String", # Selects the methods to which this rule applies.
2826              #
2827              # Refer to selector for syntax details.
2828        },
2829      ],
2830      "limits": [ # List of `QuotaLimit` definitions for the service.
2831        { # `QuotaLimit` defines a specific limit that applies over a specified duration
2832            # for a limit type. There can be at most one limit for a duration and limit
2833            # type combination defined within a `QuotaGroup`.
2834          "displayName": "A String", # User-visible display name for this limit.
2835              # Optional. If not set, the UI will provide a default display name based on
2836              # the quota configuration. This field can be used to override the default
2837              # display name generated from the configuration.
2838          "description": "A String", # Optional. User-visible, extended description for this quota limit.
2839              # Should be used only when more context is needed to understand this limit
2840              # than provided by the limit's display name (see: `display_name`).
2841          "defaultLimit": "A String", # Default number of tokens that can be consumed during the specified
2842              # duration. This is the number of tokens assigned when a client
2843              # application developer activates the service for his/her project.
2844              #
2845              # Specifying a value of 0 will block all requests. This can be used if you
2846              # are provisioning quota to selected consumers and blocking others.
2847              # Similarly, a value of -1 will indicate an unlimited quota. No other
2848              # negative values are allowed.
2849              #
2850              # Used by group-based quotas only.
2851          "metric": "A String", # The name of the metric this quota limit applies to. The quota limits with
2852              # the same metric will be checked together during runtime. The metric must be
2853              # defined within the service config.
2854              #
2855              # Used by metric-based quotas only.
2856          "values": { # Tiered limit values, currently only STANDARD is supported.
2857            "a_key": "A String",
2858          },
2859          "maxLimit": "A String", # Maximum number of tokens that can be consumed during the specified
2860              # duration. Client application developers can override the default limit up
2861              # to this maximum. If specified, this value cannot be set to a value less
2862              # than the default limit. If not specified, it is set to the default limit.
2863              #
2864              # To allow clients to apply overrides with no upper bound, set this to -1,
2865              # indicating unlimited maximum quota.
2866              #
2867              # Used by group-based quotas only.
2868          "duration": "A String", # Duration of this limit in textual notation. Example: "100s", "24h", "1d".
2869              # For duration longer than a day, only multiple of days is supported. We
2870              # support only "100s" and "1d" for now. Additional support will be added in
2871              # the future. "0" indicates indefinite duration.
2872              #
2873              # Used by group-based quotas only.
2874          "freeTier": "A String", # Free tier value displayed in the Developers Console for this limit.
2875              # The free tier is the number of tokens that will be subtracted from the
2876              # billed amount when billing is enabled.
2877              # This field can only be set on a limit with duration "1d", in a billable
2878              # group; it is invalid on any other limit. If this field is not set, it
2879              # defaults to 0, indicating that there is no free tier for this service.
2880              #
2881              # Used by group-based quotas only.
2882          "unit": "A String", # Specify the unit of the quota limit. It uses the same syntax as
2883              # Metric.unit. The supported unit kinds are determined by the quota
2884              # backend system.
2885              #
2886              # The [Google Service Control](https://cloud.google.com/service-control)
2887              # supports the following unit components:
2888              # * One of the time intevals:
2889              #   * "/min"  for quota every minute.
2890              #   * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
2891              #   * Otherwise the quota won't be reset by time, such as storage limit.
2892              # * One and only one of the granted containers:
2893              #   * "/{project}" quota for a project
2894              #
2895              # Here are some examples:
2896              # * "1/min/{project}" for quota per minute per project.
2897              #
2898              # Note: the order of unit components is insignificant.
2899              # The "1" at the beginning is required to follow the metric unit syntax.
2900              #
2901              # Used by metric-based quotas only.
2902          "name": "A String", # Name of the quota limit. The name is used to refer to the limit when
2903              # overriding the default limit on per-consumer basis.
2904              #
2905              # For metric-based quota limits, the name must be provided, and it must be
2906              # unique within the service. The name can only include alphanumeric
2907              # characters as well as '-'.
2908              #
2909              # The maximum length of the limit name is 64 characters.
2910              #
2911              # The name of a limit is used as a unique identifier for this limit.
2912              # Therefore, once a limit has been put into use, its name should be
2913              # immutable. You can use the display_name field to provide a user-friendly
2914              # name for the limit. The display name can be evolved over time without
2915              # affecting the identity of the limit.
2916        },
2917      ],
2918    },
2919    "visibility": { # `Visibility` defines restrictions for the visibility of service # API visibility configuration.
2920        # elements.  Restrictions are specified using visibility labels
2921        # (e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.
2922        #
2923        # Users and projects can have access to more than one visibility label. The
2924        # effective visibility for multiple labels is the union of each label's
2925        # elements, plus any unrestricted elements.
2926        #
2927        # If an element and its parents have no restrictions, visibility is
2928        # unconditionally granted.
2929        #
2930        # Example:
2931        #
2932        #     visibility:
2933        #       rules:
2934        #       - selector: google.calendar.Calendar.EnhancedSearch
2935        #         restriction: TRUSTED_TESTER
2936        #       - selector: google.calendar.Calendar.Delegate
2937        #         restriction: GOOGLE_INTERNAL
2938        #
2939        # Here, all methods are publicly visible except for the restricted methods
2940        # EnhancedSearch and Delegate.
2941      "rules": [ # A list of visibility rules that apply to individual API elements.
2942          #
2943          # **NOTE:** All service configuration rules follow "last one wins" order.
2944        { # A visibility rule provides visibility configuration for an individual API
2945            # element.
2946          "restriction": "A String", # A comma-separated list of visibility labels that apply to the `selector`.
2947              # Any of the listed labels can be used to grant the visibility.
2948              #
2949              # If a rule has multiple labels, removing one of the labels but not all of
2950              # them can break clients.
2951              #
2952              # Example:
2953              #
2954              #     visibility:
2955              #       rules:
2956              #       - selector: google.calendar.Calendar.EnhancedSearch
2957              #         restriction: GOOGLE_INTERNAL, TRUSTED_TESTER
2958              #
2959              # Removing GOOGLE_INTERNAL from this restriction will break clients that
2960              # rely on this method and only had access to it through GOOGLE_INTERNAL.
2961          "selector": "A String", # Selects methods, messages, fields, enums, etc. to which this rule applies.
2962              #
2963              # Refer to selector for syntax details.
2964        },
2965      ],
2966    },
2967    "metrics": [ # Defines the metrics used by this service.
2968      { # Defines a metric type and its schema. Once a metric descriptor is created,
2969          # deleting or altering it stops data collection and makes the metric type's
2970          # existing data unusable.
2971        "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces.
2972            # Use sentence case without an ending period, for example "Request count".
2973        "description": "A String", # A detailed description of the metric, which can be used in documentation.
2974        "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
2975            # Some combinations of `metric_kind` and `value_type` might not be supported.
2976        "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
2977            # Some combinations of `metric_kind` and `value_type` might not be supported.
2978        "labels": [ # The set of labels that can be used to describe a specific
2979            # instance of this metric type. For example, the
2980            # `appengine.googleapis.com/http/server/response_latencies` metric
2981            # type has a label for the HTTP response code, `response_code`, so
2982            # you can look at latencies for successful responses or just
2983            # for responses that failed.
2984          { # A description of a label.
2985            "valueType": "A String", # The type of data that can be assigned to the label.
2986            "description": "A String", # A human-readable description for the label.
2987            "key": "A String", # The label key.
2988          },
2989        ],
2990        "type": "A String", # The metric type, including its DNS name prefix. The type is not
2991            # URL-encoded.  All user-defined custom metric types have the DNS name
2992            # `custom.googleapis.com`.  Metric types should use a natural hierarchical
2993            # grouping. For example:
2994            #
2995            #     "custom.googleapis.com/invoice/paid/amount"
2996            #     "appengine.googleapis.com/http/server/response_latencies"
2997        "unit": "A String", # The unit in which the metric value is reported. It is only applicable
2998            # if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The
2999            # supported units are a subset of [The Unified Code for Units of
3000            # Measure](http://unitsofmeasure.org/ucum.html) standard:
3001            #
3002            # **Basic units (UNIT)**
3003            #
3004            # * `bit`   bit
3005            # * `By`    byte
3006            # * `s`     second
3007            # * `min`   minute
3008            # * `h`     hour
3009            # * `d`     day
3010            #
3011            # **Prefixes (PREFIX)**
3012            #
3013            # * `k`     kilo    (10**3)
3014            # * `M`     mega    (10**6)
3015            # * `G`     giga    (10**9)
3016            # * `T`     tera    (10**12)
3017            # * `P`     peta    (10**15)
3018            # * `E`     exa     (10**18)
3019            # * `Z`     zetta   (10**21)
3020            # * `Y`     yotta   (10**24)
3021            # * `m`     milli   (10**-3)
3022            # * `u`     micro   (10**-6)
3023            # * `n`     nano    (10**-9)
3024            # * `p`     pico    (10**-12)
3025            # * `f`     femto   (10**-15)
3026            # * `a`     atto    (10**-18)
3027            # * `z`     zepto   (10**-21)
3028            # * `y`     yocto   (10**-24)
3029            # * `Ki`    kibi    (2**10)
3030            # * `Mi`    mebi    (2**20)
3031            # * `Gi`    gibi    (2**30)
3032            # * `Ti`    tebi    (2**40)
3033            #
3034            # **Grammar**
3035            #
3036            # The grammar includes the dimensionless unit `1`, such as `1/s`.
3037            #
3038            # The grammar also includes these connectors:
3039            #
3040            # * `/`    division (as an infix operator, e.g. `1/s`).
3041            # * `.`    multiplication (as an infix operator, e.g. `GBy.d`)
3042            #
3043            # The grammar for a unit is as follows:
3044            #
3045            #     Expression = Component { "." Component } { "/" Component } ;
3046            #
3047            #     Component = [ PREFIX ] UNIT [ Annotation ]
3048            #               | Annotation
3049            #               | "1"
3050            #               ;
3051            #
3052            #     Annotation = "{" NAME "}" ;
3053            #
3054            # Notes:
3055            #
3056            # * `Annotation` is just a comment if it follows a `UNIT` and is
3057            #    equivalent to `1` if it is used alone. For examples,
3058            #    `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.
3059            # * `NAME` is a sequence of non-blank printable ASCII characters not
3060            #    containing '{' or '}'.
3061        "name": "A String", # The resource name of the metric descriptor. Depending on the
3062            # implementation, the name typically includes: (1) the parent resource name
3063            # that defines the scope of the metric type or of its data; and (2) the
3064            # metric's URL-encoded type, which also appears in the `type` field of this
3065            # descriptor. For example, following is the resource name of a custom
3066            # metric within the GCP project `my-project-id`:
3067            #
3068            #     "projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount"
3069      },
3070    ],
3071    "enums": [ # A list of all enum types included in this API service.  Enums
3072        # referenced directly or indirectly by the `apis` are automatically
3073        # included.  Enums which are not referenced but shall be included
3074        # should be listed here by name. Example:
3075        #
3076        #     enums:
3077        #     - name: google.someapi.v1.SomeEnum
3078      { # Enum type definition.
3079        "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
3080            # protobuf element, like the file in which it is defined.
3081          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
3082              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
3083        },
3084        "enumvalue": [ # Enum value definitions.
3085          { # Enum value definition.
3086            "options": [ # Protocol buffer options.
3087              { # A protocol buffer option, which can be attached to a message, field,
3088                  # enumeration, etc.
3089                "name": "A String", # The option's name. For protobuf built-in options (options defined in
3090                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
3091                    # For custom options, it should be the fully-qualified name. For example,
3092                    # `"google.api.http"`.
3093                "value": { # The option's value packed in an Any message. If the value is a primitive,
3094                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
3095                    # should be used. If the value is an enum, it should be stored as an int32
3096                    # value using the google.protobuf.Int32Value type.
3097                  "a_key": "", # Properties of the object. Contains field @type with type URL.
3098                },
3099              },
3100            ],
3101            "name": "A String", # Enum value name.
3102            "number": 42, # Enum value number.
3103          },
3104        ],
3105        "options": [ # Protocol buffer options.
3106          { # A protocol buffer option, which can be attached to a message, field,
3107              # enumeration, etc.
3108            "name": "A String", # The option's name. For protobuf built-in options (options defined in
3109                # descriptor.proto), this is the short name. For example, `"map_entry"`.
3110                # For custom options, it should be the fully-qualified name. For example,
3111                # `"google.api.http"`.
3112            "value": { # The option's value packed in an Any message. If the value is a primitive,
3113                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
3114                # should be used. If the value is an enum, it should be stored as an int32
3115                # value using the google.protobuf.Int32Value type.
3116              "a_key": "", # Properties of the object. Contains field @type with type URL.
3117            },
3118          },
3119        ],
3120        "name": "A String", # Enum type name.
3121        "syntax": "A String", # The source syntax.
3122      },
3123    ],
3124    "types": [ # A list of all proto message types included in this API service.
3125        # Types referenced directly or indirectly by the `apis` are
3126        # automatically included.  Messages which are not referenced but
3127        # shall be included, such as types used by the `google.protobuf.Any` type,
3128        # should be listed here by name. Example:
3129        #
3130        #     types:
3131        #     - name: google.protobuf.Int32
3132      { # A protocol buffer message type.
3133        "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
3134          "A String",
3135        ],
3136        "name": "A String", # The fully qualified message name.
3137        "fields": [ # The list of fields.
3138          { # A single field of a message type.
3139            "kind": "A String", # The field type.
3140            "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
3141                # types. The first type has index 1; zero means the type is not in the list.
3142            "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
3143                # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
3144            "name": "A String", # The field name.
3145            "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
3146            "jsonName": "A String", # The field JSON name.
3147            "number": 42, # The field number.
3148            "cardinality": "A String", # The field cardinality.
3149            "options": [ # The protocol buffer options.
3150              { # A protocol buffer option, which can be attached to a message, field,
3151                  # enumeration, etc.
3152                "name": "A String", # The option's name. For protobuf built-in options (options defined in
3153                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
3154                    # For custom options, it should be the fully-qualified name. For example,
3155                    # `"google.api.http"`.
3156                "value": { # The option's value packed in an Any message. If the value is a primitive,
3157                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
3158                    # should be used. If the value is an enum, it should be stored as an int32
3159                    # value using the google.protobuf.Int32Value type.
3160                  "a_key": "", # Properties of the object. Contains field @type with type URL.
3161                },
3162              },
3163            ],
3164            "packed": True or False, # Whether to use alternative packed wire representation.
3165          },
3166        ],
3167        "syntax": "A String", # The source syntax.
3168        "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
3169            # protobuf element, like the file in which it is defined.
3170          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
3171              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
3172        },
3173        "options": [ # The protocol buffer options.
3174          { # A protocol buffer option, which can be attached to a message, field,
3175              # enumeration, etc.
3176            "name": "A String", # The option's name. For protobuf built-in options (options defined in
3177                # descriptor.proto), this is the short name. For example, `"map_entry"`.
3178                # For custom options, it should be the fully-qualified name. For example,
3179                # `"google.api.http"`.
3180            "value": { # The option's value packed in an Any message. If the value is a primitive,
3181                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
3182                # should be used. If the value is an enum, it should be stored as an int32
3183                # value using the google.protobuf.Int32Value type.
3184              "a_key": "", # Properties of the object. Contains field @type with type URL.
3185            },
3186          },
3187        ],
3188      },
3189    ],
3190    "logging": { # Logging configuration of the service. # Logging configuration.
3191        #
3192        # The following example shows how to configure logs to be sent to the
3193        # producer and consumer projects. In the example, the `activity_history`
3194        # log is sent to both the producer and consumer projects, whereas the
3195        # `purchase_history` log is only sent to the producer project.
3196        #
3197        #     monitored_resources:
3198        #     - type: library.googleapis.com/branch
3199        #       labels:
3200        #       - key: /city
3201        #         description: The city where the library branch is located in.
3202        #       - key: /name
3203        #         description: The name of the branch.
3204        #     logs:
3205        #     - name: activity_history
3206        #       labels:
3207        #       - key: /customer_id
3208        #     - name: purchase_history
3209        #     logging:
3210        #       producer_destinations:
3211        #       - monitored_resource: library.googleapis.com/branch
3212        #         logs:
3213        #         - activity_history
3214        #         - purchase_history
3215        #       consumer_destinations:
3216        #       - monitored_resource: library.googleapis.com/branch
3217        #         logs:
3218        #         - activity_history
3219      "producerDestinations": [ # Logging configurations for sending logs to the producer project.
3220          # There can be multiple producer destinations, each one must have a
3221          # different monitored resource type. A log can be used in at most
3222          # one producer destination.
3223        { # Configuration of a specific logging destination (the producer project
3224            # or the consumer project).
3225          "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
3226              # Service.monitored_resources section.
3227          "logs": [ # Names of the logs to be sent to this destination. Each name must
3228              # be defined in the Service.logs section. If the log name is
3229              # not a domain scoped name, it will be automatically prefixed with
3230              # the service name followed by "/".
3231            "A String",
3232          ],
3233        },
3234      ],
3235      "consumerDestinations": [ # Logging configurations for sending logs to the consumer project.
3236          # There can be multiple consumer destinations, each one must have a
3237          # different monitored resource type. A log can be used in at most
3238          # one consumer destination.
3239        { # Configuration of a specific logging destination (the producer project
3240            # or the consumer project).
3241          "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
3242              # Service.monitored_resources section.
3243          "logs": [ # Names of the logs to be sent to this destination. Each name must
3244              # be defined in the Service.logs section. If the log name is
3245              # not a domain scoped name, it will be automatically prefixed with
3246              # the service name followed by "/".
3247            "A String",
3248          ],
3249        },
3250      ],
3251    },
3252    "name": "A String", # The DNS address at which this service is available,
3253        # e.g. `calendar.googleapis.com`.
3254    "documentation": { # `Documentation` provides the information for describing a service. # Additional API documentation.
3255        #
3256        # Example:
3257        # <pre><code>documentation:
3258        #   summary: >
3259        #     The Google Calendar API gives access
3260        #     to most calendar features.
3261        #   pages:
3262        #   - name: Overview
3263        #     content: &#40;== include google/foo/overview.md ==&#41;
3264        #   - name: Tutorial
3265        #     content: &#40;== include google/foo/tutorial.md ==&#41;
3266        #     subpages;
3267        #     - name: Java
3268        #       content: &#40;== include google/foo/tutorial_java.md ==&#41;
3269        #   rules:
3270        #   - selector: google.calendar.Calendar.Get
3271        #     description: >
3272        #       ...
3273        #   - selector: google.calendar.Calendar.Put
3274        #     description: >
3275        #       ...
3276        # </code></pre>
3277        # Documentation is provided in markdown syntax. In addition to
3278        # standard markdown features, definition lists, tables and fenced
3279        # code blocks are supported. Section headers can be provided and are
3280        # interpreted relative to the section nesting of the context where
3281        # a documentation fragment is embedded.
3282        #
3283        # Documentation from the IDL is merged with documentation defined
3284        # via the config at normalization time, where documentation provided
3285        # by config rules overrides IDL provided.
3286        #
3287        # A number of constructs specific to the API platform are supported
3288        # in documentation text.
3289        #
3290        # In order to reference a proto element, the following
3291        # notation can be used:
3292        # <pre><code>&#91;fully.qualified.proto.name]&#91;]</code></pre>
3293        # To override the display text used for the link, this can be used:
3294        # <pre><code>&#91;display text]&#91;fully.qualified.proto.name]</code></pre>
3295        # Text can be excluded from doc using the following notation:
3296        # <pre><code>&#40;-- internal comment --&#41;</code></pre>
3297        # Comments can be made conditional using a visibility label. The below
3298        # text will be only rendered if the `BETA` label is available:
3299        # <pre><code>&#40;--BETA: comment for BETA users --&#41;</code></pre>
3300        # A few directives are available in documentation. Note that
3301        # directives must appear on a single line to be properly
3302        # identified. The `include` directive includes a markdown file from
3303        # an external source:
3304        # <pre><code>&#40;== include path/to/file ==&#41;</code></pre>
3305        # The `resource_for` directive marks a message to be the resource of
3306        # a collection in REST view. If it is not specified, tools attempt
3307        # to infer the resource from the operations in a collection:
3308        # <pre><code>&#40;== resource_for v1.shelves.books ==&#41;</code></pre>
3309        # The directive `suppress_warning` does not directly affect documentation
3310        # and is documented together with service config validation.
3311      "rules": [ # A list of documentation rules that apply to individual API elements.
3312          #
3313          # **NOTE:** All service configuration rules follow "last one wins" order.
3314        { # A documentation rule provides information about individual API elements.
3315          "description": "A String", # Description of the selected API(s).
3316          "deprecationDescription": "A String", # Deprecation description of the selected element(s). It can be provided if an
3317              # element is marked as `deprecated`.
3318          "selector": "A String", # The selector is a comma-separated list of patterns. Each pattern is a
3319              # qualified name of the element which may end in "*", indicating a wildcard.
3320              # Wildcards are only allowed at the end and for a whole component of the
3321              # qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To
3322              # specify a default for all applicable elements, the whole pattern "*"
3323              # is used.
3324        },
3325      ],
3326      "documentationRootUrl": "A String", # The URL to the root of documentation.
3327      "overview": "A String", # Declares a single overview page. For example:
3328          # <pre><code>documentation:
3329          #   summary: ...
3330          #   overview: &#40;== include overview.md ==&#41;
3331          # </code></pre>
3332          # This is a shortcut for the following declaration (using pages style):
3333          # <pre><code>documentation:
3334          #   summary: ...
3335          #   pages:
3336          #   - name: Overview
3337          #     content: &#40;== include overview.md ==&#41;
3338          # </code></pre>
3339          # Note: you cannot specify both `overview` field and `pages` field.
3340      "pages": [ # The top level pages for the documentation set.
3341        { # Represents a documentation page. A page can contain subpages to represent
3342            # nested documentation set structure.
3343          "content": "A String", # The Markdown content of the page. You can use <code>&#40;== include {path} ==&#41;</code>
3344              # to include content from a Markdown file.
3345          "subpages": [ # Subpages of this page. The order of subpages specified here will be
3346              # honored in the generated docset.
3347            # Object with schema name: Page
3348          ],
3349          "name": "A String", # The name of the page. It will be used as an identity of the page to
3350              # generate URI of the page, text of the link to this page in navigation,
3351              # etc. The full page name (start from the root page name to this page
3352              # concatenated with `.`) can be used as reference to the page in your
3353              # documentation. For example:
3354              # <pre><code>pages:
3355              # - name: Tutorial
3356              #   content: &#40;== include tutorial.md ==&#41;
3357              #   subpages:
3358              #   - name: Java
3359              #     content: &#40;== include tutorial_java.md ==&#41;
3360              # </code></pre>
3361              # You can reference `Java` page using Markdown reference link syntax:
3362              # `Java`.
3363        },
3364      ],
3365      "summary": "A String", # A short summary of what the service does. Can only be provided by
3366          # plain text.
3367    },
3368    "sourceInfo": { # Source information used to create a Service Config # Output only. The source information for this configuration if available.
3369      "sourceFiles": [ # All files used during config generation.
3370        {
3371          "a_key": "", # Properties of the object. Contains field @type with type URL.
3372        },
3373      ],
3374    },
3375    "systemTypes": [ # A list of all proto message types included in this API service.
3376        # It serves similar purpose as [google.api.Service.types], except that
3377        # these types are not needed by user-defined APIs. Therefore, they will not
3378        # show up in the generated discovery doc. This field should only be used
3379        # to define system APIs in ESF.
3380      { # A protocol buffer message type.
3381        "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
3382          "A String",
3383        ],
3384        "name": "A String", # The fully qualified message name.
3385        "fields": [ # The list of fields.
3386          { # A single field of a message type.
3387            "kind": "A String", # The field type.
3388            "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
3389                # types. The first type has index 1; zero means the type is not in the list.
3390            "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
3391                # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
3392            "name": "A String", # The field name.
3393            "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
3394            "jsonName": "A String", # The field JSON name.
3395            "number": 42, # The field number.
3396            "cardinality": "A String", # The field cardinality.
3397            "options": [ # The protocol buffer options.
3398              { # A protocol buffer option, which can be attached to a message, field,
3399                  # enumeration, etc.
3400                "name": "A String", # The option's name. For protobuf built-in options (options defined in
3401                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
3402                    # For custom options, it should be the fully-qualified name. For example,
3403                    # `"google.api.http"`.
3404                "value": { # The option's value packed in an Any message. If the value is a primitive,
3405                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
3406                    # should be used. If the value is an enum, it should be stored as an int32
3407                    # value using the google.protobuf.Int32Value type.
3408                  "a_key": "", # Properties of the object. Contains field @type with type URL.
3409                },
3410              },
3411            ],
3412            "packed": True or False, # Whether to use alternative packed wire representation.
3413          },
3414        ],
3415        "syntax": "A String", # The source syntax.
3416        "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
3417            # protobuf element, like the file in which it is defined.
3418          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
3419              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
3420        },
3421        "options": [ # The protocol buffer options.
3422          { # A protocol buffer option, which can be attached to a message, field,
3423              # enumeration, etc.
3424            "name": "A String", # The option's name. For protobuf built-in options (options defined in
3425                # descriptor.proto), this is the short name. For example, `"map_entry"`.
3426                # For custom options, it should be the fully-qualified name. For example,
3427                # `"google.api.http"`.
3428            "value": { # The option's value packed in an Any message. If the value is a primitive,
3429                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
3430                # should be used. If the value is an enum, it should be stored as an int32
3431                # value using the google.protobuf.Int32Value type.
3432              "a_key": "", # Properties of the object. Contains field @type with type URL.
3433            },
3434          },
3435        ],
3436      },
3437    ],
3438    "context": { # `Context` defines which contexts an API requests. # Context configuration.
3439        #
3440        # Example:
3441        #
3442        #     context:
3443        #       rules:
3444        #       - selector: "*"
3445        #         requested:
3446        #         - google.rpc.context.ProjectContext
3447        #         - google.rpc.context.OriginContext
3448        #
3449        # The above specifies that all methods in the API request
3450        # `google.rpc.context.ProjectContext` and
3451        # `google.rpc.context.OriginContext`.
3452        #
3453        # Available context types are defined in package
3454        # `google.rpc.context`.
3455      "rules": [ # A list of RPC context rules that apply to individual API methods.
3456          #
3457          # **NOTE:** All service configuration rules follow "last one wins" order.
3458        { # A context rule provides information about the context for an individual API
3459            # element.
3460          "provided": [ # A list of full type names of provided contexts.
3461            "A String",
3462          ],
3463          "selector": "A String", # Selects the methods to which this rule applies.
3464              #
3465              # Refer to selector for syntax details.
3466          "requested": [ # A list of full type names of requested contexts.
3467            "A String",
3468          ],
3469        },
3470      ],
3471    },
3472    "endpoints": [ # Configuration for network endpoints.  If this is empty, then an endpoint
3473        # with the same name as the service is automatically generated to service all
3474        # defined APIs.
3475      { # `Endpoint` describes a network endpoint that serves a set of APIs.
3476          # A service may expose any number of endpoints, and all endpoints share the
3477          # same service configuration, such as quota configuration and monitoring
3478          # configuration.
3479          #
3480          # Example service configuration:
3481          #
3482          #     name: library-example.googleapis.com
3483          #     endpoints:
3484          #       # Below entry makes 'google.example.library.v1.Library'
3485          #       # API be served from endpoint address library-example.googleapis.com.
3486          #       # It also allows HTTP OPTIONS calls to be passed to the backend, for
3487          #       # it to decide whether the subsequent cross-origin request is
3488          #       # allowed to proceed.
3489          #     - name: library-example.googleapis.com
3490          #       allow_cors: true
3491        "target": "A String", # The specification of an Internet routable address of API frontend that will
3492            # handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
3493            # It should be either a valid IPv4 address or a fully-qualified domain name.
3494            # For example, "8.8.8.8" or "myservice.appspot.com".
3495        "apis": [ # The list of APIs served by this endpoint.
3496            #
3497            # If no APIs are specified this translates to "all APIs" exported by the
3498            # service, as defined in the top-level service configuration.
3499          "A String",
3500        ],
3501        "allowCors": True or False, # Allowing
3502            # [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
3503            # cross-domain traffic, would allow the backends served from this endpoint to
3504            # receive and respond to HTTP OPTIONS requests. The response will be used by
3505            # the browser to determine whether the subsequent cross-origin request is
3506            # allowed to proceed.
3507        "name": "A String", # The canonical name of this endpoint.
3508        "features": [ # The list of features enabled on this endpoint.
3509          "A String",
3510        ],
3511        "aliases": [ # DEPRECATED: This field is no longer supported. Instead of using aliases,
3512            # please specify multiple google.api.Endpoint for each of the intented
3513            # alias.
3514            #
3515            # Additional names that this endpoint will be hosted on.
3516          "A String",
3517        ],
3518      },
3519    ],
3520    "experimental": { # Experimental service configuration. These configuration options can # Experimental configuration.
3521        # only be used by whitelisted users.
3522      "authorization": { # Configuration of authorization. # Authorization configuration.
3523          #
3524          # This section determines the authorization provider, if unspecified, then no
3525          # authorization check will be done.
3526          #
3527          # Example:
3528          #
3529          #     experimental:
3530          #       authorization:
3531          #         provider: firebaserules.googleapis.com
3532        "provider": "A String", # The name of the authorization provider, such as
3533            # firebaserules.googleapis.com.
3534      },
3535    },
3536  }</pre>
3537</div>
3538
3539<div class="method">
3540    <code class="details" id="get">get(serviceName, configId, x__xgafv=None, view=None)</code>
3541  <pre>Gets a service configuration (version) for a managed service.
3542
3543Args:
3544  serviceName: string, The name of the service.  See the [overview](/service-management/overview)
3545for naming requirements.  For example: `example.googleapis.com`. (required)
3546  configId: string, The id of the service configuration resource. (required)
3547  x__xgafv: string, V1 error format.
3548    Allowed values
3549      1 - v1 error format
3550      2 - v2 error format
3551  view: string, Specifies which parts of the Service Config should be returned in the
3552response.
3553
3554Returns:
3555  An object of the form:
3556
3557    { # `Service` is the root object of Google service configuration schema. It
3558      # describes basic information about a service, such as the name and the
3559      # title, and delegates other aspects to sub-sections. Each sub-section is
3560      # either a proto message or a repeated proto message that configures a
3561      # specific aspect, such as auth. See each proto message definition for details.
3562      #
3563      # Example:
3564      #
3565      #     type: google.api.Service
3566      #     config_version: 3
3567      #     name: calendar.googleapis.com
3568      #     title: Google Calendar API
3569      #     apis:
3570      #     - name: google.calendar.v3.Calendar
3571      #     authentication:
3572      #       providers:
3573      #       - id: google_calendar_auth
3574      #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
3575      #         issuer: https://securetoken.google.com
3576      #       rules:
3577      #       - selector: "*"
3578      #         requirements:
3579      #           provider_id: google_calendar_auth
3580    "control": { # Selects and configures the service controller used by the service.  The # Configuration for the service control plane.
3581        # service controller handles features like abuse, quota, billing, logging,
3582        # monitoring, etc.
3583      "environment": "A String", # The service control environment to use. If empty, no control plane
3584          # feature (like quota and billing) will be enabled.
3585    },
3586    "monitoredResources": [ # Defines the monitored resources used by this service. This is required
3587        # by the Service.monitoring and Service.logging configurations.
3588      { # An object that describes the schema of a MonitoredResource object using a
3589          # type name and a set of labels.  For example, the monitored resource
3590          # descriptor for Google Compute Engine VM instances has a type of
3591          # `"gce_instance"` and specifies the use of the labels `"instance_id"` and
3592          # `"zone"` to identify particular VM instances.
3593          #
3594          # Different APIs can support different monitored resource types. APIs generally
3595          # provide a `list` method that returns the monitored resource descriptors used
3596          # by the API.
3597        "type": "A String", # Required. The monitored resource type. For example, the type
3598            # `"cloudsql_database"` represents databases in Google Cloud SQL.
3599            # The maximum length of this value is 256 characters.
3600        "labels": [ # Required. A set of labels used to describe instances of this monitored
3601            # resource type. For example, an individual Google Cloud SQL database is
3602            # identified by values for the labels `"database_id"` and `"zone"`.
3603          { # A description of a label.
3604            "valueType": "A String", # The type of data that can be assigned to the label.
3605            "description": "A String", # A human-readable description for the label.
3606            "key": "A String", # The label key.
3607          },
3608        ],
3609        "displayName": "A String", # Optional. A concise name for the monitored resource type that might be
3610            # displayed in user interfaces. It should be a Title Cased Noun Phrase,
3611            # without any article or other determiners. For example,
3612            # `"Google Cloud SQL Database"`.
3613        "name": "A String", # Optional. The resource name of the monitored resource descriptor:
3614            # `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where
3615            # {type} is the value of the `type` field in this object and
3616            # {project_id} is a project ID that provides API-specific context for
3617            # accessing the type.  APIs that do not use project information can use the
3618            # resource name format `"monitoredResourceDescriptors/{type}"`.
3619        "description": "A String", # Optional. A detailed description of the monitored resource type that might
3620            # be used in documentation.
3621      },
3622    ],
3623    "logs": [ # Defines the logs used by this service.
3624      { # A description of a log type. Example in YAML format:
3625          #
3626          #     - name: library.googleapis.com/activity_history
3627          #       description: The history of borrowing and returning library items.
3628          #       display_name: Activity
3629          #       labels:
3630          #       - key: /customer_id
3631          #         description: Identifier of a library customer
3632        "labels": [ # The set of labels that are available to describe a specific log entry.
3633            # Runtime requests that contain labels not specified here are
3634            # considered invalid.
3635          { # A description of a label.
3636            "valueType": "A String", # The type of data that can be assigned to the label.
3637            "description": "A String", # A human-readable description for the label.
3638            "key": "A String", # The label key.
3639          },
3640        ],
3641        "displayName": "A String", # The human-readable name for this log. This information appears on
3642            # the user interface and should be concise.
3643        "name": "A String", # The name of the log. It must be less than 512 characters long and can
3644            # include the following characters: upper- and lower-case alphanumeric
3645            # characters [A-Za-z0-9], and punctuation characters including
3646            # slash, underscore, hyphen, period [/_-.].
3647        "description": "A String", # A human-readable description of this log. This information appears in
3648            # the documentation and can contain details.
3649      },
3650    ],
3651    "systemParameters": { # ### System parameter configuration # System parameter configuration.
3652        #
3653        # A system parameter is a special kind of parameter defined by the API
3654        # system, not by an individual API. It is typically mapped to an HTTP header
3655        # and/or a URL query parameter. This configuration specifies which methods
3656        # change the names of the system parameters.
3657      "rules": [ # Define system parameters.
3658          #
3659          # The parameters defined here will override the default parameters
3660          # implemented by the system. If this field is missing from the service
3661          # config, default system parameters will be used. Default system parameters
3662          # and names is implementation-dependent.
3663          #
3664          # Example: define api key for all methods
3665          #
3666          #     system_parameters
3667          #       rules:
3668          #         - selector: "*"
3669          #           parameters:
3670          #             - name: api_key
3671          #               url_query_parameter: api_key
3672          #
3673          #
3674          # Example: define 2 api key names for a specific method.
3675          #
3676          #     system_parameters
3677          #       rules:
3678          #         - selector: "/ListShelves"
3679          #           parameters:
3680          #             - name: api_key
3681          #               http_header: Api-Key1
3682          #             - name: api_key
3683          #               http_header: Api-Key2
3684          #
3685          # **NOTE:** All service configuration rules follow "last one wins" order.
3686        { # Define a system parameter rule mapping system parameter definitions to
3687            # methods.
3688          "parameters": [ # Define parameters. Multiple names may be defined for a parameter.
3689              # For a given method call, only one of them should be used. If multiple
3690              # names are used the behavior is implementation-dependent.
3691              # If none of the specified names are present the behavior is
3692              # parameter-dependent.
3693            { # Define a parameter's name and location. The parameter may be passed as either
3694                # an HTTP header or a URL query parameter, and if both are passed the behavior
3695                # is implementation-dependent.
3696              "urlQueryParameter": "A String", # Define the URL query parameter name to use for the parameter. It is case
3697                  # sensitive.
3698              "httpHeader": "A String", # Define the HTTP header name to use for the parameter. It is case
3699                  # insensitive.
3700              "name": "A String", # Define the name of the parameter, such as "api_key" . It is case sensitive.
3701            },
3702          ],
3703          "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
3704              # methods in all APIs.
3705              #
3706              # Refer to selector for syntax details.
3707        },
3708      ],
3709    },
3710    "id": "A String", # A unique ID for a specific instance of this message, typically assigned
3711        # by the client for tracking purpose. If empty, the server may choose to
3712        # generate one instead.
3713    "backend": { # `Backend` defines the backend configuration for a service. # API backend configuration.
3714      "rules": [ # A list of API backend rules that apply to individual API methods.
3715          #
3716          # **NOTE:** All service configuration rules follow "last one wins" order.
3717        { # A backend rule provides configuration for an individual API element.
3718          "selector": "A String", # Selects the methods to which this rule applies.
3719              #
3720              # Refer to selector for syntax details.
3721          "minDeadline": 3.14, # Minimum deadline in seconds needed for this method. Calls having deadline
3722              # value lower than this will be rejected.
3723          "deadline": 3.14, # The number of seconds to wait for a response from a request.  The
3724              # default depends on the deployment context.
3725          "address": "A String", # The address of the API backend.
3726        },
3727      ],
3728    },
3729    "monitoring": { # Monitoring configuration of the service. # Monitoring configuration.
3730        #
3731        # The example below shows how to configure monitored resources and metrics
3732        # for monitoring. In the example, a monitored resource and two metrics are
3733        # defined. The `library.googleapis.com/book/returned_count` metric is sent
3734        # to both producer and consumer projects, whereas the
3735        # `library.googleapis.com/book/overdue_count` metric is only sent to the
3736        # consumer project.
3737        #
3738        #     monitored_resources:
3739        #     - type: library.googleapis.com/branch
3740        #       labels:
3741        #       - key: /city
3742        #         description: The city where the library branch is located in.
3743        #       - key: /name
3744        #         description: The name of the branch.
3745        #     metrics:
3746        #     - name: library.googleapis.com/book/returned_count
3747        #       metric_kind: DELTA
3748        #       value_type: INT64
3749        #       labels:
3750        #       - key: /customer_id
3751        #     - name: library.googleapis.com/book/overdue_count
3752        #       metric_kind: GAUGE
3753        #       value_type: INT64
3754        #       labels:
3755        #       - key: /customer_id
3756        #     monitoring:
3757        #       producer_destinations:
3758        #       - monitored_resource: library.googleapis.com/branch
3759        #         metrics:
3760        #         - library.googleapis.com/book/returned_count
3761        #       consumer_destinations:
3762        #       - monitored_resource: library.googleapis.com/branch
3763        #         metrics:
3764        #         - library.googleapis.com/book/returned_count
3765        #         - library.googleapis.com/book/overdue_count
3766      "producerDestinations": [ # Monitoring configurations for sending metrics to the producer project.
3767          # There can be multiple producer destinations, each one must have a
3768          # different monitored resource type. A metric can be used in at most
3769          # one producer destination.
3770        { # Configuration of a specific monitoring destination (the producer project
3771            # or the consumer project).
3772          "monitoredResource": "A String", # The monitored resource type. The type must be defined in
3773              # Service.monitored_resources section.
3774          "metrics": [ # Names of the metrics to report to this monitoring destination.
3775              # Each name must be defined in Service.metrics section.
3776            "A String",
3777          ],
3778        },
3779      ],
3780      "consumerDestinations": [ # Monitoring configurations for sending metrics to the consumer project.
3781          # There can be multiple consumer destinations, each one must have a
3782          # different monitored resource type. A metric can be used in at most
3783          # one consumer destination.
3784        { # Configuration of a specific monitoring destination (the producer project
3785            # or the consumer project).
3786          "monitoredResource": "A String", # The monitored resource type. The type must be defined in
3787              # Service.monitored_resources section.
3788          "metrics": [ # Names of the metrics to report to this monitoring destination.
3789              # Each name must be defined in Service.metrics section.
3790            "A String",
3791          ],
3792        },
3793      ],
3794    },
3795    "title": "A String", # The product title associated with this service.
3796    "authentication": { # `Authentication` defines the authentication configuration for an API. # Auth configuration.
3797        #
3798        # Example for an API targeted for external use:
3799        #
3800        #     name: calendar.googleapis.com
3801        #     authentication:
3802        #       providers:
3803        #       - id: google_calendar_auth
3804        #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
3805        #         issuer: https://securetoken.google.com
3806        #       rules:
3807        #       - selector: "*"
3808        #         requirements:
3809        #           provider_id: google_calendar_auth
3810      "rules": [ # A list of authentication rules that apply to individual API methods.
3811          #
3812          # **NOTE:** All service configuration rules follow "last one wins" order.
3813        { # Authentication rules for the service.
3814            #
3815            # By default, if a method has any authentication requirements, every request
3816            # must include a valid credential matching one of the requirements.
3817            # It's an error to include more than one kind of credential in a single
3818            # request.
3819            #
3820            # If a method doesn't have any auth requirements, request credentials will be
3821            # ignored.
3822          "oauth": { # OAuth scopes are a way to define data and permissions on data. For example, # The requirements for OAuth credentials.
3823              # there are scopes defined for "Read-only access to Google Calendar" and
3824              # "Access to Cloud Platform". Users can consent to a scope for an application,
3825              # giving it permission to access that data on their behalf.
3826              #
3827              # OAuth scope specifications should be fairly coarse grained; a user will need
3828              # to see and understand the text description of what your scope means.
3829              #
3830              # In most cases: use one or at most two OAuth scopes for an entire family of
3831              # products. If your product has multiple APIs, you should probably be sharing
3832              # the OAuth scope across all of those APIs.
3833              #
3834              # When you need finer grained OAuth consent screens: talk with your product
3835              # management about how developers will use them in practice.
3836              #
3837              # Please note that even though each of the canonical scopes is enough for a
3838              # request to be accepted and passed to the backend, a request can still fail
3839              # due to the backend requiring additional scopes or permissions.
3840            "canonicalScopes": "A String", # The list of publicly documented OAuth scopes that are allowed access. An
3841                # OAuth token containing any of these scopes will be accepted.
3842                #
3843                # Example:
3844                #
3845                #      canonical_scopes: https://www.googleapis.com/auth/calendar,
3846                #                        https://www.googleapis.com/auth/calendar.read
3847          },
3848          "requirements": [ # Requirements for additional authentication providers.
3849            { # User-defined authentication requirements, including support for
3850                # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
3851              "providerId": "A String", # id from authentication provider.
3852                  #
3853                  # Example:
3854                  #
3855                  #     provider_id: bookstore_auth
3856              "audiences": "A String", # NOTE: This will be deprecated soon, once AuthProvider.audiences is
3857                  # implemented and accepted in all the runtime components.
3858                  #
3859                  # The list of JWT
3860                  # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
3861                  # that are allowed to access. A JWT containing any of these audiences will
3862                  # be accepted. When this setting is absent, only JWTs with audience
3863                  # "https://Service_name/API_name"
3864                  # will be accepted. For example, if no audiences are in the setting,
3865                  # LibraryService API will only accept JWTs with the following audience
3866                  # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
3867                  #
3868                  # Example:
3869                  #
3870                  #     audiences: bookstore_android.apps.googleusercontent.com,
3871                  #                bookstore_web.apps.googleusercontent.com
3872            },
3873          ],
3874          "allowWithoutCredential": True or False, # Whether to allow requests without a credential. The credential can be
3875              # an OAuth token, Google cookies (first-party auth) or EndUserCreds.
3876              #
3877              # For requests without credentials, if the service control environment is
3878              # specified, each incoming request **must** be associated with a service
3879              # consumer. This can be done by passing an API key that belongs to a consumer
3880              # project.
3881          "customAuth": { # Configuration for a custom authentication provider. # Configuration for custom authentication.
3882            "provider": "A String", # A configuration string containing connection information for the
3883                # authentication provider, typically formatted as a SmartService string
3884                # (go/smartservice).
3885          },
3886          "selector": "A String", # Selects the methods to which this rule applies.
3887              #
3888              # Refer to selector for syntax details.
3889        },
3890      ],
3891      "providers": [ # Defines a set of authentication providers that a service supports.
3892        { # Configuration for an anthentication provider, including support for
3893            # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
3894          "audiences": "A String", # The list of JWT
3895              # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
3896              # that are allowed to access. A JWT containing any of these audiences will
3897              # be accepted. When this setting is absent, only JWTs with audience
3898              # "https://Service_name/API_name"
3899              # will be accepted. For example, if no audiences are in the setting,
3900              # LibraryService API will only accept JWTs with the following audience
3901              # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
3902              #
3903              # Example:
3904              #
3905              #     audiences: bookstore_android.apps.googleusercontent.com,
3906              #                bookstore_web.apps.googleusercontent.com
3907          "jwksUri": "A String", # URL of the provider's public key set to validate signature of the JWT. See
3908              # [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
3909              # Optional if the key set document:
3910              #  - can be retrieved from
3911              #    [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html
3912              #    of the issuer.
3913              #  - can be inferred from the email domain of the issuer (e.g. a Google service account).
3914              #
3915              # Example: https://www.googleapis.com/oauth2/v1/certs
3916          "id": "A String", # The unique identifier of the auth provider. It will be referred to by
3917              # `AuthRequirement.provider_id`.
3918              #
3919              # Example: "bookstore_auth".
3920          "issuer": "A String", # Identifies the principal that issued the JWT. See
3921              # https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1
3922              # Usually a URL or an email address.
3923              #
3924              # Example: https://securetoken.google.com
3925              # Example: 1234567-compute@developer.gserviceaccount.com
3926        },
3927      ],
3928    },
3929    "usage": { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
3930      "rules": [ # A list of usage rules that apply to individual API methods.
3931          #
3932          # **NOTE:** All service configuration rules follow "last one wins" order.
3933        { # Usage configuration rules for the service.
3934            #
3935            # NOTE: Under development.
3936            #
3937            #
3938            # Use this rule to configure unregistered calls for the service. Unregistered
3939            # calls are calls that do not contain consumer project identity.
3940            # (Example: calls that do not contain an API key).
3941            # By default, API methods do not allow unregistered calls, and each method call
3942            # must be identified by a consumer project identity. Use this rule to
3943            # allow/disallow unregistered calls.
3944            #
3945            # Example of an API that wants to allow unregistered calls for entire service.
3946            #
3947            #     usage:
3948            #       rules:
3949            #       - selector: "*"
3950            #         allow_unregistered_calls: true
3951            #
3952            # Example of a method that wants to allow unregistered calls.
3953            #
3954            #     usage:
3955            #       rules:
3956            #       - selector: "google.example.library.v1.LibraryService.CreateBook"
3957            #         allow_unregistered_calls: true
3958          "allowUnregisteredCalls": True or False, # True, if the method allows unregistered calls; false otherwise.
3959          "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
3960              # methods in all APIs.
3961              #
3962              # Refer to selector for syntax details.
3963        },
3964      ],
3965      "producerNotificationChannel": "A String", # The full resource name of a channel used for sending notifications to the
3966          # service producer.
3967          #
3968          # Google Service Management currently only supports
3969          # [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
3970          # channel. To use Google Cloud Pub/Sub as the channel, this must be the name
3971          # of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
3972          # documented in https://cloud.google.com/pubsub/docs/overview.
3973      "requirements": [ # Requirements that must be satisfied before a consumer project can use the
3974          # service. Each requirement is of the form <service.name>/<requirement-id>;
3975          # for example 'serviceusage.googleapis.com/billing-enabled'.
3976        "A String",
3977      ],
3978    },
3979    "configVersion": 42, # The version of the service configuration. The config version may
3980        # influence interpretation of the configuration, for example, to
3981        # determine defaults. This is documented together with applicable
3982        # options. The current default for the config version itself is `3`.
3983    "producerProjectId": "A String", # The id of the Google developer project that owns the service.
3984        # Members of this project can manage the service configuration,
3985        # manage consumption of the service, etc.
3986    "http": { # Defines the HTTP configuration for a service. It contains a list of # HTTP configuration.
3987        # HttpRule, each specifying the mapping of an RPC method
3988        # to one or more HTTP REST API methods.
3989      "rules": [ # A list of HTTP configuration rules that apply to individual API methods.
3990          #
3991          # **NOTE:** All service configuration rules follow "last one wins" order.
3992        { # `HttpRule` defines the mapping of an RPC method to one or more HTTP
3993            # REST APIs.  The mapping determines what portions of the request
3994            # message are populated from the path, query parameters, or body of
3995            # the HTTP request.  The mapping is typically specified as an
3996            # `google.api.http` annotation, see "google/api/annotations.proto"
3997            # for details.
3998            #
3999            # The mapping consists of a field specifying the path template and
4000            # method kind.  The path template can refer to fields in the request
4001            # message, as in the example below which describes a REST GET
4002            # operation on a resource collection of messages:
4003            #
4004            #
4005            #     service Messaging {
4006            #       rpc GetMessage(GetMessageRequest) returns (Message) {
4007            #         option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}";
4008            #       }
4009            #     }
4010            #     message GetMessageRequest {
4011            #       message SubMessage {
4012            #         string subfield = 1;
4013            #       }
4014            #       string message_id = 1; // mapped to the URL
4015            #       SubMessage sub = 2;    // `sub.subfield` is url-mapped
4016            #     }
4017            #     message Message {
4018            #       string text = 1; // content of the resource
4019            #     }
4020            #
4021            # The same http annotation can alternatively be expressed inside the
4022            # `GRPC API Configuration` YAML file.
4023            #
4024            #     http:
4025            #       rules:
4026            #         - selector: <proto_package_name>.Messaging.GetMessage
4027            #           get: /v1/messages/{message_id}/{sub.subfield}
4028            #
4029            # This definition enables an automatic, bidrectional mapping of HTTP
4030            # JSON to RPC. Example:
4031            #
4032            # HTTP | RPC
4033            # -----|-----
4034            # `GET /v1/messages/123456/foo`  | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))`
4035            #
4036            # In general, not only fields but also field paths can be referenced
4037            # from a path pattern. Fields mapped to the path pattern cannot be
4038            # repeated and must have a primitive (non-message) type.
4039            #
4040            # Any fields in the request message which are not bound by the path
4041            # pattern automatically become (optional) HTTP query
4042            # parameters. Assume the following definition of the request message:
4043            #
4044            #
4045            #     service Messaging {
4046            #       rpc GetMessage(GetMessageRequest) returns (Message) {
4047            #         option (google.api.http).get = "/v1/messages/{message_id}";
4048            #       }
4049            #     }
4050            #     message GetMessageRequest {
4051            #       message SubMessage {
4052            #         string subfield = 1;
4053            #       }
4054            #       string message_id = 1; // mapped to the URL
4055            #       int64 revision = 2;    // becomes a parameter
4056            #       SubMessage sub = 3;    // `sub.subfield` becomes a parameter
4057            #     }
4058            #
4059            #
4060            # This enables a HTTP JSON to RPC mapping as below:
4061            #
4062            # HTTP | RPC
4063            # -----|-----
4064            # `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))`
4065            #
4066            # Note that fields which are mapped to HTTP parameters must have a
4067            # primitive type or a repeated primitive type. Message types are not
4068            # allowed. In the case of a repeated type, the parameter can be
4069            # repeated in the URL, as in `...?param=A&param=B`.
4070            #
4071            # For HTTP method kinds which allow a request body, the `body` field
4072            # specifies the mapping. Consider a REST update method on the
4073            # message resource collection:
4074            #
4075            #
4076            #     service Messaging {
4077            #       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {
4078            #         option (google.api.http) = {
4079            #           put: "/v1/messages/{message_id}"
4080            #           body: "message"
4081            #         };
4082            #       }
4083            #     }
4084            #     message UpdateMessageRequest {
4085            #       string message_id = 1; // mapped to the URL
4086            #       Message message = 2;   // mapped to the body
4087            #     }
4088            #
4089            #
4090            # The following HTTP JSON to RPC mapping is enabled, where the
4091            # representation of the JSON in the request body is determined by
4092            # protos JSON encoding:
4093            #
4094            # HTTP | RPC
4095            # -----|-----
4096            # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })`
4097            #
4098            # The special name `*` can be used in the body mapping to define that
4099            # every field not bound by the path template should be mapped to the
4100            # request body.  This enables the following alternative definition of
4101            # the update method:
4102            #
4103            #     service Messaging {
4104            #       rpc UpdateMessage(Message) returns (Message) {
4105            #         option (google.api.http) = {
4106            #           put: "/v1/messages/{message_id}"
4107            #           body: "*"
4108            #         };
4109            #       }
4110            #     }
4111            #     message Message {
4112            #       string message_id = 1;
4113            #       string text = 2;
4114            #     }
4115            #
4116            #
4117            # The following HTTP JSON to RPC mapping is enabled:
4118            #
4119            # HTTP | RPC
4120            # -----|-----
4121            # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")`
4122            #
4123            # Note that when using `*` in the body mapping, it is not possible to
4124            # have HTTP parameters, as all fields not bound by the path end in
4125            # the body. This makes this option more rarely used in practice of
4126            # defining REST APIs. The common usage of `*` is in custom methods
4127            # which don't use the URL at all for transferring data.
4128            #
4129            # It is possible to define multiple HTTP methods for one RPC by using
4130            # the `additional_bindings` option. Example:
4131            #
4132            #     service Messaging {
4133            #       rpc GetMessage(GetMessageRequest) returns (Message) {
4134            #         option (google.api.http) = {
4135            #           get: "/v1/messages/{message_id}"
4136            #           additional_bindings {
4137            #             get: "/v1/users/{user_id}/messages/{message_id}"
4138            #           }
4139            #         };
4140            #       }
4141            #     }
4142            #     message GetMessageRequest {
4143            #       string message_id = 1;
4144            #       string user_id = 2;
4145            #     }
4146            #
4147            #
4148            # This enables the following two alternative HTTP JSON to RPC
4149            # mappings:
4150            #
4151            # HTTP | RPC
4152            # -----|-----
4153            # `GET /v1/messages/123456` | `GetMessage(message_id: "123456")`
4154            # `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")`
4155            #
4156            # # Rules for HTTP mapping
4157            #
4158            # The rules for mapping HTTP path, query parameters, and body fields
4159            # to the request message are as follows:
4160            #
4161            # 1. The `body` field specifies either `*` or a field path, or is
4162            #    omitted. If omitted, it assumes there is no HTTP body.
4163            # 2. Leaf fields (recursive expansion of nested messages in the
4164            #    request) can be classified into three types:
4165            #     (a) Matched in the URL template.
4166            #     (b) Covered by body (if body is `*`, everything except (a) fields;
4167            #         else everything under the body field)
4168            #     (c) All other fields.
4169            # 3. URL query parameters found in the HTTP request are mapped to (c) fields.
4170            # 4. Any body sent with an HTTP request can contain only (b) fields.
4171            #
4172            # The syntax of the path template is as follows:
4173            #
4174            #     Template = "/" Segments [ Verb ] ;
4175            #     Segments = Segment { "/" Segment } ;
4176            #     Segment  = "*" | "**" | LITERAL | Variable ;
4177            #     Variable = "{" FieldPath [ "=" Segments ] "}" ;
4178            #     FieldPath = IDENT { "." IDENT } ;
4179            #     Verb     = ":" LITERAL ;
4180            #
4181            # The syntax `*` matches a single path segment. It follows the semantics of
4182            # [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String
4183            # Expansion.
4184            #
4185            # The syntax `**` matches zero or more path segments. It follows the semantics
4186            # of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved
4187            # Expansion. NOTE: it must be the last segment in the path except the Verb.
4188            #
4189            # The syntax `LITERAL` matches literal text in the URL path.
4190            #
4191            # The syntax `Variable` matches the entire path as specified by its template;
4192            # this nested template must not contain further variables. If a variable
4193            # matches a single path segment, its template may be omitted, e.g. `{var}`
4194            # is equivalent to `{var=*}`.
4195            #
4196            # NOTE: the field paths in variables and in the `body` must not refer to
4197            # repeated fields or map fields.
4198            #
4199            # Use CustomHttpPattern to specify any HTTP method that is not included in the
4200            # `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified for
4201            # a given URL path rule. The wild-card rule is useful for services that provide
4202            # content to Web (HTML) clients.
4203          "body": "A String", # The name of the request field whose value is mapped to the HTTP body, or
4204              # `*` for mapping all fields not captured by the path pattern to the HTTP
4205              # body. NOTE: the referred field must not be a repeated field and must be
4206              # present at the top-level of request message type.
4207          "get": "A String", # Used for listing and getting information about resources.
4208          "restCollection": "A String", # Optional. The REST collection name is by default derived from the URL
4209              # pattern. If specified, this field overrides the default collection name.
4210              # Example:
4211              #
4212              #     rpc AddressesAggregatedList(AddressesAggregatedListRequest)
4213              #         returns (AddressesAggregatedListResponse) {
4214              #       option (google.api.http) = {
4215              #         get: "/v1/projects/{project_id}/aggregated/addresses"
4216              #         rest_collection: "projects.addresses"
4217              #       };
4218              #     }
4219              #
4220              # This method has the automatically derived collection name
4221              # "projects.aggregated". Because, semantically, this rpc is actually an
4222              # operation on the "projects.addresses" collection, the `rest_collection`
4223              # field is configured to override the derived collection name.
4224          "additionalBindings": [ # Additional HTTP bindings for the selector. Nested bindings must
4225              # not contain an `additional_bindings` field themselves (that is,
4226              # the nesting may only be one level deep).
4227            # Object with schema name: HttpRule
4228          ],
4229          "mediaUpload": { # Defines the Media configuration for a service in case of an upload. # Use this only for Scotty Requests. Do not use this for media support using
4230              # Bytestream, add instead
4231              # [][google.bytestream.RestByteStream] as an API to your
4232              # configuration for Bytestream methods.
4233              # Use this only for Scotty Requests. Do not use this for media support using
4234              # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
4235              # your configuration for Bytestream methods.
4236            "progressNotification": True or False, # Whether to receive a notification for progress changes of media upload.
4237            "startNotification": True or False, # Whether to receive a notification on the start of media upload.
4238            "mimeTypes": [ # An array of mimetype patterns. Esf will only accept uploads that match one
4239                # of the given patterns.
4240              "A String",
4241            ],
4242            "completeNotification": True or False, # A boolean that determines whether a notification for the completion of an
4243                # upload should be sent to the backend. These notifications will not be seen
4244                # by the client and will not consume quota.
4245            "enabled": True or False, # Whether upload is enabled.
4246            "uploadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
4247                #
4248                # Specify name of the upload service if one is used for upload.
4249            "maxSize": "A String", # Optional maximum acceptable size for an upload.
4250                # The size is specified in bytes.
4251            "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
4252          },
4253          "selector": "A String", # Selects methods to which this rule applies.
4254              #
4255              # Refer to selector for syntax details.
4256          "responseBody": "A String", # The name of the response field whose value is mapped to the HTTP body of
4257              # response. Other response fields are ignored. This field is optional. When
4258              # not set, the response message will be used as HTTP body of response.
4259              # NOTE: the referred field must be not a repeated field and must be present
4260              # at the top-level of response message type.
4261          "restMethodName": "A String", # Optional. The rest method name is by default derived from the URL
4262              # pattern. If specified, this field overrides the default method name.
4263              # Example:
4264              #
4265              #     rpc CreateResource(CreateResourceRequest)
4266              #         returns (CreateResourceResponse) {
4267              #       option (google.api.http) = {
4268              #         post: "/v1/resources",
4269              #         body: "resource",
4270              #         rest_method_name: "insert"
4271              #       };
4272              #     }
4273              #
4274              # This method has the automatically derived rest method name "create", but
4275              #  for backwards compatability with apiary, it is specified as insert.
4276          "mediaDownload": { # Defines the Media configuration for a service in case of a download. # Use this only for Scotty Requests. Do not use this for bytestream methods.
4277              # For media support, add instead [][google.bytestream.RestByteStream] as an
4278              # API to your configuration.
4279              # Use this only for Scotty Requests. Do not use this for media support using
4280              # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
4281              # your configuration for Bytestream methods.
4282            "useDirectDownload": True or False, # A boolean that determines if direct download from ESF should be used for
4283                # download of this media.
4284            "enabled": True or False, # Whether download is enabled.
4285            "completeNotification": True or False, # A boolean that determines whether a notification for the completion of a
4286                # download should be sent to the backend.
4287            "maxDirectDownloadSize": "A String", # Optional maximum acceptable size for direct download.
4288                # The size is specified in bytes.
4289            "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
4290            "downloadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
4291                #
4292                # Specify name of the download service if one is used for download.
4293          },
4294          "put": "A String", # Used for updating a resource.
4295          "patch": "A String", # Used for updating a resource.
4296          "post": "A String", # Used for creating a resource.
4297          "custom": { # A custom pattern is used for defining custom HTTP verb. # Custom pattern is used for defining custom verbs.
4298            "path": "A String", # The path matched by this custom verb.
4299            "kind": "A String", # The name of this custom HTTP verb.
4300          },
4301          "delete": "A String", # Used for deleting a resource.
4302        },
4303      ],
4304      "fullyDecodeReservedExpansion": True or False, # When set to true, URL path parmeters will be fully URI-decoded except in
4305          # cases of single segment matches in reserved expansion, where "%2F" will be
4306          # left encoded.
4307          #
4308          # The default behavior is to not decode RFC 6570 reserved characters in multi
4309          # segment matches.
4310    },
4311    "apis": [ # A list of API interfaces exported by this service. Only the `name` field
4312        # of the google.protobuf.Api needs to be provided by the configuration
4313        # author, as the remaining fields will be derived from the IDL during the
4314        # normalization process. It is an error to specify an API interface here
4315        # which cannot be resolved against the associated IDL files.
4316      { # Api is a light-weight descriptor for a protocol buffer service.
4317        "name": "A String", # The fully qualified name of this api, including package name
4318            # followed by the api's simple name.
4319        "sourceContext": { # `SourceContext` represents information about the source of a # Source context for the protocol buffer service represented by this
4320            # message.
4321            # protobuf element, like the file in which it is defined.
4322          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
4323              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
4324        },
4325        "mixins": [ # Included APIs. See Mixin.
4326          { # Declares an API to be included in this API. The including API must
4327              # redeclare all the methods from the included API, but documentation
4328              # and options are inherited as follows:
4329              #
4330              # - If after comment and whitespace stripping, the documentation
4331              #   string of the redeclared method is empty, it will be inherited
4332              #   from the original method.
4333              #
4334              # - Each annotation belonging to the service config (http,
4335              #   visibility) which is not set in the redeclared method will be
4336              #   inherited.
4337              #
4338              # - If an http annotation is inherited, the path pattern will be
4339              #   modified as follows. Any version prefix will be replaced by the
4340              #   version of the including API plus the root path if specified.
4341              #
4342              # Example of a simple mixin:
4343              #
4344              #     package google.acl.v1;
4345              #     service AccessControl {
4346              #       // Get the underlying ACL object.
4347              #       rpc GetAcl(GetAclRequest) returns (Acl) {
4348              #         option (google.api.http).get = "/v1/{resource=**}:getAcl";
4349              #       }
4350              #     }
4351              #
4352              #     package google.storage.v2;
4353              #     service Storage {
4354              #       //       rpc GetAcl(GetAclRequest) returns (Acl);
4355              #
4356              #       // Get a data record.
4357              #       rpc GetData(GetDataRequest) returns (Data) {
4358              #         option (google.api.http).get = "/v2/{resource=**}";
4359              #       }
4360              #     }
4361              #
4362              # Example of a mixin configuration:
4363              #
4364              #     apis:
4365              #     - name: google.storage.v2.Storage
4366              #       mixins:
4367              #       - name: google.acl.v1.AccessControl
4368              #
4369              # The mixin construct implies that all methods in `AccessControl` are
4370              # also declared with same name and request/response types in
4371              # `Storage`. A documentation generator or annotation processor will
4372              # see the effective `Storage.GetAcl` method after inherting
4373              # documentation and annotations as follows:
4374              #
4375              #     service Storage {
4376              #       // Get the underlying ACL object.
4377              #       rpc GetAcl(GetAclRequest) returns (Acl) {
4378              #         option (google.api.http).get = "/v2/{resource=**}:getAcl";
4379              #       }
4380              #       ...
4381              #     }
4382              #
4383              # Note how the version in the path pattern changed from `v1` to `v2`.
4384              #
4385              # If the `root` field in the mixin is specified, it should be a
4386              # relative path under which inherited HTTP paths are placed. Example:
4387              #
4388              #     apis:
4389              #     - name: google.storage.v2.Storage
4390              #       mixins:
4391              #       - name: google.acl.v1.AccessControl
4392              #         root: acls
4393              #
4394              # This implies the following inherited HTTP annotation:
4395              #
4396              #     service Storage {
4397              #       // Get the underlying ACL object.
4398              #       rpc GetAcl(GetAclRequest) returns (Acl) {
4399              #         option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
4400              #       }
4401              #       ...
4402              #     }
4403            "root": "A String", # If non-empty specifies a path under which inherited HTTP paths
4404                # are rooted.
4405            "name": "A String", # The fully qualified name of the API which is included.
4406          },
4407        ],
4408        "syntax": "A String", # The source syntax of the service.
4409        "version": "A String", # A version string for this api. If specified, must have the form
4410            # `major-version.minor-version`, as in `1.10`. If the minor version
4411            # is omitted, it defaults to zero. If the entire version field is
4412            # empty, the major version is derived from the package name, as
4413            # outlined below. If the field is not empty, the version in the
4414            # package name will be verified to be consistent with what is
4415            # provided here.
4416            #
4417            # The versioning schema uses [semantic
4418            # versioning](http://semver.org) where the major version number
4419            # indicates a breaking change and the minor version an additive,
4420            # non-breaking change. Both version numbers are signals to users
4421            # what to expect from different versions, and should be carefully
4422            # chosen based on the product plan.
4423            #
4424            # The major version is also reflected in the package name of the
4425            # API, which must end in `v<major-version>`, as in
4426            # `google.feature.v1`. For major versions 0 and 1, the suffix can
4427            # be omitted. Zero major versions must only be used for
4428            # experimental, none-GA apis.
4429        "options": [ # Any metadata attached to the API.
4430          { # A protocol buffer option, which can be attached to a message, field,
4431              # enumeration, etc.
4432            "name": "A String", # The option's name. For protobuf built-in options (options defined in
4433                # descriptor.proto), this is the short name. For example, `"map_entry"`.
4434                # For custom options, it should be the fully-qualified name. For example,
4435                # `"google.api.http"`.
4436            "value": { # The option's value packed in an Any message. If the value is a primitive,
4437                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
4438                # should be used. If the value is an enum, it should be stored as an int32
4439                # value using the google.protobuf.Int32Value type.
4440              "a_key": "", # Properties of the object. Contains field @type with type URL.
4441            },
4442          },
4443        ],
4444        "methods": [ # The methods of this api, in unspecified order.
4445          { # Method represents a method of an api.
4446            "name": "A String", # The simple name of this method.
4447            "requestStreaming": True or False, # If true, the request is streamed.
4448            "responseTypeUrl": "A String", # The URL of the output message type.
4449            "requestTypeUrl": "A String", # A URL of the input message type.
4450            "responseStreaming": True or False, # If true, the response is streamed.
4451            "syntax": "A String", # The source syntax of this method.
4452            "options": [ # Any metadata attached to the method.
4453              { # A protocol buffer option, which can be attached to a message, field,
4454                  # enumeration, etc.
4455                "name": "A String", # The option's name. For protobuf built-in options (options defined in
4456                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
4457                    # For custom options, it should be the fully-qualified name. For example,
4458                    # `"google.api.http"`.
4459                "value": { # The option's value packed in an Any message. If the value is a primitive,
4460                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
4461                    # should be used. If the value is an enum, it should be stored as an int32
4462                    # value using the google.protobuf.Int32Value type.
4463                  "a_key": "", # Properties of the object. Contains field @type with type URL.
4464                },
4465              },
4466            ],
4467          },
4468        ],
4469      },
4470    ],
4471    "customError": { # Customize service error responses.  For example, list any service # Custom error configuration.
4472        # specific protobuf types that can appear in error detail lists of
4473        # error responses.
4474        #
4475        # Example:
4476        #
4477        #     custom_error:
4478        #       types:
4479        #       - google.foo.v1.CustomError
4480        #       - google.foo.v1.AnotherError
4481      "rules": [ # The list of custom error rules that apply to individual API messages.
4482          #
4483          # **NOTE:** All service configuration rules follow "last one wins" order.
4484        { # A custom error rule.
4485          "isErrorType": True or False, # Mark this message as possible payload in error response.  Otherwise,
4486              # objects of this type will be filtered when they appear in error payload.
4487          "selector": "A String", # Selects messages to which this rule applies.
4488              #
4489              # Refer to selector for syntax details.
4490        },
4491      ],
4492      "types": [ # The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.
4493        "A String",
4494      ],
4495    },
4496    "quota": { # Quota configuration helps to achieve fairness and budgeting in service # Quota configuration.
4497        # usage.
4498        #
4499        # The quota configuration works this way:
4500        # - The service configuration defines a set of metrics.
4501        # - For API calls, the quota.metric_rules maps methods to metrics with
4502        #   corresponding costs.
4503        # - The quota.limits defines limits on the metrics, which will be used for
4504        #   quota checks at runtime.
4505        #
4506        # An example quota configuration in yaml format:
4507        #
4508        #    quota:
4509        #
4510        #      - name: apiWriteQpsPerProject
4511        #        metric: library.googleapis.com/write_calls
4512        #        unit: "1/min/{project}"  # rate limit for consumer projects
4513        #        values:
4514        #          STANDARD: 10000
4515        #
4516        #
4517        #      # The metric rules bind all methods to the read_calls metric,
4518        #      # except for the UpdateBook and DeleteBook methods. These two methods
4519        #      # are mapped to the write_calls metric, with the UpdateBook method
4520        #      # consuming at twice rate as the DeleteBook method.
4521        #      metric_rules:
4522        #      - selector: "*"
4523        #        metric_costs:
4524        #          library.googleapis.com/read_calls: 1
4525        #      - selector: google.example.library.v1.LibraryService.UpdateBook
4526        #        metric_costs:
4527        #          library.googleapis.com/write_calls: 2
4528        #      - selector: google.example.library.v1.LibraryService.DeleteBook
4529        #        metric_costs:
4530        #          library.googleapis.com/write_calls: 1
4531        #
4532        #  Corresponding Metric definition:
4533        #
4534        #      metrics:
4535        #      - name: library.googleapis.com/read_calls
4536        #        display_name: Read requests
4537        #        metric_kind: DELTA
4538        #        value_type: INT64
4539        #
4540        #      - name: library.googleapis.com/write_calls
4541        #        display_name: Write requests
4542        #        metric_kind: DELTA
4543        #        value_type: INT64
4544      "metricRules": [ # List of `MetricRule` definitions, each one mapping a selected method to one
4545          # or more metrics.
4546        { # Bind API methods to metrics. Binding a method to a metric causes that
4547            # metric's configured quota behaviors to apply to the method call.
4548          "metricCosts": { # Metrics to update when the selected methods are called, and the associated
4549              # cost applied to each metric.
4550              #
4551              # The key of the map is the metric name, and the values are the amount
4552              # increased for the metric against which the quota limits are defined.
4553              # The value must not be negative.
4554            "a_key": "A String",
4555          },
4556          "selector": "A String", # Selects the methods to which this rule applies.
4557              #
4558              # Refer to selector for syntax details.
4559        },
4560      ],
4561      "limits": [ # List of `QuotaLimit` definitions for the service.
4562        { # `QuotaLimit` defines a specific limit that applies over a specified duration
4563            # for a limit type. There can be at most one limit for a duration and limit
4564            # type combination defined within a `QuotaGroup`.
4565          "displayName": "A String", # User-visible display name for this limit.
4566              # Optional. If not set, the UI will provide a default display name based on
4567              # the quota configuration. This field can be used to override the default
4568              # display name generated from the configuration.
4569          "description": "A String", # Optional. User-visible, extended description for this quota limit.
4570              # Should be used only when more context is needed to understand this limit
4571              # than provided by the limit's display name (see: `display_name`).
4572          "defaultLimit": "A String", # Default number of tokens that can be consumed during the specified
4573              # duration. This is the number of tokens assigned when a client
4574              # application developer activates the service for his/her project.
4575              #
4576              # Specifying a value of 0 will block all requests. This can be used if you
4577              # are provisioning quota to selected consumers and blocking others.
4578              # Similarly, a value of -1 will indicate an unlimited quota. No other
4579              # negative values are allowed.
4580              #
4581              # Used by group-based quotas only.
4582          "metric": "A String", # The name of the metric this quota limit applies to. The quota limits with
4583              # the same metric will be checked together during runtime. The metric must be
4584              # defined within the service config.
4585              #
4586              # Used by metric-based quotas only.
4587          "values": { # Tiered limit values, currently only STANDARD is supported.
4588            "a_key": "A String",
4589          },
4590          "maxLimit": "A String", # Maximum number of tokens that can be consumed during the specified
4591              # duration. Client application developers can override the default limit up
4592              # to this maximum. If specified, this value cannot be set to a value less
4593              # than the default limit. If not specified, it is set to the default limit.
4594              #
4595              # To allow clients to apply overrides with no upper bound, set this to -1,
4596              # indicating unlimited maximum quota.
4597              #
4598              # Used by group-based quotas only.
4599          "duration": "A String", # Duration of this limit in textual notation. Example: "100s", "24h", "1d".
4600              # For duration longer than a day, only multiple of days is supported. We
4601              # support only "100s" and "1d" for now. Additional support will be added in
4602              # the future. "0" indicates indefinite duration.
4603              #
4604              # Used by group-based quotas only.
4605          "freeTier": "A String", # Free tier value displayed in the Developers Console for this limit.
4606              # The free tier is the number of tokens that will be subtracted from the
4607              # billed amount when billing is enabled.
4608              # This field can only be set on a limit with duration "1d", in a billable
4609              # group; it is invalid on any other limit. If this field is not set, it
4610              # defaults to 0, indicating that there is no free tier for this service.
4611              #
4612              # Used by group-based quotas only.
4613          "unit": "A String", # Specify the unit of the quota limit. It uses the same syntax as
4614              # Metric.unit. The supported unit kinds are determined by the quota
4615              # backend system.
4616              #
4617              # The [Google Service Control](https://cloud.google.com/service-control)
4618              # supports the following unit components:
4619              # * One of the time intevals:
4620              #   * "/min"  for quota every minute.
4621              #   * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
4622              #   * Otherwise the quota won't be reset by time, such as storage limit.
4623              # * One and only one of the granted containers:
4624              #   * "/{project}" quota for a project
4625              #
4626              # Here are some examples:
4627              # * "1/min/{project}" for quota per minute per project.
4628              #
4629              # Note: the order of unit components is insignificant.
4630              # The "1" at the beginning is required to follow the metric unit syntax.
4631              #
4632              # Used by metric-based quotas only.
4633          "name": "A String", # Name of the quota limit. The name is used to refer to the limit when
4634              # overriding the default limit on per-consumer basis.
4635              #
4636              # For metric-based quota limits, the name must be provided, and it must be
4637              # unique within the service. The name can only include alphanumeric
4638              # characters as well as '-'.
4639              #
4640              # The maximum length of the limit name is 64 characters.
4641              #
4642              # The name of a limit is used as a unique identifier for this limit.
4643              # Therefore, once a limit has been put into use, its name should be
4644              # immutable. You can use the display_name field to provide a user-friendly
4645              # name for the limit. The display name can be evolved over time without
4646              # affecting the identity of the limit.
4647        },
4648      ],
4649    },
4650    "visibility": { # `Visibility` defines restrictions for the visibility of service # API visibility configuration.
4651        # elements.  Restrictions are specified using visibility labels
4652        # (e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.
4653        #
4654        # Users and projects can have access to more than one visibility label. The
4655        # effective visibility for multiple labels is the union of each label's
4656        # elements, plus any unrestricted elements.
4657        #
4658        # If an element and its parents have no restrictions, visibility is
4659        # unconditionally granted.
4660        #
4661        # Example:
4662        #
4663        #     visibility:
4664        #       rules:
4665        #       - selector: google.calendar.Calendar.EnhancedSearch
4666        #         restriction: TRUSTED_TESTER
4667        #       - selector: google.calendar.Calendar.Delegate
4668        #         restriction: GOOGLE_INTERNAL
4669        #
4670        # Here, all methods are publicly visible except for the restricted methods
4671        # EnhancedSearch and Delegate.
4672      "rules": [ # A list of visibility rules that apply to individual API elements.
4673          #
4674          # **NOTE:** All service configuration rules follow "last one wins" order.
4675        { # A visibility rule provides visibility configuration for an individual API
4676            # element.
4677          "restriction": "A String", # A comma-separated list of visibility labels that apply to the `selector`.
4678              # Any of the listed labels can be used to grant the visibility.
4679              #
4680              # If a rule has multiple labels, removing one of the labels but not all of
4681              # them can break clients.
4682              #
4683              # Example:
4684              #
4685              #     visibility:
4686              #       rules:
4687              #       - selector: google.calendar.Calendar.EnhancedSearch
4688              #         restriction: GOOGLE_INTERNAL, TRUSTED_TESTER
4689              #
4690              # Removing GOOGLE_INTERNAL from this restriction will break clients that
4691              # rely on this method and only had access to it through GOOGLE_INTERNAL.
4692          "selector": "A String", # Selects methods, messages, fields, enums, etc. to which this rule applies.
4693              #
4694              # Refer to selector for syntax details.
4695        },
4696      ],
4697    },
4698    "metrics": [ # Defines the metrics used by this service.
4699      { # Defines a metric type and its schema. Once a metric descriptor is created,
4700          # deleting or altering it stops data collection and makes the metric type's
4701          # existing data unusable.
4702        "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces.
4703            # Use sentence case without an ending period, for example "Request count".
4704        "description": "A String", # A detailed description of the metric, which can be used in documentation.
4705        "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
4706            # Some combinations of `metric_kind` and `value_type` might not be supported.
4707        "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
4708            # Some combinations of `metric_kind` and `value_type` might not be supported.
4709        "labels": [ # The set of labels that can be used to describe a specific
4710            # instance of this metric type. For example, the
4711            # `appengine.googleapis.com/http/server/response_latencies` metric
4712            # type has a label for the HTTP response code, `response_code`, so
4713            # you can look at latencies for successful responses or just
4714            # for responses that failed.
4715          { # A description of a label.
4716            "valueType": "A String", # The type of data that can be assigned to the label.
4717            "description": "A String", # A human-readable description for the label.
4718            "key": "A String", # The label key.
4719          },
4720        ],
4721        "type": "A String", # The metric type, including its DNS name prefix. The type is not
4722            # URL-encoded.  All user-defined custom metric types have the DNS name
4723            # `custom.googleapis.com`.  Metric types should use a natural hierarchical
4724            # grouping. For example:
4725            #
4726            #     "custom.googleapis.com/invoice/paid/amount"
4727            #     "appengine.googleapis.com/http/server/response_latencies"
4728        "unit": "A String", # The unit in which the metric value is reported. It is only applicable
4729            # if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The
4730            # supported units are a subset of [The Unified Code for Units of
4731            # Measure](http://unitsofmeasure.org/ucum.html) standard:
4732            #
4733            # **Basic units (UNIT)**
4734            #
4735            # * `bit`   bit
4736            # * `By`    byte
4737            # * `s`     second
4738            # * `min`   minute
4739            # * `h`     hour
4740            # * `d`     day
4741            #
4742            # **Prefixes (PREFIX)**
4743            #
4744            # * `k`     kilo    (10**3)
4745            # * `M`     mega    (10**6)
4746            # * `G`     giga    (10**9)
4747            # * `T`     tera    (10**12)
4748            # * `P`     peta    (10**15)
4749            # * `E`     exa     (10**18)
4750            # * `Z`     zetta   (10**21)
4751            # * `Y`     yotta   (10**24)
4752            # * `m`     milli   (10**-3)
4753            # * `u`     micro   (10**-6)
4754            # * `n`     nano    (10**-9)
4755            # * `p`     pico    (10**-12)
4756            # * `f`     femto   (10**-15)
4757            # * `a`     atto    (10**-18)
4758            # * `z`     zepto   (10**-21)
4759            # * `y`     yocto   (10**-24)
4760            # * `Ki`    kibi    (2**10)
4761            # * `Mi`    mebi    (2**20)
4762            # * `Gi`    gibi    (2**30)
4763            # * `Ti`    tebi    (2**40)
4764            #
4765            # **Grammar**
4766            #
4767            # The grammar includes the dimensionless unit `1`, such as `1/s`.
4768            #
4769            # The grammar also includes these connectors:
4770            #
4771            # * `/`    division (as an infix operator, e.g. `1/s`).
4772            # * `.`    multiplication (as an infix operator, e.g. `GBy.d`)
4773            #
4774            # The grammar for a unit is as follows:
4775            #
4776            #     Expression = Component { "." Component } { "/" Component } ;
4777            #
4778            #     Component = [ PREFIX ] UNIT [ Annotation ]
4779            #               | Annotation
4780            #               | "1"
4781            #               ;
4782            #
4783            #     Annotation = "{" NAME "}" ;
4784            #
4785            # Notes:
4786            #
4787            # * `Annotation` is just a comment if it follows a `UNIT` and is
4788            #    equivalent to `1` if it is used alone. For examples,
4789            #    `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.
4790            # * `NAME` is a sequence of non-blank printable ASCII characters not
4791            #    containing '{' or '}'.
4792        "name": "A String", # The resource name of the metric descriptor. Depending on the
4793            # implementation, the name typically includes: (1) the parent resource name
4794            # that defines the scope of the metric type or of its data; and (2) the
4795            # metric's URL-encoded type, which also appears in the `type` field of this
4796            # descriptor. For example, following is the resource name of a custom
4797            # metric within the GCP project `my-project-id`:
4798            #
4799            #     "projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount"
4800      },
4801    ],
4802    "enums": [ # A list of all enum types included in this API service.  Enums
4803        # referenced directly or indirectly by the `apis` are automatically
4804        # included.  Enums which are not referenced but shall be included
4805        # should be listed here by name. Example:
4806        #
4807        #     enums:
4808        #     - name: google.someapi.v1.SomeEnum
4809      { # Enum type definition.
4810        "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
4811            # protobuf element, like the file in which it is defined.
4812          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
4813              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
4814        },
4815        "enumvalue": [ # Enum value definitions.
4816          { # Enum value definition.
4817            "options": [ # Protocol buffer options.
4818              { # A protocol buffer option, which can be attached to a message, field,
4819                  # enumeration, etc.
4820                "name": "A String", # The option's name. For protobuf built-in options (options defined in
4821                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
4822                    # For custom options, it should be the fully-qualified name. For example,
4823                    # `"google.api.http"`.
4824                "value": { # The option's value packed in an Any message. If the value is a primitive,
4825                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
4826                    # should be used. If the value is an enum, it should be stored as an int32
4827                    # value using the google.protobuf.Int32Value type.
4828                  "a_key": "", # Properties of the object. Contains field @type with type URL.
4829                },
4830              },
4831            ],
4832            "name": "A String", # Enum value name.
4833            "number": 42, # Enum value number.
4834          },
4835        ],
4836        "options": [ # Protocol buffer options.
4837          { # A protocol buffer option, which can be attached to a message, field,
4838              # enumeration, etc.
4839            "name": "A String", # The option's name. For protobuf built-in options (options defined in
4840                # descriptor.proto), this is the short name. For example, `"map_entry"`.
4841                # For custom options, it should be the fully-qualified name. For example,
4842                # `"google.api.http"`.
4843            "value": { # The option's value packed in an Any message. If the value is a primitive,
4844                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
4845                # should be used. If the value is an enum, it should be stored as an int32
4846                # value using the google.protobuf.Int32Value type.
4847              "a_key": "", # Properties of the object. Contains field @type with type URL.
4848            },
4849          },
4850        ],
4851        "name": "A String", # Enum type name.
4852        "syntax": "A String", # The source syntax.
4853      },
4854    ],
4855    "types": [ # A list of all proto message types included in this API service.
4856        # Types referenced directly or indirectly by the `apis` are
4857        # automatically included.  Messages which are not referenced but
4858        # shall be included, such as types used by the `google.protobuf.Any` type,
4859        # should be listed here by name. Example:
4860        #
4861        #     types:
4862        #     - name: google.protobuf.Int32
4863      { # A protocol buffer message type.
4864        "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
4865          "A String",
4866        ],
4867        "name": "A String", # The fully qualified message name.
4868        "fields": [ # The list of fields.
4869          { # A single field of a message type.
4870            "kind": "A String", # The field type.
4871            "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
4872                # types. The first type has index 1; zero means the type is not in the list.
4873            "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
4874                # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
4875            "name": "A String", # The field name.
4876            "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
4877            "jsonName": "A String", # The field JSON name.
4878            "number": 42, # The field number.
4879            "cardinality": "A String", # The field cardinality.
4880            "options": [ # The protocol buffer options.
4881              { # A protocol buffer option, which can be attached to a message, field,
4882                  # enumeration, etc.
4883                "name": "A String", # The option's name. For protobuf built-in options (options defined in
4884                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
4885                    # For custom options, it should be the fully-qualified name. For example,
4886                    # `"google.api.http"`.
4887                "value": { # The option's value packed in an Any message. If the value is a primitive,
4888                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
4889                    # should be used. If the value is an enum, it should be stored as an int32
4890                    # value using the google.protobuf.Int32Value type.
4891                  "a_key": "", # Properties of the object. Contains field @type with type URL.
4892                },
4893              },
4894            ],
4895            "packed": True or False, # Whether to use alternative packed wire representation.
4896          },
4897        ],
4898        "syntax": "A String", # The source syntax.
4899        "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
4900            # protobuf element, like the file in which it is defined.
4901          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
4902              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
4903        },
4904        "options": [ # The protocol buffer options.
4905          { # A protocol buffer option, which can be attached to a message, field,
4906              # enumeration, etc.
4907            "name": "A String", # The option's name. For protobuf built-in options (options defined in
4908                # descriptor.proto), this is the short name. For example, `"map_entry"`.
4909                # For custom options, it should be the fully-qualified name. For example,
4910                # `"google.api.http"`.
4911            "value": { # The option's value packed in an Any message. If the value is a primitive,
4912                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
4913                # should be used. If the value is an enum, it should be stored as an int32
4914                # value using the google.protobuf.Int32Value type.
4915              "a_key": "", # Properties of the object. Contains field @type with type URL.
4916            },
4917          },
4918        ],
4919      },
4920    ],
4921    "logging": { # Logging configuration of the service. # Logging configuration.
4922        #
4923        # The following example shows how to configure logs to be sent to the
4924        # producer and consumer projects. In the example, the `activity_history`
4925        # log is sent to both the producer and consumer projects, whereas the
4926        # `purchase_history` log is only sent to the producer project.
4927        #
4928        #     monitored_resources:
4929        #     - type: library.googleapis.com/branch
4930        #       labels:
4931        #       - key: /city
4932        #         description: The city where the library branch is located in.
4933        #       - key: /name
4934        #         description: The name of the branch.
4935        #     logs:
4936        #     - name: activity_history
4937        #       labels:
4938        #       - key: /customer_id
4939        #     - name: purchase_history
4940        #     logging:
4941        #       producer_destinations:
4942        #       - monitored_resource: library.googleapis.com/branch
4943        #         logs:
4944        #         - activity_history
4945        #         - purchase_history
4946        #       consumer_destinations:
4947        #       - monitored_resource: library.googleapis.com/branch
4948        #         logs:
4949        #         - activity_history
4950      "producerDestinations": [ # Logging configurations for sending logs to the producer project.
4951          # There can be multiple producer destinations, each one must have a
4952          # different monitored resource type. A log can be used in at most
4953          # one producer destination.
4954        { # Configuration of a specific logging destination (the producer project
4955            # or the consumer project).
4956          "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
4957              # Service.monitored_resources section.
4958          "logs": [ # Names of the logs to be sent to this destination. Each name must
4959              # be defined in the Service.logs section. If the log name is
4960              # not a domain scoped name, it will be automatically prefixed with
4961              # the service name followed by "/".
4962            "A String",
4963          ],
4964        },
4965      ],
4966      "consumerDestinations": [ # Logging configurations for sending logs to the consumer project.
4967          # There can be multiple consumer destinations, each one must have a
4968          # different monitored resource type. A log can be used in at most
4969          # one consumer destination.
4970        { # Configuration of a specific logging destination (the producer project
4971            # or the consumer project).
4972          "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
4973              # Service.monitored_resources section.
4974          "logs": [ # Names of the logs to be sent to this destination. Each name must
4975              # be defined in the Service.logs section. If the log name is
4976              # not a domain scoped name, it will be automatically prefixed with
4977              # the service name followed by "/".
4978            "A String",
4979          ],
4980        },
4981      ],
4982    },
4983    "name": "A String", # The DNS address at which this service is available,
4984        # e.g. `calendar.googleapis.com`.
4985    "documentation": { # `Documentation` provides the information for describing a service. # Additional API documentation.
4986        #
4987        # Example:
4988        # <pre><code>documentation:
4989        #   summary: >
4990        #     The Google Calendar API gives access
4991        #     to most calendar features.
4992        #   pages:
4993        #   - name: Overview
4994        #     content: &#40;== include google/foo/overview.md ==&#41;
4995        #   - name: Tutorial
4996        #     content: &#40;== include google/foo/tutorial.md ==&#41;
4997        #     subpages;
4998        #     - name: Java
4999        #       content: &#40;== include google/foo/tutorial_java.md ==&#41;
5000        #   rules:
5001        #   - selector: google.calendar.Calendar.Get
5002        #     description: >
5003        #       ...
5004        #   - selector: google.calendar.Calendar.Put
5005        #     description: >
5006        #       ...
5007        # </code></pre>
5008        # Documentation is provided in markdown syntax. In addition to
5009        # standard markdown features, definition lists, tables and fenced
5010        # code blocks are supported. Section headers can be provided and are
5011        # interpreted relative to the section nesting of the context where
5012        # a documentation fragment is embedded.
5013        #
5014        # Documentation from the IDL is merged with documentation defined
5015        # via the config at normalization time, where documentation provided
5016        # by config rules overrides IDL provided.
5017        #
5018        # A number of constructs specific to the API platform are supported
5019        # in documentation text.
5020        #
5021        # In order to reference a proto element, the following
5022        # notation can be used:
5023        # <pre><code>&#91;fully.qualified.proto.name]&#91;]</code></pre>
5024        # To override the display text used for the link, this can be used:
5025        # <pre><code>&#91;display text]&#91;fully.qualified.proto.name]</code></pre>
5026        # Text can be excluded from doc using the following notation:
5027        # <pre><code>&#40;-- internal comment --&#41;</code></pre>
5028        # Comments can be made conditional using a visibility label. The below
5029        # text will be only rendered if the `BETA` label is available:
5030        # <pre><code>&#40;--BETA: comment for BETA users --&#41;</code></pre>
5031        # A few directives are available in documentation. Note that
5032        # directives must appear on a single line to be properly
5033        # identified. The `include` directive includes a markdown file from
5034        # an external source:
5035        # <pre><code>&#40;== include path/to/file ==&#41;</code></pre>
5036        # The `resource_for` directive marks a message to be the resource of
5037        # a collection in REST view. If it is not specified, tools attempt
5038        # to infer the resource from the operations in a collection:
5039        # <pre><code>&#40;== resource_for v1.shelves.books ==&#41;</code></pre>
5040        # The directive `suppress_warning` does not directly affect documentation
5041        # and is documented together with service config validation.
5042      "rules": [ # A list of documentation rules that apply to individual API elements.
5043          #
5044          # **NOTE:** All service configuration rules follow "last one wins" order.
5045        { # A documentation rule provides information about individual API elements.
5046          "description": "A String", # Description of the selected API(s).
5047          "deprecationDescription": "A String", # Deprecation description of the selected element(s). It can be provided if an
5048              # element is marked as `deprecated`.
5049          "selector": "A String", # The selector is a comma-separated list of patterns. Each pattern is a
5050              # qualified name of the element which may end in "*", indicating a wildcard.
5051              # Wildcards are only allowed at the end and for a whole component of the
5052              # qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To
5053              # specify a default for all applicable elements, the whole pattern "*"
5054              # is used.
5055        },
5056      ],
5057      "documentationRootUrl": "A String", # The URL to the root of documentation.
5058      "overview": "A String", # Declares a single overview page. For example:
5059          # <pre><code>documentation:
5060          #   summary: ...
5061          #   overview: &#40;== include overview.md ==&#41;
5062          # </code></pre>
5063          # This is a shortcut for the following declaration (using pages style):
5064          # <pre><code>documentation:
5065          #   summary: ...
5066          #   pages:
5067          #   - name: Overview
5068          #     content: &#40;== include overview.md ==&#41;
5069          # </code></pre>
5070          # Note: you cannot specify both `overview` field and `pages` field.
5071      "pages": [ # The top level pages for the documentation set.
5072        { # Represents a documentation page. A page can contain subpages to represent
5073            # nested documentation set structure.
5074          "content": "A String", # The Markdown content of the page. You can use <code>&#40;== include {path} ==&#41;</code>
5075              # to include content from a Markdown file.
5076          "subpages": [ # Subpages of this page. The order of subpages specified here will be
5077              # honored in the generated docset.
5078            # Object with schema name: Page
5079          ],
5080          "name": "A String", # The name of the page. It will be used as an identity of the page to
5081              # generate URI of the page, text of the link to this page in navigation,
5082              # etc. The full page name (start from the root page name to this page
5083              # concatenated with `.`) can be used as reference to the page in your
5084              # documentation. For example:
5085              # <pre><code>pages:
5086              # - name: Tutorial
5087              #   content: &#40;== include tutorial.md ==&#41;
5088              #   subpages:
5089              #   - name: Java
5090              #     content: &#40;== include tutorial_java.md ==&#41;
5091              # </code></pre>
5092              # You can reference `Java` page using Markdown reference link syntax:
5093              # `Java`.
5094        },
5095      ],
5096      "summary": "A String", # A short summary of what the service does. Can only be provided by
5097          # plain text.
5098    },
5099    "sourceInfo": { # Source information used to create a Service Config # Output only. The source information for this configuration if available.
5100      "sourceFiles": [ # All files used during config generation.
5101        {
5102          "a_key": "", # Properties of the object. Contains field @type with type URL.
5103        },
5104      ],
5105    },
5106    "systemTypes": [ # A list of all proto message types included in this API service.
5107        # It serves similar purpose as [google.api.Service.types], except that
5108        # these types are not needed by user-defined APIs. Therefore, they will not
5109        # show up in the generated discovery doc. This field should only be used
5110        # to define system APIs in ESF.
5111      { # A protocol buffer message type.
5112        "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
5113          "A String",
5114        ],
5115        "name": "A String", # The fully qualified message name.
5116        "fields": [ # The list of fields.
5117          { # A single field of a message type.
5118            "kind": "A String", # The field type.
5119            "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
5120                # types. The first type has index 1; zero means the type is not in the list.
5121            "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
5122                # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
5123            "name": "A String", # The field name.
5124            "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
5125            "jsonName": "A String", # The field JSON name.
5126            "number": 42, # The field number.
5127            "cardinality": "A String", # The field cardinality.
5128            "options": [ # The protocol buffer options.
5129              { # A protocol buffer option, which can be attached to a message, field,
5130                  # enumeration, etc.
5131                "name": "A String", # The option's name. For protobuf built-in options (options defined in
5132                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
5133                    # For custom options, it should be the fully-qualified name. For example,
5134                    # `"google.api.http"`.
5135                "value": { # The option's value packed in an Any message. If the value is a primitive,
5136                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
5137                    # should be used. If the value is an enum, it should be stored as an int32
5138                    # value using the google.protobuf.Int32Value type.
5139                  "a_key": "", # Properties of the object. Contains field @type with type URL.
5140                },
5141              },
5142            ],
5143            "packed": True or False, # Whether to use alternative packed wire representation.
5144          },
5145        ],
5146        "syntax": "A String", # The source syntax.
5147        "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
5148            # protobuf element, like the file in which it is defined.
5149          "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
5150              # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
5151        },
5152        "options": [ # The protocol buffer options.
5153          { # A protocol buffer option, which can be attached to a message, field,
5154              # enumeration, etc.
5155            "name": "A String", # The option's name. For protobuf built-in options (options defined in
5156                # descriptor.proto), this is the short name. For example, `"map_entry"`.
5157                # For custom options, it should be the fully-qualified name. For example,
5158                # `"google.api.http"`.
5159            "value": { # The option's value packed in an Any message. If the value is a primitive,
5160                # the corresponding wrapper type defined in google/protobuf/wrappers.proto
5161                # should be used. If the value is an enum, it should be stored as an int32
5162                # value using the google.protobuf.Int32Value type.
5163              "a_key": "", # Properties of the object. Contains field @type with type URL.
5164            },
5165          },
5166        ],
5167      },
5168    ],
5169    "context": { # `Context` defines which contexts an API requests. # Context configuration.
5170        #
5171        # Example:
5172        #
5173        #     context:
5174        #       rules:
5175        #       - selector: "*"
5176        #         requested:
5177        #         - google.rpc.context.ProjectContext
5178        #         - google.rpc.context.OriginContext
5179        #
5180        # The above specifies that all methods in the API request
5181        # `google.rpc.context.ProjectContext` and
5182        # `google.rpc.context.OriginContext`.
5183        #
5184        # Available context types are defined in package
5185        # `google.rpc.context`.
5186      "rules": [ # A list of RPC context rules that apply to individual API methods.
5187          #
5188          # **NOTE:** All service configuration rules follow "last one wins" order.
5189        { # A context rule provides information about the context for an individual API
5190            # element.
5191          "provided": [ # A list of full type names of provided contexts.
5192            "A String",
5193          ],
5194          "selector": "A String", # Selects the methods to which this rule applies.
5195              #
5196              # Refer to selector for syntax details.
5197          "requested": [ # A list of full type names of requested contexts.
5198            "A String",
5199          ],
5200        },
5201      ],
5202    },
5203    "endpoints": [ # Configuration for network endpoints.  If this is empty, then an endpoint
5204        # with the same name as the service is automatically generated to service all
5205        # defined APIs.
5206      { # `Endpoint` describes a network endpoint that serves a set of APIs.
5207          # A service may expose any number of endpoints, and all endpoints share the
5208          # same service configuration, such as quota configuration and monitoring
5209          # configuration.
5210          #
5211          # Example service configuration:
5212          #
5213          #     name: library-example.googleapis.com
5214          #     endpoints:
5215          #       # Below entry makes 'google.example.library.v1.Library'
5216          #       # API be served from endpoint address library-example.googleapis.com.
5217          #       # It also allows HTTP OPTIONS calls to be passed to the backend, for
5218          #       # it to decide whether the subsequent cross-origin request is
5219          #       # allowed to proceed.
5220          #     - name: library-example.googleapis.com
5221          #       allow_cors: true
5222        "target": "A String", # The specification of an Internet routable address of API frontend that will
5223            # handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
5224            # It should be either a valid IPv4 address or a fully-qualified domain name.
5225            # For example, "8.8.8.8" or "myservice.appspot.com".
5226        "apis": [ # The list of APIs served by this endpoint.
5227            #
5228            # If no APIs are specified this translates to "all APIs" exported by the
5229            # service, as defined in the top-level service configuration.
5230          "A String",
5231        ],
5232        "allowCors": True or False, # Allowing
5233            # [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
5234            # cross-domain traffic, would allow the backends served from this endpoint to
5235            # receive and respond to HTTP OPTIONS requests. The response will be used by
5236            # the browser to determine whether the subsequent cross-origin request is
5237            # allowed to proceed.
5238        "name": "A String", # The canonical name of this endpoint.
5239        "features": [ # The list of features enabled on this endpoint.
5240          "A String",
5241        ],
5242        "aliases": [ # DEPRECATED: This field is no longer supported. Instead of using aliases,
5243            # please specify multiple google.api.Endpoint for each of the intented
5244            # alias.
5245            #
5246            # Additional names that this endpoint will be hosted on.
5247          "A String",
5248        ],
5249      },
5250    ],
5251    "experimental": { # Experimental service configuration. These configuration options can # Experimental configuration.
5252        # only be used by whitelisted users.
5253      "authorization": { # Configuration of authorization. # Authorization configuration.
5254          #
5255          # This section determines the authorization provider, if unspecified, then no
5256          # authorization check will be done.
5257          #
5258          # Example:
5259          #
5260          #     experimental:
5261          #       authorization:
5262          #         provider: firebaserules.googleapis.com
5263        "provider": "A String", # The name of the authorization provider, such as
5264            # firebaserules.googleapis.com.
5265      },
5266    },
5267  }</pre>
5268</div>
5269
5270<div class="method">
5271    <code class="details" id="list">list(serviceName, pageSize=None, pageToken=None, x__xgafv=None)</code>
5272  <pre>Lists the history of the service configuration for a managed service,
5273from the newest to the oldest.
5274
5275Args:
5276  serviceName: string, The name of the service.  See the [overview](/service-management/overview)
5277for naming requirements.  For example: `example.googleapis.com`. (required)
5278  pageSize: integer, The max number of items to include in the response list.
5279  pageToken: string, The token of the page to retrieve.
5280  x__xgafv: string, V1 error format.
5281    Allowed values
5282      1 - v1 error format
5283      2 - v2 error format
5284
5285Returns:
5286  An object of the form:
5287
5288    { # Response message for ListServiceConfigs method.
5289    "nextPageToken": "A String", # The token of the next page of results.
5290    "serviceConfigs": [ # The list of service configuration resources.
5291      { # `Service` is the root object of Google service configuration schema. It
5292          # describes basic information about a service, such as the name and the
5293          # title, and delegates other aspects to sub-sections. Each sub-section is
5294          # either a proto message or a repeated proto message that configures a
5295          # specific aspect, such as auth. See each proto message definition for details.
5296          #
5297          # Example:
5298          #
5299          #     type: google.api.Service
5300          #     config_version: 3
5301          #     name: calendar.googleapis.com
5302          #     title: Google Calendar API
5303          #     apis:
5304          #     - name: google.calendar.v3.Calendar
5305          #     authentication:
5306          #       providers:
5307          #       - id: google_calendar_auth
5308          #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
5309          #         issuer: https://securetoken.google.com
5310          #       rules:
5311          #       - selector: "*"
5312          #         requirements:
5313          #           provider_id: google_calendar_auth
5314        "control": { # Selects and configures the service controller used by the service.  The # Configuration for the service control plane.
5315            # service controller handles features like abuse, quota, billing, logging,
5316            # monitoring, etc.
5317          "environment": "A String", # The service control environment to use. If empty, no control plane
5318              # feature (like quota and billing) will be enabled.
5319        },
5320        "monitoredResources": [ # Defines the monitored resources used by this service. This is required
5321            # by the Service.monitoring and Service.logging configurations.
5322          { # An object that describes the schema of a MonitoredResource object using a
5323              # type name and a set of labels.  For example, the monitored resource
5324              # descriptor for Google Compute Engine VM instances has a type of
5325              # `"gce_instance"` and specifies the use of the labels `"instance_id"` and
5326              # `"zone"` to identify particular VM instances.
5327              #
5328              # Different APIs can support different monitored resource types. APIs generally
5329              # provide a `list` method that returns the monitored resource descriptors used
5330              # by the API.
5331            "type": "A String", # Required. The monitored resource type. For example, the type
5332                # `"cloudsql_database"` represents databases in Google Cloud SQL.
5333                # The maximum length of this value is 256 characters.
5334            "labels": [ # Required. A set of labels used to describe instances of this monitored
5335                # resource type. For example, an individual Google Cloud SQL database is
5336                # identified by values for the labels `"database_id"` and `"zone"`.
5337              { # A description of a label.
5338                "valueType": "A String", # The type of data that can be assigned to the label.
5339                "description": "A String", # A human-readable description for the label.
5340                "key": "A String", # The label key.
5341              },
5342            ],
5343            "displayName": "A String", # Optional. A concise name for the monitored resource type that might be
5344                # displayed in user interfaces. It should be a Title Cased Noun Phrase,
5345                # without any article or other determiners. For example,
5346                # `"Google Cloud SQL Database"`.
5347            "name": "A String", # Optional. The resource name of the monitored resource descriptor:
5348                # `"projects/{project_id}/monitoredResourceDescriptors/{type}"` where
5349                # {type} is the value of the `type` field in this object and
5350                # {project_id} is a project ID that provides API-specific context for
5351                # accessing the type.  APIs that do not use project information can use the
5352                # resource name format `"monitoredResourceDescriptors/{type}"`.
5353            "description": "A String", # Optional. A detailed description of the monitored resource type that might
5354                # be used in documentation.
5355          },
5356        ],
5357        "logs": [ # Defines the logs used by this service.
5358          { # A description of a log type. Example in YAML format:
5359              #
5360              #     - name: library.googleapis.com/activity_history
5361              #       description: The history of borrowing and returning library items.
5362              #       display_name: Activity
5363              #       labels:
5364              #       - key: /customer_id
5365              #         description: Identifier of a library customer
5366            "labels": [ # The set of labels that are available to describe a specific log entry.
5367                # Runtime requests that contain labels not specified here are
5368                # considered invalid.
5369              { # A description of a label.
5370                "valueType": "A String", # The type of data that can be assigned to the label.
5371                "description": "A String", # A human-readable description for the label.
5372                "key": "A String", # The label key.
5373              },
5374            ],
5375            "displayName": "A String", # The human-readable name for this log. This information appears on
5376                # the user interface and should be concise.
5377            "name": "A String", # The name of the log. It must be less than 512 characters long and can
5378                # include the following characters: upper- and lower-case alphanumeric
5379                # characters [A-Za-z0-9], and punctuation characters including
5380                # slash, underscore, hyphen, period [/_-.].
5381            "description": "A String", # A human-readable description of this log. This information appears in
5382                # the documentation and can contain details.
5383          },
5384        ],
5385        "systemParameters": { # ### System parameter configuration # System parameter configuration.
5386            #
5387            # A system parameter is a special kind of parameter defined by the API
5388            # system, not by an individual API. It is typically mapped to an HTTP header
5389            # and/or a URL query parameter. This configuration specifies which methods
5390            # change the names of the system parameters.
5391          "rules": [ # Define system parameters.
5392              #
5393              # The parameters defined here will override the default parameters
5394              # implemented by the system. If this field is missing from the service
5395              # config, default system parameters will be used. Default system parameters
5396              # and names is implementation-dependent.
5397              #
5398              # Example: define api key for all methods
5399              #
5400              #     system_parameters
5401              #       rules:
5402              #         - selector: "*"
5403              #           parameters:
5404              #             - name: api_key
5405              #               url_query_parameter: api_key
5406              #
5407              #
5408              # Example: define 2 api key names for a specific method.
5409              #
5410              #     system_parameters
5411              #       rules:
5412              #         - selector: "/ListShelves"
5413              #           parameters:
5414              #             - name: api_key
5415              #               http_header: Api-Key1
5416              #             - name: api_key
5417              #               http_header: Api-Key2
5418              #
5419              # **NOTE:** All service configuration rules follow "last one wins" order.
5420            { # Define a system parameter rule mapping system parameter definitions to
5421                # methods.
5422              "parameters": [ # Define parameters. Multiple names may be defined for a parameter.
5423                  # For a given method call, only one of them should be used. If multiple
5424                  # names are used the behavior is implementation-dependent.
5425                  # If none of the specified names are present the behavior is
5426                  # parameter-dependent.
5427                { # Define a parameter's name and location. The parameter may be passed as either
5428                    # an HTTP header or a URL query parameter, and if both are passed the behavior
5429                    # is implementation-dependent.
5430                  "urlQueryParameter": "A String", # Define the URL query parameter name to use for the parameter. It is case
5431                      # sensitive.
5432                  "httpHeader": "A String", # Define the HTTP header name to use for the parameter. It is case
5433                      # insensitive.
5434                  "name": "A String", # Define the name of the parameter, such as "api_key" . It is case sensitive.
5435                },
5436              ],
5437              "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
5438                  # methods in all APIs.
5439                  #
5440                  # Refer to selector for syntax details.
5441            },
5442          ],
5443        },
5444        "id": "A String", # A unique ID for a specific instance of this message, typically assigned
5445            # by the client for tracking purpose. If empty, the server may choose to
5446            # generate one instead.
5447        "backend": { # `Backend` defines the backend configuration for a service. # API backend configuration.
5448          "rules": [ # A list of API backend rules that apply to individual API methods.
5449              #
5450              # **NOTE:** All service configuration rules follow "last one wins" order.
5451            { # A backend rule provides configuration for an individual API element.
5452              "selector": "A String", # Selects the methods to which this rule applies.
5453                  #
5454                  # Refer to selector for syntax details.
5455              "minDeadline": 3.14, # Minimum deadline in seconds needed for this method. Calls having deadline
5456                  # value lower than this will be rejected.
5457              "deadline": 3.14, # The number of seconds to wait for a response from a request.  The
5458                  # default depends on the deployment context.
5459              "address": "A String", # The address of the API backend.
5460            },
5461          ],
5462        },
5463        "monitoring": { # Monitoring configuration of the service. # Monitoring configuration.
5464            #
5465            # The example below shows how to configure monitored resources and metrics
5466            # for monitoring. In the example, a monitored resource and two metrics are
5467            # defined. The `library.googleapis.com/book/returned_count` metric is sent
5468            # to both producer and consumer projects, whereas the
5469            # `library.googleapis.com/book/overdue_count` metric is only sent to the
5470            # consumer project.
5471            #
5472            #     monitored_resources:
5473            #     - type: library.googleapis.com/branch
5474            #       labels:
5475            #       - key: /city
5476            #         description: The city where the library branch is located in.
5477            #       - key: /name
5478            #         description: The name of the branch.
5479            #     metrics:
5480            #     - name: library.googleapis.com/book/returned_count
5481            #       metric_kind: DELTA
5482            #       value_type: INT64
5483            #       labels:
5484            #       - key: /customer_id
5485            #     - name: library.googleapis.com/book/overdue_count
5486            #       metric_kind: GAUGE
5487            #       value_type: INT64
5488            #       labels:
5489            #       - key: /customer_id
5490            #     monitoring:
5491            #       producer_destinations:
5492            #       - monitored_resource: library.googleapis.com/branch
5493            #         metrics:
5494            #         - library.googleapis.com/book/returned_count
5495            #       consumer_destinations:
5496            #       - monitored_resource: library.googleapis.com/branch
5497            #         metrics:
5498            #         - library.googleapis.com/book/returned_count
5499            #         - library.googleapis.com/book/overdue_count
5500          "producerDestinations": [ # Monitoring configurations for sending metrics to the producer project.
5501              # There can be multiple producer destinations, each one must have a
5502              # different monitored resource type. A metric can be used in at most
5503              # one producer destination.
5504            { # Configuration of a specific monitoring destination (the producer project
5505                # or the consumer project).
5506              "monitoredResource": "A String", # The monitored resource type. The type must be defined in
5507                  # Service.monitored_resources section.
5508              "metrics": [ # Names of the metrics to report to this monitoring destination.
5509                  # Each name must be defined in Service.metrics section.
5510                "A String",
5511              ],
5512            },
5513          ],
5514          "consumerDestinations": [ # Monitoring configurations for sending metrics to the consumer project.
5515              # There can be multiple consumer destinations, each one must have a
5516              # different monitored resource type. A metric can be used in at most
5517              # one consumer destination.
5518            { # Configuration of a specific monitoring destination (the producer project
5519                # or the consumer project).
5520              "monitoredResource": "A String", # The monitored resource type. The type must be defined in
5521                  # Service.monitored_resources section.
5522              "metrics": [ # Names of the metrics to report to this monitoring destination.
5523                  # Each name must be defined in Service.metrics section.
5524                "A String",
5525              ],
5526            },
5527          ],
5528        },
5529        "title": "A String", # The product title associated with this service.
5530        "authentication": { # `Authentication` defines the authentication configuration for an API. # Auth configuration.
5531            #
5532            # Example for an API targeted for external use:
5533            #
5534            #     name: calendar.googleapis.com
5535            #     authentication:
5536            #       providers:
5537            #       - id: google_calendar_auth
5538            #         jwks_uri: https://www.googleapis.com/oauth2/v1/certs
5539            #         issuer: https://securetoken.google.com
5540            #       rules:
5541            #       - selector: "*"
5542            #         requirements:
5543            #           provider_id: google_calendar_auth
5544          "rules": [ # A list of authentication rules that apply to individual API methods.
5545              #
5546              # **NOTE:** All service configuration rules follow "last one wins" order.
5547            { # Authentication rules for the service.
5548                #
5549                # By default, if a method has any authentication requirements, every request
5550                # must include a valid credential matching one of the requirements.
5551                # It's an error to include more than one kind of credential in a single
5552                # request.
5553                #
5554                # If a method doesn't have any auth requirements, request credentials will be
5555                # ignored.
5556              "oauth": { # OAuth scopes are a way to define data and permissions on data. For example, # The requirements for OAuth credentials.
5557                  # there are scopes defined for "Read-only access to Google Calendar" and
5558                  # "Access to Cloud Platform". Users can consent to a scope for an application,
5559                  # giving it permission to access that data on their behalf.
5560                  #
5561                  # OAuth scope specifications should be fairly coarse grained; a user will need
5562                  # to see and understand the text description of what your scope means.
5563                  #
5564                  # In most cases: use one or at most two OAuth scopes for an entire family of
5565                  # products. If your product has multiple APIs, you should probably be sharing
5566                  # the OAuth scope across all of those APIs.
5567                  #
5568                  # When you need finer grained OAuth consent screens: talk with your product
5569                  # management about how developers will use them in practice.
5570                  #
5571                  # Please note that even though each of the canonical scopes is enough for a
5572                  # request to be accepted and passed to the backend, a request can still fail
5573                  # due to the backend requiring additional scopes or permissions.
5574                "canonicalScopes": "A String", # The list of publicly documented OAuth scopes that are allowed access. An
5575                    # OAuth token containing any of these scopes will be accepted.
5576                    #
5577                    # Example:
5578                    #
5579                    #      canonical_scopes: https://www.googleapis.com/auth/calendar,
5580                    #                        https://www.googleapis.com/auth/calendar.read
5581              },
5582              "requirements": [ # Requirements for additional authentication providers.
5583                { # User-defined authentication requirements, including support for
5584                    # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
5585                  "providerId": "A String", # id from authentication provider.
5586                      #
5587                      # Example:
5588                      #
5589                      #     provider_id: bookstore_auth
5590                  "audiences": "A String", # NOTE: This will be deprecated soon, once AuthProvider.audiences is
5591                      # implemented and accepted in all the runtime components.
5592                      #
5593                      # The list of JWT
5594                      # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
5595                      # that are allowed to access. A JWT containing any of these audiences will
5596                      # be accepted. When this setting is absent, only JWTs with audience
5597                      # "https://Service_name/API_name"
5598                      # will be accepted. For example, if no audiences are in the setting,
5599                      # LibraryService API will only accept JWTs with the following audience
5600                      # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
5601                      #
5602                      # Example:
5603                      #
5604                      #     audiences: bookstore_android.apps.googleusercontent.com,
5605                      #                bookstore_web.apps.googleusercontent.com
5606                },
5607              ],
5608              "allowWithoutCredential": True or False, # Whether to allow requests without a credential. The credential can be
5609                  # an OAuth token, Google cookies (first-party auth) or EndUserCreds.
5610                  #
5611                  # For requests without credentials, if the service control environment is
5612                  # specified, each incoming request **must** be associated with a service
5613                  # consumer. This can be done by passing an API key that belongs to a consumer
5614                  # project.
5615              "customAuth": { # Configuration for a custom authentication provider. # Configuration for custom authentication.
5616                "provider": "A String", # A configuration string containing connection information for the
5617                    # authentication provider, typically formatted as a SmartService string
5618                    # (go/smartservice).
5619              },
5620              "selector": "A String", # Selects the methods to which this rule applies.
5621                  #
5622                  # Refer to selector for syntax details.
5623            },
5624          ],
5625          "providers": [ # Defines a set of authentication providers that a service supports.
5626            { # Configuration for an anthentication provider, including support for
5627                # [JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).
5628              "audiences": "A String", # The list of JWT
5629                  # [audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).
5630                  # that are allowed to access. A JWT containing any of these audiences will
5631                  # be accepted. When this setting is absent, only JWTs with audience
5632                  # "https://Service_name/API_name"
5633                  # will be accepted. For example, if no audiences are in the setting,
5634                  # LibraryService API will only accept JWTs with the following audience
5635                  # "https://library-example.googleapis.com/google.example.library.v1.LibraryService".
5636                  #
5637                  # Example:
5638                  #
5639                  #     audiences: bookstore_android.apps.googleusercontent.com,
5640                  #                bookstore_web.apps.googleusercontent.com
5641              "jwksUri": "A String", # URL of the provider's public key set to validate signature of the JWT. See
5642                  # [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
5643                  # Optional if the key set document:
5644                  #  - can be retrieved from
5645                  #    [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html
5646                  #    of the issuer.
5647                  #  - can be inferred from the email domain of the issuer (e.g. a Google service account).
5648                  #
5649                  # Example: https://www.googleapis.com/oauth2/v1/certs
5650              "id": "A String", # The unique identifier of the auth provider. It will be referred to by
5651                  # `AuthRequirement.provider_id`.
5652                  #
5653                  # Example: "bookstore_auth".
5654              "issuer": "A String", # Identifies the principal that issued the JWT. See
5655                  # https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1
5656                  # Usually a URL or an email address.
5657                  #
5658                  # Example: https://securetoken.google.com
5659                  # Example: 1234567-compute@developer.gserviceaccount.com
5660            },
5661          ],
5662        },
5663        "usage": { # Configuration controlling usage of a service. # Configuration controlling usage of this service.
5664          "rules": [ # A list of usage rules that apply to individual API methods.
5665              #
5666              # **NOTE:** All service configuration rules follow "last one wins" order.
5667            { # Usage configuration rules for the service.
5668                #
5669                # NOTE: Under development.
5670                #
5671                #
5672                # Use this rule to configure unregistered calls for the service. Unregistered
5673                # calls are calls that do not contain consumer project identity.
5674                # (Example: calls that do not contain an API key).
5675                # By default, API methods do not allow unregistered calls, and each method call
5676                # must be identified by a consumer project identity. Use this rule to
5677                # allow/disallow unregistered calls.
5678                #
5679                # Example of an API that wants to allow unregistered calls for entire service.
5680                #
5681                #     usage:
5682                #       rules:
5683                #       - selector: "*"
5684                #         allow_unregistered_calls: true
5685                #
5686                # Example of a method that wants to allow unregistered calls.
5687                #
5688                #     usage:
5689                #       rules:
5690                #       - selector: "google.example.library.v1.LibraryService.CreateBook"
5691                #         allow_unregistered_calls: true
5692              "allowUnregisteredCalls": True or False, # True, if the method allows unregistered calls; false otherwise.
5693              "selector": "A String", # Selects the methods to which this rule applies. Use '*' to indicate all
5694                  # methods in all APIs.
5695                  #
5696                  # Refer to selector for syntax details.
5697            },
5698          ],
5699          "producerNotificationChannel": "A String", # The full resource name of a channel used for sending notifications to the
5700              # service producer.
5701              #
5702              # Google Service Management currently only supports
5703              # [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification
5704              # channel. To use Google Cloud Pub/Sub as the channel, this must be the name
5705              # of a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format
5706              # documented in https://cloud.google.com/pubsub/docs/overview.
5707          "requirements": [ # Requirements that must be satisfied before a consumer project can use the
5708              # service. Each requirement is of the form <service.name>/<requirement-id>;
5709              # for example 'serviceusage.googleapis.com/billing-enabled'.
5710            "A String",
5711          ],
5712        },
5713        "configVersion": 42, # The version of the service configuration. The config version may
5714            # influence interpretation of the configuration, for example, to
5715            # determine defaults. This is documented together with applicable
5716            # options. The current default for the config version itself is `3`.
5717        "producerProjectId": "A String", # The id of the Google developer project that owns the service.
5718            # Members of this project can manage the service configuration,
5719            # manage consumption of the service, etc.
5720        "http": { # Defines the HTTP configuration for a service. It contains a list of # HTTP configuration.
5721            # HttpRule, each specifying the mapping of an RPC method
5722            # to one or more HTTP REST API methods.
5723          "rules": [ # A list of HTTP configuration rules that apply to individual API methods.
5724              #
5725              # **NOTE:** All service configuration rules follow "last one wins" order.
5726            { # `HttpRule` defines the mapping of an RPC method to one or more HTTP
5727                # REST APIs.  The mapping determines what portions of the request
5728                # message are populated from the path, query parameters, or body of
5729                # the HTTP request.  The mapping is typically specified as an
5730                # `google.api.http` annotation, see "google/api/annotations.proto"
5731                # for details.
5732                #
5733                # The mapping consists of a field specifying the path template and
5734                # method kind.  The path template can refer to fields in the request
5735                # message, as in the example below which describes a REST GET
5736                # operation on a resource collection of messages:
5737                #
5738                #
5739                #     service Messaging {
5740                #       rpc GetMessage(GetMessageRequest) returns (Message) {
5741                #         option (google.api.http).get = "/v1/messages/{message_id}/{sub.subfield}";
5742                #       }
5743                #     }
5744                #     message GetMessageRequest {
5745                #       message SubMessage {
5746                #         string subfield = 1;
5747                #       }
5748                #       string message_id = 1; // mapped to the URL
5749                #       SubMessage sub = 2;    // `sub.subfield` is url-mapped
5750                #     }
5751                #     message Message {
5752                #       string text = 1; // content of the resource
5753                #     }
5754                #
5755                # The same http annotation can alternatively be expressed inside the
5756                # `GRPC API Configuration` YAML file.
5757                #
5758                #     http:
5759                #       rules:
5760                #         - selector: <proto_package_name>.Messaging.GetMessage
5761                #           get: /v1/messages/{message_id}/{sub.subfield}
5762                #
5763                # This definition enables an automatic, bidrectional mapping of HTTP
5764                # JSON to RPC. Example:
5765                #
5766                # HTTP | RPC
5767                # -----|-----
5768                # `GET /v1/messages/123456/foo`  | `GetMessage(message_id: "123456" sub: SubMessage(subfield: "foo"))`
5769                #
5770                # In general, not only fields but also field paths can be referenced
5771                # from a path pattern. Fields mapped to the path pattern cannot be
5772                # repeated and must have a primitive (non-message) type.
5773                #
5774                # Any fields in the request message which are not bound by the path
5775                # pattern automatically become (optional) HTTP query
5776                # parameters. Assume the following definition of the request message:
5777                #
5778                #
5779                #     service Messaging {
5780                #       rpc GetMessage(GetMessageRequest) returns (Message) {
5781                #         option (google.api.http).get = "/v1/messages/{message_id}";
5782                #       }
5783                #     }
5784                #     message GetMessageRequest {
5785                #       message SubMessage {
5786                #         string subfield = 1;
5787                #       }
5788                #       string message_id = 1; // mapped to the URL
5789                #       int64 revision = 2;    // becomes a parameter
5790                #       SubMessage sub = 3;    // `sub.subfield` becomes a parameter
5791                #     }
5792                #
5793                #
5794                # This enables a HTTP JSON to RPC mapping as below:
5795                #
5796                # HTTP | RPC
5797                # -----|-----
5798                # `GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: "foo"))`
5799                #
5800                # Note that fields which are mapped to HTTP parameters must have a
5801                # primitive type or a repeated primitive type. Message types are not
5802                # allowed. In the case of a repeated type, the parameter can be
5803                # repeated in the URL, as in `...?param=A&param=B`.
5804                #
5805                # For HTTP method kinds which allow a request body, the `body` field
5806                # specifies the mapping. Consider a REST update method on the
5807                # message resource collection:
5808                #
5809                #
5810                #     service Messaging {
5811                #       rpc UpdateMessage(UpdateMessageRequest) returns (Message) {
5812                #         option (google.api.http) = {
5813                #           put: "/v1/messages/{message_id}"
5814                #           body: "message"
5815                #         };
5816                #       }
5817                #     }
5818                #     message UpdateMessageRequest {
5819                #       string message_id = 1; // mapped to the URL
5820                #       Message message = 2;   // mapped to the body
5821                #     }
5822                #
5823                #
5824                # The following HTTP JSON to RPC mapping is enabled, where the
5825                # representation of the JSON in the request body is determined by
5826                # protos JSON encoding:
5827                #
5828                # HTTP | RPC
5829                # -----|-----
5830                # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" message { text: "Hi!" })`
5831                #
5832                # The special name `*` can be used in the body mapping to define that
5833                # every field not bound by the path template should be mapped to the
5834                # request body.  This enables the following alternative definition of
5835                # the update method:
5836                #
5837                #     service Messaging {
5838                #       rpc UpdateMessage(Message) returns (Message) {
5839                #         option (google.api.http) = {
5840                #           put: "/v1/messages/{message_id}"
5841                #           body: "*"
5842                #         };
5843                #       }
5844                #     }
5845                #     message Message {
5846                #       string message_id = 1;
5847                #       string text = 2;
5848                #     }
5849                #
5850                #
5851                # The following HTTP JSON to RPC mapping is enabled:
5852                #
5853                # HTTP | RPC
5854                # -----|-----
5855                # `PUT /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: "123456" text: "Hi!")`
5856                #
5857                # Note that when using `*` in the body mapping, it is not possible to
5858                # have HTTP parameters, as all fields not bound by the path end in
5859                # the body. This makes this option more rarely used in practice of
5860                # defining REST APIs. The common usage of `*` is in custom methods
5861                # which don't use the URL at all for transferring data.
5862                #
5863                # It is possible to define multiple HTTP methods for one RPC by using
5864                # the `additional_bindings` option. Example:
5865                #
5866                #     service Messaging {
5867                #       rpc GetMessage(GetMessageRequest) returns (Message) {
5868                #         option (google.api.http) = {
5869                #           get: "/v1/messages/{message_id}"
5870                #           additional_bindings {
5871                #             get: "/v1/users/{user_id}/messages/{message_id}"
5872                #           }
5873                #         };
5874                #       }
5875                #     }
5876                #     message GetMessageRequest {
5877                #       string message_id = 1;
5878                #       string user_id = 2;
5879                #     }
5880                #
5881                #
5882                # This enables the following two alternative HTTP JSON to RPC
5883                # mappings:
5884                #
5885                # HTTP | RPC
5886                # -----|-----
5887                # `GET /v1/messages/123456` | `GetMessage(message_id: "123456")`
5888                # `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: "123456")`
5889                #
5890                # # Rules for HTTP mapping
5891                #
5892                # The rules for mapping HTTP path, query parameters, and body fields
5893                # to the request message are as follows:
5894                #
5895                # 1. The `body` field specifies either `*` or a field path, or is
5896                #    omitted. If omitted, it assumes there is no HTTP body.
5897                # 2. Leaf fields (recursive expansion of nested messages in the
5898                #    request) can be classified into three types:
5899                #     (a) Matched in the URL template.
5900                #     (b) Covered by body (if body is `*`, everything except (a) fields;
5901                #         else everything under the body field)
5902                #     (c) All other fields.
5903                # 3. URL query parameters found in the HTTP request are mapped to (c) fields.
5904                # 4. Any body sent with an HTTP request can contain only (b) fields.
5905                #
5906                # The syntax of the path template is as follows:
5907                #
5908                #     Template = "/" Segments [ Verb ] ;
5909                #     Segments = Segment { "/" Segment } ;
5910                #     Segment  = "*" | "**" | LITERAL | Variable ;
5911                #     Variable = "{" FieldPath [ "=" Segments ] "}" ;
5912                #     FieldPath = IDENT { "." IDENT } ;
5913                #     Verb     = ":" LITERAL ;
5914                #
5915                # The syntax `*` matches a single path segment. It follows the semantics of
5916                # [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String
5917                # Expansion.
5918                #
5919                # The syntax `**` matches zero or more path segments. It follows the semantics
5920                # of [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved
5921                # Expansion. NOTE: it must be the last segment in the path except the Verb.
5922                #
5923                # The syntax `LITERAL` matches literal text in the URL path.
5924                #
5925                # The syntax `Variable` matches the entire path as specified by its template;
5926                # this nested template must not contain further variables. If a variable
5927                # matches a single path segment, its template may be omitted, e.g. `{var}`
5928                # is equivalent to `{var=*}`.
5929                #
5930                # NOTE: the field paths in variables and in the `body` must not refer to
5931                # repeated fields or map fields.
5932                #
5933                # Use CustomHttpPattern to specify any HTTP method that is not included in the
5934                # `pattern` field, such as HEAD, or "*" to leave the HTTP method unspecified for
5935                # a given URL path rule. The wild-card rule is useful for services that provide
5936                # content to Web (HTML) clients.
5937              "body": "A String", # The name of the request field whose value is mapped to the HTTP body, or
5938                  # `*` for mapping all fields not captured by the path pattern to the HTTP
5939                  # body. NOTE: the referred field must not be a repeated field and must be
5940                  # present at the top-level of request message type.
5941              "get": "A String", # Used for listing and getting information about resources.
5942              "restCollection": "A String", # Optional. The REST collection name is by default derived from the URL
5943                  # pattern. If specified, this field overrides the default collection name.
5944                  # Example:
5945                  #
5946                  #     rpc AddressesAggregatedList(AddressesAggregatedListRequest)
5947                  #         returns (AddressesAggregatedListResponse) {
5948                  #       option (google.api.http) = {
5949                  #         get: "/v1/projects/{project_id}/aggregated/addresses"
5950                  #         rest_collection: "projects.addresses"
5951                  #       };
5952                  #     }
5953                  #
5954                  # This method has the automatically derived collection name
5955                  # "projects.aggregated". Because, semantically, this rpc is actually an
5956                  # operation on the "projects.addresses" collection, the `rest_collection`
5957                  # field is configured to override the derived collection name.
5958              "additionalBindings": [ # Additional HTTP bindings for the selector. Nested bindings must
5959                  # not contain an `additional_bindings` field themselves (that is,
5960                  # the nesting may only be one level deep).
5961                # Object with schema name: HttpRule
5962              ],
5963              "mediaUpload": { # Defines the Media configuration for a service in case of an upload. # Use this only for Scotty Requests. Do not use this for media support using
5964                  # Bytestream, add instead
5965                  # [][google.bytestream.RestByteStream] as an API to your
5966                  # configuration for Bytestream methods.
5967                  # Use this only for Scotty Requests. Do not use this for media support using
5968                  # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
5969                  # your configuration for Bytestream methods.
5970                "progressNotification": True or False, # Whether to receive a notification for progress changes of media upload.
5971                "startNotification": True or False, # Whether to receive a notification on the start of media upload.
5972                "mimeTypes": [ # An array of mimetype patterns. Esf will only accept uploads that match one
5973                    # of the given patterns.
5974                  "A String",
5975                ],
5976                "completeNotification": True or False, # A boolean that determines whether a notification for the completion of an
5977                    # upload should be sent to the backend. These notifications will not be seen
5978                    # by the client and will not consume quota.
5979                "enabled": True or False, # Whether upload is enabled.
5980                "uploadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
5981                    #
5982                    # Specify name of the upload service if one is used for upload.
5983                "maxSize": "A String", # Optional maximum acceptable size for an upload.
5984                    # The size is specified in bytes.
5985                "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
5986              },
5987              "selector": "A String", # Selects methods to which this rule applies.
5988                  #
5989                  # Refer to selector for syntax details.
5990              "responseBody": "A String", # The name of the response field whose value is mapped to the HTTP body of
5991                  # response. Other response fields are ignored. This field is optional. When
5992                  # not set, the response message will be used as HTTP body of response.
5993                  # NOTE: the referred field must be not a repeated field and must be present
5994                  # at the top-level of response message type.
5995              "restMethodName": "A String", # Optional. The rest method name is by default derived from the URL
5996                  # pattern. If specified, this field overrides the default method name.
5997                  # Example:
5998                  #
5999                  #     rpc CreateResource(CreateResourceRequest)
6000                  #         returns (CreateResourceResponse) {
6001                  #       option (google.api.http) = {
6002                  #         post: "/v1/resources",
6003                  #         body: "resource",
6004                  #         rest_method_name: "insert"
6005                  #       };
6006                  #     }
6007                  #
6008                  # This method has the automatically derived rest method name "create", but
6009                  #  for backwards compatability with apiary, it is specified as insert.
6010              "mediaDownload": { # Defines the Media configuration for a service in case of a download. # Use this only for Scotty Requests. Do not use this for bytestream methods.
6011                  # For media support, add instead [][google.bytestream.RestByteStream] as an
6012                  # API to your configuration.
6013                  # Use this only for Scotty Requests. Do not use this for media support using
6014                  # Bytestream, add instead [][google.bytestream.RestByteStream] as an API to
6015                  # your configuration for Bytestream methods.
6016                "useDirectDownload": True or False, # A boolean that determines if direct download from ESF should be used for
6017                    # download of this media.
6018                "enabled": True or False, # Whether download is enabled.
6019                "completeNotification": True or False, # A boolean that determines whether a notification for the completion of a
6020                    # download should be sent to the backend.
6021                "maxDirectDownloadSize": "A String", # Optional maximum acceptable size for direct download.
6022                    # The size is specified in bytes.
6023                "dropzone": "A String", # Name of the Scotty dropzone to use for the current API.
6024                "downloadService": "A String", # DO NOT USE FIELDS BELOW THIS LINE UNTIL THIS WARNING IS REMOVED.
6025                    #
6026                    # Specify name of the download service if one is used for download.
6027              },
6028              "put": "A String", # Used for updating a resource.
6029              "patch": "A String", # Used for updating a resource.
6030              "post": "A String", # Used for creating a resource.
6031              "custom": { # A custom pattern is used for defining custom HTTP verb. # Custom pattern is used for defining custom verbs.
6032                "path": "A String", # The path matched by this custom verb.
6033                "kind": "A String", # The name of this custom HTTP verb.
6034              },
6035              "delete": "A String", # Used for deleting a resource.
6036            },
6037          ],
6038          "fullyDecodeReservedExpansion": True or False, # When set to true, URL path parmeters will be fully URI-decoded except in
6039              # cases of single segment matches in reserved expansion, where "%2F" will be
6040              # left encoded.
6041              #
6042              # The default behavior is to not decode RFC 6570 reserved characters in multi
6043              # segment matches.
6044        },
6045        "apis": [ # A list of API interfaces exported by this service. Only the `name` field
6046            # of the google.protobuf.Api needs to be provided by the configuration
6047            # author, as the remaining fields will be derived from the IDL during the
6048            # normalization process. It is an error to specify an API interface here
6049            # which cannot be resolved against the associated IDL files.
6050          { # Api is a light-weight descriptor for a protocol buffer service.
6051            "name": "A String", # The fully qualified name of this api, including package name
6052                # followed by the api's simple name.
6053            "sourceContext": { # `SourceContext` represents information about the source of a # Source context for the protocol buffer service represented by this
6054                # message.
6055                # protobuf element, like the file in which it is defined.
6056              "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
6057                  # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
6058            },
6059            "mixins": [ # Included APIs. See Mixin.
6060              { # Declares an API to be included in this API. The including API must
6061                  # redeclare all the methods from the included API, but documentation
6062                  # and options are inherited as follows:
6063                  #
6064                  # - If after comment and whitespace stripping, the documentation
6065                  #   string of the redeclared method is empty, it will be inherited
6066                  #   from the original method.
6067                  #
6068                  # - Each annotation belonging to the service config (http,
6069                  #   visibility) which is not set in the redeclared method will be
6070                  #   inherited.
6071                  #
6072                  # - If an http annotation is inherited, the path pattern will be
6073                  #   modified as follows. Any version prefix will be replaced by the
6074                  #   version of the including API plus the root path if specified.
6075                  #
6076                  # Example of a simple mixin:
6077                  #
6078                  #     package google.acl.v1;
6079                  #     service AccessControl {
6080                  #       // Get the underlying ACL object.
6081                  #       rpc GetAcl(GetAclRequest) returns (Acl) {
6082                  #         option (google.api.http).get = "/v1/{resource=**}:getAcl";
6083                  #       }
6084                  #     }
6085                  #
6086                  #     package google.storage.v2;
6087                  #     service Storage {
6088                  #       //       rpc GetAcl(GetAclRequest) returns (Acl);
6089                  #
6090                  #       // Get a data record.
6091                  #       rpc GetData(GetDataRequest) returns (Data) {
6092                  #         option (google.api.http).get = "/v2/{resource=**}";
6093                  #       }
6094                  #     }
6095                  #
6096                  # Example of a mixin configuration:
6097                  #
6098                  #     apis:
6099                  #     - name: google.storage.v2.Storage
6100                  #       mixins:
6101                  #       - name: google.acl.v1.AccessControl
6102                  #
6103                  # The mixin construct implies that all methods in `AccessControl` are
6104                  # also declared with same name and request/response types in
6105                  # `Storage`. A documentation generator or annotation processor will
6106                  # see the effective `Storage.GetAcl` method after inherting
6107                  # documentation and annotations as follows:
6108                  #
6109                  #     service Storage {
6110                  #       // Get the underlying ACL object.
6111                  #       rpc GetAcl(GetAclRequest) returns (Acl) {
6112                  #         option (google.api.http).get = "/v2/{resource=**}:getAcl";
6113                  #       }
6114                  #       ...
6115                  #     }
6116                  #
6117                  # Note how the version in the path pattern changed from `v1` to `v2`.
6118                  #
6119                  # If the `root` field in the mixin is specified, it should be a
6120                  # relative path under which inherited HTTP paths are placed. Example:
6121                  #
6122                  #     apis:
6123                  #     - name: google.storage.v2.Storage
6124                  #       mixins:
6125                  #       - name: google.acl.v1.AccessControl
6126                  #         root: acls
6127                  #
6128                  # This implies the following inherited HTTP annotation:
6129                  #
6130                  #     service Storage {
6131                  #       // Get the underlying ACL object.
6132                  #       rpc GetAcl(GetAclRequest) returns (Acl) {
6133                  #         option (google.api.http).get = "/v2/acls/{resource=**}:getAcl";
6134                  #       }
6135                  #       ...
6136                  #     }
6137                "root": "A String", # If non-empty specifies a path under which inherited HTTP paths
6138                    # are rooted.
6139                "name": "A String", # The fully qualified name of the API which is included.
6140              },
6141            ],
6142            "syntax": "A String", # The source syntax of the service.
6143            "version": "A String", # A version string for this api. If specified, must have the form
6144                # `major-version.minor-version`, as in `1.10`. If the minor version
6145                # is omitted, it defaults to zero. If the entire version field is
6146                # empty, the major version is derived from the package name, as
6147                # outlined below. If the field is not empty, the version in the
6148                # package name will be verified to be consistent with what is
6149                # provided here.
6150                #
6151                # The versioning schema uses [semantic
6152                # versioning](http://semver.org) where the major version number
6153                # indicates a breaking change and the minor version an additive,
6154                # non-breaking change. Both version numbers are signals to users
6155                # what to expect from different versions, and should be carefully
6156                # chosen based on the product plan.
6157                #
6158                # The major version is also reflected in the package name of the
6159                # API, which must end in `v<major-version>`, as in
6160                # `google.feature.v1`. For major versions 0 and 1, the suffix can
6161                # be omitted. Zero major versions must only be used for
6162                # experimental, none-GA apis.
6163            "options": [ # Any metadata attached to the API.
6164              { # A protocol buffer option, which can be attached to a message, field,
6165                  # enumeration, etc.
6166                "name": "A String", # The option's name. For protobuf built-in options (options defined in
6167                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
6168                    # For custom options, it should be the fully-qualified name. For example,
6169                    # `"google.api.http"`.
6170                "value": { # The option's value packed in an Any message. If the value is a primitive,
6171                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6172                    # should be used. If the value is an enum, it should be stored as an int32
6173                    # value using the google.protobuf.Int32Value type.
6174                  "a_key": "", # Properties of the object. Contains field @type with type URL.
6175                },
6176              },
6177            ],
6178            "methods": [ # The methods of this api, in unspecified order.
6179              { # Method represents a method of an api.
6180                "name": "A String", # The simple name of this method.
6181                "requestStreaming": True or False, # If true, the request is streamed.
6182                "responseTypeUrl": "A String", # The URL of the output message type.
6183                "requestTypeUrl": "A String", # A URL of the input message type.
6184                "responseStreaming": True or False, # If true, the response is streamed.
6185                "syntax": "A String", # The source syntax of this method.
6186                "options": [ # Any metadata attached to the method.
6187                  { # A protocol buffer option, which can be attached to a message, field,
6188                      # enumeration, etc.
6189                    "name": "A String", # The option's name. For protobuf built-in options (options defined in
6190                        # descriptor.proto), this is the short name. For example, `"map_entry"`.
6191                        # For custom options, it should be the fully-qualified name. For example,
6192                        # `"google.api.http"`.
6193                    "value": { # The option's value packed in an Any message. If the value is a primitive,
6194                        # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6195                        # should be used. If the value is an enum, it should be stored as an int32
6196                        # value using the google.protobuf.Int32Value type.
6197                      "a_key": "", # Properties of the object. Contains field @type with type URL.
6198                    },
6199                  },
6200                ],
6201              },
6202            ],
6203          },
6204        ],
6205        "customError": { # Customize service error responses.  For example, list any service # Custom error configuration.
6206            # specific protobuf types that can appear in error detail lists of
6207            # error responses.
6208            #
6209            # Example:
6210            #
6211            #     custom_error:
6212            #       types:
6213            #       - google.foo.v1.CustomError
6214            #       - google.foo.v1.AnotherError
6215          "rules": [ # The list of custom error rules that apply to individual API messages.
6216              #
6217              # **NOTE:** All service configuration rules follow "last one wins" order.
6218            { # A custom error rule.
6219              "isErrorType": True or False, # Mark this message as possible payload in error response.  Otherwise,
6220                  # objects of this type will be filtered when they appear in error payload.
6221              "selector": "A String", # Selects messages to which this rule applies.
6222                  #
6223                  # Refer to selector for syntax details.
6224            },
6225          ],
6226          "types": [ # The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.
6227            "A String",
6228          ],
6229        },
6230        "quota": { # Quota configuration helps to achieve fairness and budgeting in service # Quota configuration.
6231            # usage.
6232            #
6233            # The quota configuration works this way:
6234            # - The service configuration defines a set of metrics.
6235            # - For API calls, the quota.metric_rules maps methods to metrics with
6236            #   corresponding costs.
6237            # - The quota.limits defines limits on the metrics, which will be used for
6238            #   quota checks at runtime.
6239            #
6240            # An example quota configuration in yaml format:
6241            #
6242            #    quota:
6243            #
6244            #      - name: apiWriteQpsPerProject
6245            #        metric: library.googleapis.com/write_calls
6246            #        unit: "1/min/{project}"  # rate limit for consumer projects
6247            #        values:
6248            #          STANDARD: 10000
6249            #
6250            #
6251            #      # The metric rules bind all methods to the read_calls metric,
6252            #      # except for the UpdateBook and DeleteBook methods. These two methods
6253            #      # are mapped to the write_calls metric, with the UpdateBook method
6254            #      # consuming at twice rate as the DeleteBook method.
6255            #      metric_rules:
6256            #      - selector: "*"
6257            #        metric_costs:
6258            #          library.googleapis.com/read_calls: 1
6259            #      - selector: google.example.library.v1.LibraryService.UpdateBook
6260            #        metric_costs:
6261            #          library.googleapis.com/write_calls: 2
6262            #      - selector: google.example.library.v1.LibraryService.DeleteBook
6263            #        metric_costs:
6264            #          library.googleapis.com/write_calls: 1
6265            #
6266            #  Corresponding Metric definition:
6267            #
6268            #      metrics:
6269            #      - name: library.googleapis.com/read_calls
6270            #        display_name: Read requests
6271            #        metric_kind: DELTA
6272            #        value_type: INT64
6273            #
6274            #      - name: library.googleapis.com/write_calls
6275            #        display_name: Write requests
6276            #        metric_kind: DELTA
6277            #        value_type: INT64
6278          "metricRules": [ # List of `MetricRule` definitions, each one mapping a selected method to one
6279              # or more metrics.
6280            { # Bind API methods to metrics. Binding a method to a metric causes that
6281                # metric's configured quota behaviors to apply to the method call.
6282              "metricCosts": { # Metrics to update when the selected methods are called, and the associated
6283                  # cost applied to each metric.
6284                  #
6285                  # The key of the map is the metric name, and the values are the amount
6286                  # increased for the metric against which the quota limits are defined.
6287                  # The value must not be negative.
6288                "a_key": "A String",
6289              },
6290              "selector": "A String", # Selects the methods to which this rule applies.
6291                  #
6292                  # Refer to selector for syntax details.
6293            },
6294          ],
6295          "limits": [ # List of `QuotaLimit` definitions for the service.
6296            { # `QuotaLimit` defines a specific limit that applies over a specified duration
6297                # for a limit type. There can be at most one limit for a duration and limit
6298                # type combination defined within a `QuotaGroup`.
6299              "displayName": "A String", # User-visible display name for this limit.
6300                  # Optional. If not set, the UI will provide a default display name based on
6301                  # the quota configuration. This field can be used to override the default
6302                  # display name generated from the configuration.
6303              "description": "A String", # Optional. User-visible, extended description for this quota limit.
6304                  # Should be used only when more context is needed to understand this limit
6305                  # than provided by the limit's display name (see: `display_name`).
6306              "defaultLimit": "A String", # Default number of tokens that can be consumed during the specified
6307                  # duration. This is the number of tokens assigned when a client
6308                  # application developer activates the service for his/her project.
6309                  #
6310                  # Specifying a value of 0 will block all requests. This can be used if you
6311                  # are provisioning quota to selected consumers and blocking others.
6312                  # Similarly, a value of -1 will indicate an unlimited quota. No other
6313                  # negative values are allowed.
6314                  #
6315                  # Used by group-based quotas only.
6316              "metric": "A String", # The name of the metric this quota limit applies to. The quota limits with
6317                  # the same metric will be checked together during runtime. The metric must be
6318                  # defined within the service config.
6319                  #
6320                  # Used by metric-based quotas only.
6321              "values": { # Tiered limit values, currently only STANDARD is supported.
6322                "a_key": "A String",
6323              },
6324              "maxLimit": "A String", # Maximum number of tokens that can be consumed during the specified
6325                  # duration. Client application developers can override the default limit up
6326                  # to this maximum. If specified, this value cannot be set to a value less
6327                  # than the default limit. If not specified, it is set to the default limit.
6328                  #
6329                  # To allow clients to apply overrides with no upper bound, set this to -1,
6330                  # indicating unlimited maximum quota.
6331                  #
6332                  # Used by group-based quotas only.
6333              "duration": "A String", # Duration of this limit in textual notation. Example: "100s", "24h", "1d".
6334                  # For duration longer than a day, only multiple of days is supported. We
6335                  # support only "100s" and "1d" for now. Additional support will be added in
6336                  # the future. "0" indicates indefinite duration.
6337                  #
6338                  # Used by group-based quotas only.
6339              "freeTier": "A String", # Free tier value displayed in the Developers Console for this limit.
6340                  # The free tier is the number of tokens that will be subtracted from the
6341                  # billed amount when billing is enabled.
6342                  # This field can only be set on a limit with duration "1d", in a billable
6343                  # group; it is invalid on any other limit. If this field is not set, it
6344                  # defaults to 0, indicating that there is no free tier for this service.
6345                  #
6346                  # Used by group-based quotas only.
6347              "unit": "A String", # Specify the unit of the quota limit. It uses the same syntax as
6348                  # Metric.unit. The supported unit kinds are determined by the quota
6349                  # backend system.
6350                  #
6351                  # The [Google Service Control](https://cloud.google.com/service-control)
6352                  # supports the following unit components:
6353                  # * One of the time intevals:
6354                  #   * "/min"  for quota every minute.
6355                  #   * "/d"  for quota every 24 hours, starting 00:00 US Pacific Time.
6356                  #   * Otherwise the quota won't be reset by time, such as storage limit.
6357                  # * One and only one of the granted containers:
6358                  #   * "/{project}" quota for a project
6359                  #
6360                  # Here are some examples:
6361                  # * "1/min/{project}" for quota per minute per project.
6362                  #
6363                  # Note: the order of unit components is insignificant.
6364                  # The "1" at the beginning is required to follow the metric unit syntax.
6365                  #
6366                  # Used by metric-based quotas only.
6367              "name": "A String", # Name of the quota limit. The name is used to refer to the limit when
6368                  # overriding the default limit on per-consumer basis.
6369                  #
6370                  # For metric-based quota limits, the name must be provided, and it must be
6371                  # unique within the service. The name can only include alphanumeric
6372                  # characters as well as '-'.
6373                  #
6374                  # The maximum length of the limit name is 64 characters.
6375                  #
6376                  # The name of a limit is used as a unique identifier for this limit.
6377                  # Therefore, once a limit has been put into use, its name should be
6378                  # immutable. You can use the display_name field to provide a user-friendly
6379                  # name for the limit. The display name can be evolved over time without
6380                  # affecting the identity of the limit.
6381            },
6382          ],
6383        },
6384        "visibility": { # `Visibility` defines restrictions for the visibility of service # API visibility configuration.
6385            # elements.  Restrictions are specified using visibility labels
6386            # (e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.
6387            #
6388            # Users and projects can have access to more than one visibility label. The
6389            # effective visibility for multiple labels is the union of each label's
6390            # elements, plus any unrestricted elements.
6391            #
6392            # If an element and its parents have no restrictions, visibility is
6393            # unconditionally granted.
6394            #
6395            # Example:
6396            #
6397            #     visibility:
6398            #       rules:
6399            #       - selector: google.calendar.Calendar.EnhancedSearch
6400            #         restriction: TRUSTED_TESTER
6401            #       - selector: google.calendar.Calendar.Delegate
6402            #         restriction: GOOGLE_INTERNAL
6403            #
6404            # Here, all methods are publicly visible except for the restricted methods
6405            # EnhancedSearch and Delegate.
6406          "rules": [ # A list of visibility rules that apply to individual API elements.
6407              #
6408              # **NOTE:** All service configuration rules follow "last one wins" order.
6409            { # A visibility rule provides visibility configuration for an individual API
6410                # element.
6411              "restriction": "A String", # A comma-separated list of visibility labels that apply to the `selector`.
6412                  # Any of the listed labels can be used to grant the visibility.
6413                  #
6414                  # If a rule has multiple labels, removing one of the labels but not all of
6415                  # them can break clients.
6416                  #
6417                  # Example:
6418                  #
6419                  #     visibility:
6420                  #       rules:
6421                  #       - selector: google.calendar.Calendar.EnhancedSearch
6422                  #         restriction: GOOGLE_INTERNAL, TRUSTED_TESTER
6423                  #
6424                  # Removing GOOGLE_INTERNAL from this restriction will break clients that
6425                  # rely on this method and only had access to it through GOOGLE_INTERNAL.
6426              "selector": "A String", # Selects methods, messages, fields, enums, etc. to which this rule applies.
6427                  #
6428                  # Refer to selector for syntax details.
6429            },
6430          ],
6431        },
6432        "metrics": [ # Defines the metrics used by this service.
6433          { # Defines a metric type and its schema. Once a metric descriptor is created,
6434              # deleting or altering it stops data collection and makes the metric type's
6435              # existing data unusable.
6436            "displayName": "A String", # A concise name for the metric, which can be displayed in user interfaces.
6437                # Use sentence case without an ending period, for example "Request count".
6438            "description": "A String", # A detailed description of the metric, which can be used in documentation.
6439            "metricKind": "A String", # Whether the metric records instantaneous values, changes to a value, etc.
6440                # Some combinations of `metric_kind` and `value_type` might not be supported.
6441            "valueType": "A String", # Whether the measurement is an integer, a floating-point number, etc.
6442                # Some combinations of `metric_kind` and `value_type` might not be supported.
6443            "labels": [ # The set of labels that can be used to describe a specific
6444                # instance of this metric type. For example, the
6445                # `appengine.googleapis.com/http/server/response_latencies` metric
6446                # type has a label for the HTTP response code, `response_code`, so
6447                # you can look at latencies for successful responses or just
6448                # for responses that failed.
6449              { # A description of a label.
6450                "valueType": "A String", # The type of data that can be assigned to the label.
6451                "description": "A String", # A human-readable description for the label.
6452                "key": "A String", # The label key.
6453              },
6454            ],
6455            "type": "A String", # The metric type, including its DNS name prefix. The type is not
6456                # URL-encoded.  All user-defined custom metric types have the DNS name
6457                # `custom.googleapis.com`.  Metric types should use a natural hierarchical
6458                # grouping. For example:
6459                #
6460                #     "custom.googleapis.com/invoice/paid/amount"
6461                #     "appengine.googleapis.com/http/server/response_latencies"
6462            "unit": "A String", # The unit in which the metric value is reported. It is only applicable
6463                # if the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The
6464                # supported units are a subset of [The Unified Code for Units of
6465                # Measure](http://unitsofmeasure.org/ucum.html) standard:
6466                #
6467                # **Basic units (UNIT)**
6468                #
6469                # * `bit`   bit
6470                # * `By`    byte
6471                # * `s`     second
6472                # * `min`   minute
6473                # * `h`     hour
6474                # * `d`     day
6475                #
6476                # **Prefixes (PREFIX)**
6477                #
6478                # * `k`     kilo    (10**3)
6479                # * `M`     mega    (10**6)
6480                # * `G`     giga    (10**9)
6481                # * `T`     tera    (10**12)
6482                # * `P`     peta    (10**15)
6483                # * `E`     exa     (10**18)
6484                # * `Z`     zetta   (10**21)
6485                # * `Y`     yotta   (10**24)
6486                # * `m`     milli   (10**-3)
6487                # * `u`     micro   (10**-6)
6488                # * `n`     nano    (10**-9)
6489                # * `p`     pico    (10**-12)
6490                # * `f`     femto   (10**-15)
6491                # * `a`     atto    (10**-18)
6492                # * `z`     zepto   (10**-21)
6493                # * `y`     yocto   (10**-24)
6494                # * `Ki`    kibi    (2**10)
6495                # * `Mi`    mebi    (2**20)
6496                # * `Gi`    gibi    (2**30)
6497                # * `Ti`    tebi    (2**40)
6498                #
6499                # **Grammar**
6500                #
6501                # The grammar includes the dimensionless unit `1`, such as `1/s`.
6502                #
6503                # The grammar also includes these connectors:
6504                #
6505                # * `/`    division (as an infix operator, e.g. `1/s`).
6506                # * `.`    multiplication (as an infix operator, e.g. `GBy.d`)
6507                #
6508                # The grammar for a unit is as follows:
6509                #
6510                #     Expression = Component { "." Component } { "/" Component } ;
6511                #
6512                #     Component = [ PREFIX ] UNIT [ Annotation ]
6513                #               | Annotation
6514                #               | "1"
6515                #               ;
6516                #
6517                #     Annotation = "{" NAME "}" ;
6518                #
6519                # Notes:
6520                #
6521                # * `Annotation` is just a comment if it follows a `UNIT` and is
6522                #    equivalent to `1` if it is used alone. For examples,
6523                #    `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.
6524                # * `NAME` is a sequence of non-blank printable ASCII characters not
6525                #    containing '{' or '}'.
6526            "name": "A String", # The resource name of the metric descriptor. Depending on the
6527                # implementation, the name typically includes: (1) the parent resource name
6528                # that defines the scope of the metric type or of its data; and (2) the
6529                # metric's URL-encoded type, which also appears in the `type` field of this
6530                # descriptor. For example, following is the resource name of a custom
6531                # metric within the GCP project `my-project-id`:
6532                #
6533                #     "projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount"
6534          },
6535        ],
6536        "enums": [ # A list of all enum types included in this API service.  Enums
6537            # referenced directly or indirectly by the `apis` are automatically
6538            # included.  Enums which are not referenced but shall be included
6539            # should be listed here by name. Example:
6540            #
6541            #     enums:
6542            #     - name: google.someapi.v1.SomeEnum
6543          { # Enum type definition.
6544            "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
6545                # protobuf element, like the file in which it is defined.
6546              "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
6547                  # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
6548            },
6549            "enumvalue": [ # Enum value definitions.
6550              { # Enum value definition.
6551                "options": [ # Protocol buffer options.
6552                  { # A protocol buffer option, which can be attached to a message, field,
6553                      # enumeration, etc.
6554                    "name": "A String", # The option's name. For protobuf built-in options (options defined in
6555                        # descriptor.proto), this is the short name. For example, `"map_entry"`.
6556                        # For custom options, it should be the fully-qualified name. For example,
6557                        # `"google.api.http"`.
6558                    "value": { # The option's value packed in an Any message. If the value is a primitive,
6559                        # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6560                        # should be used. If the value is an enum, it should be stored as an int32
6561                        # value using the google.protobuf.Int32Value type.
6562                      "a_key": "", # Properties of the object. Contains field @type with type URL.
6563                    },
6564                  },
6565                ],
6566                "name": "A String", # Enum value name.
6567                "number": 42, # Enum value number.
6568              },
6569            ],
6570            "options": [ # Protocol buffer options.
6571              { # A protocol buffer option, which can be attached to a message, field,
6572                  # enumeration, etc.
6573                "name": "A String", # The option's name. For protobuf built-in options (options defined in
6574                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
6575                    # For custom options, it should be the fully-qualified name. For example,
6576                    # `"google.api.http"`.
6577                "value": { # The option's value packed in an Any message. If the value is a primitive,
6578                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6579                    # should be used. If the value is an enum, it should be stored as an int32
6580                    # value using the google.protobuf.Int32Value type.
6581                  "a_key": "", # Properties of the object. Contains field @type with type URL.
6582                },
6583              },
6584            ],
6585            "name": "A String", # Enum type name.
6586            "syntax": "A String", # The source syntax.
6587          },
6588        ],
6589        "types": [ # A list of all proto message types included in this API service.
6590            # Types referenced directly or indirectly by the `apis` are
6591            # automatically included.  Messages which are not referenced but
6592            # shall be included, such as types used by the `google.protobuf.Any` type,
6593            # should be listed here by name. Example:
6594            #
6595            #     types:
6596            #     - name: google.protobuf.Int32
6597          { # A protocol buffer message type.
6598            "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
6599              "A String",
6600            ],
6601            "name": "A String", # The fully qualified message name.
6602            "fields": [ # The list of fields.
6603              { # A single field of a message type.
6604                "kind": "A String", # The field type.
6605                "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
6606                    # types. The first type has index 1; zero means the type is not in the list.
6607                "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
6608                    # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
6609                "name": "A String", # The field name.
6610                "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
6611                "jsonName": "A String", # The field JSON name.
6612                "number": 42, # The field number.
6613                "cardinality": "A String", # The field cardinality.
6614                "options": [ # The protocol buffer options.
6615                  { # A protocol buffer option, which can be attached to a message, field,
6616                      # enumeration, etc.
6617                    "name": "A String", # The option's name. For protobuf built-in options (options defined in
6618                        # descriptor.proto), this is the short name. For example, `"map_entry"`.
6619                        # For custom options, it should be the fully-qualified name. For example,
6620                        # `"google.api.http"`.
6621                    "value": { # The option's value packed in an Any message. If the value is a primitive,
6622                        # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6623                        # should be used. If the value is an enum, it should be stored as an int32
6624                        # value using the google.protobuf.Int32Value type.
6625                      "a_key": "", # Properties of the object. Contains field @type with type URL.
6626                    },
6627                  },
6628                ],
6629                "packed": True or False, # Whether to use alternative packed wire representation.
6630              },
6631            ],
6632            "syntax": "A String", # The source syntax.
6633            "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
6634                # protobuf element, like the file in which it is defined.
6635              "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
6636                  # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
6637            },
6638            "options": [ # The protocol buffer options.
6639              { # A protocol buffer option, which can be attached to a message, field,
6640                  # enumeration, etc.
6641                "name": "A String", # The option's name. For protobuf built-in options (options defined in
6642                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
6643                    # For custom options, it should be the fully-qualified name. For example,
6644                    # `"google.api.http"`.
6645                "value": { # The option's value packed in an Any message. If the value is a primitive,
6646                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6647                    # should be used. If the value is an enum, it should be stored as an int32
6648                    # value using the google.protobuf.Int32Value type.
6649                  "a_key": "", # Properties of the object. Contains field @type with type URL.
6650                },
6651              },
6652            ],
6653          },
6654        ],
6655        "logging": { # Logging configuration of the service. # Logging configuration.
6656            #
6657            # The following example shows how to configure logs to be sent to the
6658            # producer and consumer projects. In the example, the `activity_history`
6659            # log is sent to both the producer and consumer projects, whereas the
6660            # `purchase_history` log is only sent to the producer project.
6661            #
6662            #     monitored_resources:
6663            #     - type: library.googleapis.com/branch
6664            #       labels:
6665            #       - key: /city
6666            #         description: The city where the library branch is located in.
6667            #       - key: /name
6668            #         description: The name of the branch.
6669            #     logs:
6670            #     - name: activity_history
6671            #       labels:
6672            #       - key: /customer_id
6673            #     - name: purchase_history
6674            #     logging:
6675            #       producer_destinations:
6676            #       - monitored_resource: library.googleapis.com/branch
6677            #         logs:
6678            #         - activity_history
6679            #         - purchase_history
6680            #       consumer_destinations:
6681            #       - monitored_resource: library.googleapis.com/branch
6682            #         logs:
6683            #         - activity_history
6684          "producerDestinations": [ # Logging configurations for sending logs to the producer project.
6685              # There can be multiple producer destinations, each one must have a
6686              # different monitored resource type. A log can be used in at most
6687              # one producer destination.
6688            { # Configuration of a specific logging destination (the producer project
6689                # or the consumer project).
6690              "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
6691                  # Service.monitored_resources section.
6692              "logs": [ # Names of the logs to be sent to this destination. Each name must
6693                  # be defined in the Service.logs section. If the log name is
6694                  # not a domain scoped name, it will be automatically prefixed with
6695                  # the service name followed by "/".
6696                "A String",
6697              ],
6698            },
6699          ],
6700          "consumerDestinations": [ # Logging configurations for sending logs to the consumer project.
6701              # There can be multiple consumer destinations, each one must have a
6702              # different monitored resource type. A log can be used in at most
6703              # one consumer destination.
6704            { # Configuration of a specific logging destination (the producer project
6705                # or the consumer project).
6706              "monitoredResource": "A String", # The monitored resource type. The type must be defined in the
6707                  # Service.monitored_resources section.
6708              "logs": [ # Names of the logs to be sent to this destination. Each name must
6709                  # be defined in the Service.logs section. If the log name is
6710                  # not a domain scoped name, it will be automatically prefixed with
6711                  # the service name followed by "/".
6712                "A String",
6713              ],
6714            },
6715          ],
6716        },
6717        "name": "A String", # The DNS address at which this service is available,
6718            # e.g. `calendar.googleapis.com`.
6719        "documentation": { # `Documentation` provides the information for describing a service. # Additional API documentation.
6720            #
6721            # Example:
6722            # <pre><code>documentation:
6723            #   summary: >
6724            #     The Google Calendar API gives access
6725            #     to most calendar features.
6726            #   pages:
6727            #   - name: Overview
6728            #     content: &#40;== include google/foo/overview.md ==&#41;
6729            #   - name: Tutorial
6730            #     content: &#40;== include google/foo/tutorial.md ==&#41;
6731            #     subpages;
6732            #     - name: Java
6733            #       content: &#40;== include google/foo/tutorial_java.md ==&#41;
6734            #   rules:
6735            #   - selector: google.calendar.Calendar.Get
6736            #     description: >
6737            #       ...
6738            #   - selector: google.calendar.Calendar.Put
6739            #     description: >
6740            #       ...
6741            # </code></pre>
6742            # Documentation is provided in markdown syntax. In addition to
6743            # standard markdown features, definition lists, tables and fenced
6744            # code blocks are supported. Section headers can be provided and are
6745            # interpreted relative to the section nesting of the context where
6746            # a documentation fragment is embedded.
6747            #
6748            # Documentation from the IDL is merged with documentation defined
6749            # via the config at normalization time, where documentation provided
6750            # by config rules overrides IDL provided.
6751            #
6752            # A number of constructs specific to the API platform are supported
6753            # in documentation text.
6754            #
6755            # In order to reference a proto element, the following
6756            # notation can be used:
6757            # <pre><code>&#91;fully.qualified.proto.name]&#91;]</code></pre>
6758            # To override the display text used for the link, this can be used:
6759            # <pre><code>&#91;display text]&#91;fully.qualified.proto.name]</code></pre>
6760            # Text can be excluded from doc using the following notation:
6761            # <pre><code>&#40;-- internal comment --&#41;</code></pre>
6762            # Comments can be made conditional using a visibility label. The below
6763            # text will be only rendered if the `BETA` label is available:
6764            # <pre><code>&#40;--BETA: comment for BETA users --&#41;</code></pre>
6765            # A few directives are available in documentation. Note that
6766            # directives must appear on a single line to be properly
6767            # identified. The `include` directive includes a markdown file from
6768            # an external source:
6769            # <pre><code>&#40;== include path/to/file ==&#41;</code></pre>
6770            # The `resource_for` directive marks a message to be the resource of
6771            # a collection in REST view. If it is not specified, tools attempt
6772            # to infer the resource from the operations in a collection:
6773            # <pre><code>&#40;== resource_for v1.shelves.books ==&#41;</code></pre>
6774            # The directive `suppress_warning` does not directly affect documentation
6775            # and is documented together with service config validation.
6776          "rules": [ # A list of documentation rules that apply to individual API elements.
6777              #
6778              # **NOTE:** All service configuration rules follow "last one wins" order.
6779            { # A documentation rule provides information about individual API elements.
6780              "description": "A String", # Description of the selected API(s).
6781              "deprecationDescription": "A String", # Deprecation description of the selected element(s). It can be provided if an
6782                  # element is marked as `deprecated`.
6783              "selector": "A String", # The selector is a comma-separated list of patterns. Each pattern is a
6784                  # qualified name of the element which may end in "*", indicating a wildcard.
6785                  # Wildcards are only allowed at the end and for a whole component of the
6786                  # qualified name, i.e. "foo.*" is ok, but not "foo.b*" or "foo.*.bar". To
6787                  # specify a default for all applicable elements, the whole pattern "*"
6788                  # is used.
6789            },
6790          ],
6791          "documentationRootUrl": "A String", # The URL to the root of documentation.
6792          "overview": "A String", # Declares a single overview page. For example:
6793              # <pre><code>documentation:
6794              #   summary: ...
6795              #   overview: &#40;== include overview.md ==&#41;
6796              # </code></pre>
6797              # This is a shortcut for the following declaration (using pages style):
6798              # <pre><code>documentation:
6799              #   summary: ...
6800              #   pages:
6801              #   - name: Overview
6802              #     content: &#40;== include overview.md ==&#41;
6803              # </code></pre>
6804              # Note: you cannot specify both `overview` field and `pages` field.
6805          "pages": [ # The top level pages for the documentation set.
6806            { # Represents a documentation page. A page can contain subpages to represent
6807                # nested documentation set structure.
6808              "content": "A String", # The Markdown content of the page. You can use <code>&#40;== include {path} ==&#41;</code>
6809                  # to include content from a Markdown file.
6810              "subpages": [ # Subpages of this page. The order of subpages specified here will be
6811                  # honored in the generated docset.
6812                # Object with schema name: Page
6813              ],
6814              "name": "A String", # The name of the page. It will be used as an identity of the page to
6815                  # generate URI of the page, text of the link to this page in navigation,
6816                  # etc. The full page name (start from the root page name to this page
6817                  # concatenated with `.`) can be used as reference to the page in your
6818                  # documentation. For example:
6819                  # <pre><code>pages:
6820                  # - name: Tutorial
6821                  #   content: &#40;== include tutorial.md ==&#41;
6822                  #   subpages:
6823                  #   - name: Java
6824                  #     content: &#40;== include tutorial_java.md ==&#41;
6825                  # </code></pre>
6826                  # You can reference `Java` page using Markdown reference link syntax:
6827                  # `Java`.
6828            },
6829          ],
6830          "summary": "A String", # A short summary of what the service does. Can only be provided by
6831              # plain text.
6832        },
6833        "sourceInfo": { # Source information used to create a Service Config # Output only. The source information for this configuration if available.
6834          "sourceFiles": [ # All files used during config generation.
6835            {
6836              "a_key": "", # Properties of the object. Contains field @type with type URL.
6837            },
6838          ],
6839        },
6840        "systemTypes": [ # A list of all proto message types included in this API service.
6841            # It serves similar purpose as [google.api.Service.types], except that
6842            # these types are not needed by user-defined APIs. Therefore, they will not
6843            # show up in the generated discovery doc. This field should only be used
6844            # to define system APIs in ESF.
6845          { # A protocol buffer message type.
6846            "oneofs": [ # The list of types appearing in `oneof` definitions in this type.
6847              "A String",
6848            ],
6849            "name": "A String", # The fully qualified message name.
6850            "fields": [ # The list of fields.
6851              { # A single field of a message type.
6852                "kind": "A String", # The field type.
6853                "oneofIndex": 42, # The index of the field type in `Type.oneofs`, for message or enumeration
6854                    # types. The first type has index 1; zero means the type is not in the list.
6855                "typeUrl": "A String", # The field type URL, without the scheme, for message or enumeration
6856                    # types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`.
6857                "name": "A String", # The field name.
6858                "defaultValue": "A String", # The string value of the default value of this field. Proto2 syntax only.
6859                "jsonName": "A String", # The field JSON name.
6860                "number": 42, # The field number.
6861                "cardinality": "A String", # The field cardinality.
6862                "options": [ # The protocol buffer options.
6863                  { # A protocol buffer option, which can be attached to a message, field,
6864                      # enumeration, etc.
6865                    "name": "A String", # The option's name. For protobuf built-in options (options defined in
6866                        # descriptor.proto), this is the short name. For example, `"map_entry"`.
6867                        # For custom options, it should be the fully-qualified name. For example,
6868                        # `"google.api.http"`.
6869                    "value": { # The option's value packed in an Any message. If the value is a primitive,
6870                        # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6871                        # should be used. If the value is an enum, it should be stored as an int32
6872                        # value using the google.protobuf.Int32Value type.
6873                      "a_key": "", # Properties of the object. Contains field @type with type URL.
6874                    },
6875                  },
6876                ],
6877                "packed": True or False, # Whether to use alternative packed wire representation.
6878              },
6879            ],
6880            "syntax": "A String", # The source syntax.
6881            "sourceContext": { # `SourceContext` represents information about the source of a # The source context.
6882                # protobuf element, like the file in which it is defined.
6883              "fileName": "A String", # The path-qualified name of the .proto file that contained the associated
6884                  # protobuf element.  For example: `"google/protobuf/source_context.proto"`.
6885            },
6886            "options": [ # The protocol buffer options.
6887              { # A protocol buffer option, which can be attached to a message, field,
6888                  # enumeration, etc.
6889                "name": "A String", # The option's name. For protobuf built-in options (options defined in
6890                    # descriptor.proto), this is the short name. For example, `"map_entry"`.
6891                    # For custom options, it should be the fully-qualified name. For example,
6892                    # `"google.api.http"`.
6893                "value": { # The option's value packed in an Any message. If the value is a primitive,
6894                    # the corresponding wrapper type defined in google/protobuf/wrappers.proto
6895                    # should be used. If the value is an enum, it should be stored as an int32
6896                    # value using the google.protobuf.Int32Value type.
6897                  "a_key": "", # Properties of the object. Contains field @type with type URL.
6898                },
6899              },
6900            ],
6901          },
6902        ],
6903        "context": { # `Context` defines which contexts an API requests. # Context configuration.
6904            #
6905            # Example:
6906            #
6907            #     context:
6908            #       rules:
6909            #       - selector: "*"
6910            #         requested:
6911            #         - google.rpc.context.ProjectContext
6912            #         - google.rpc.context.OriginContext
6913            #
6914            # The above specifies that all methods in the API request
6915            # `google.rpc.context.ProjectContext` and
6916            # `google.rpc.context.OriginContext`.
6917            #
6918            # Available context types are defined in package
6919            # `google.rpc.context`.
6920          "rules": [ # A list of RPC context rules that apply to individual API methods.
6921              #
6922              # **NOTE:** All service configuration rules follow "last one wins" order.
6923            { # A context rule provides information about the context for an individual API
6924                # element.
6925              "provided": [ # A list of full type names of provided contexts.
6926                "A String",
6927              ],
6928              "selector": "A String", # Selects the methods to which this rule applies.
6929                  #
6930                  # Refer to selector for syntax details.
6931              "requested": [ # A list of full type names of requested contexts.
6932                "A String",
6933              ],
6934            },
6935          ],
6936        },
6937        "endpoints": [ # Configuration for network endpoints.  If this is empty, then an endpoint
6938            # with the same name as the service is automatically generated to service all
6939            # defined APIs.
6940          { # `Endpoint` describes a network endpoint that serves a set of APIs.
6941              # A service may expose any number of endpoints, and all endpoints share the
6942              # same service configuration, such as quota configuration and monitoring
6943              # configuration.
6944              #
6945              # Example service configuration:
6946              #
6947              #     name: library-example.googleapis.com
6948              #     endpoints:
6949              #       # Below entry makes 'google.example.library.v1.Library'
6950              #       # API be served from endpoint address library-example.googleapis.com.
6951              #       # It also allows HTTP OPTIONS calls to be passed to the backend, for
6952              #       # it to decide whether the subsequent cross-origin request is
6953              #       # allowed to proceed.
6954              #     - name: library-example.googleapis.com
6955              #       allow_cors: true
6956            "target": "A String", # The specification of an Internet routable address of API frontend that will
6957                # handle requests to this [API Endpoint](https://cloud.google.com/apis/design/glossary).
6958                # It should be either a valid IPv4 address or a fully-qualified domain name.
6959                # For example, "8.8.8.8" or "myservice.appspot.com".
6960            "apis": [ # The list of APIs served by this endpoint.
6961                #
6962                # If no APIs are specified this translates to "all APIs" exported by the
6963                # service, as defined in the top-level service configuration.
6964              "A String",
6965            ],
6966            "allowCors": True or False, # Allowing
6967                # [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka
6968                # cross-domain traffic, would allow the backends served from this endpoint to
6969                # receive and respond to HTTP OPTIONS requests. The response will be used by
6970                # the browser to determine whether the subsequent cross-origin request is
6971                # allowed to proceed.
6972            "name": "A String", # The canonical name of this endpoint.
6973            "features": [ # The list of features enabled on this endpoint.
6974              "A String",
6975            ],
6976            "aliases": [ # DEPRECATED: This field is no longer supported. Instead of using aliases,
6977                # please specify multiple google.api.Endpoint for each of the intented
6978                # alias.
6979                #
6980                # Additional names that this endpoint will be hosted on.
6981              "A String",
6982            ],
6983          },
6984        ],
6985        "experimental": { # Experimental service configuration. These configuration options can # Experimental configuration.
6986            # only be used by whitelisted users.
6987          "authorization": { # Configuration of authorization. # Authorization configuration.
6988              #
6989              # This section determines the authorization provider, if unspecified, then no
6990              # authorization check will be done.
6991              #
6992              # Example:
6993              #
6994              #     experimental:
6995              #       authorization:
6996              #         provider: firebaserules.googleapis.com
6997            "provider": "A String", # The name of the authorization provider, such as
6998                # firebaserules.googleapis.com.
6999          },
7000        },
7001      },
7002    ],
7003  }</pre>
7004</div>
7005
7006<div class="method">
7007    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
7008  <pre>Retrieves the next page of results.
7009
7010Args:
7011  previous_request: The request for the previous page. (required)
7012  previous_response: The response from the request for the previous page. (required)
7013
7014Returns:
7015  A request object that you can call 'execute()' on to request the next
7016  page. Returns None if there are no more items in the collection.
7017    </pre>
7018</div>
7019
7020<div class="method">
7021    <code class="details" id="submit">submit(serviceName, body, x__xgafv=None)</code>
7022  <pre>Creates a new service configuration (version) for a managed service based
7023on
7024user-supplied configuration source files (for example: OpenAPI
7025Specification). This method stores the source configurations as well as the
7026generated service configuration. To rollout the service configuration to
7027other services,
7028please call CreateServiceRollout.
7029
7030Operation<response: SubmitConfigSourceResponse>
7031
7032Args:
7033  serviceName: string, The name of the service.  See the [overview](/service-management/overview)
7034for naming requirements.  For example: `example.googleapis.com`. (required)
7035  body: object, The request body. (required)
7036    The object takes the form of:
7037
7038{ # Request message for SubmitConfigSource method.
7039    "validateOnly": True or False, # Optional. If set, this will result in the generation of a
7040        # `google.api.Service` configuration based on the `ConfigSource` provided,
7041        # but the generated config and the sources will NOT be persisted.
7042    "configSource": { # Represents a source file which is used to generate the service configuration # The source configuration for the service.
7043        # defined by `google.api.Service`.
7044      "files": [ # Set of source configuration files that are used to generate a service
7045          # configuration (`google.api.Service`).
7046        { # Generic specification of a source configuration file
7047          "fileContents": "A String", # The bytes that constitute the file.
7048          "fileType": "A String", # The type of configuration file this represents.
7049          "filePath": "A String", # The file name of the configuration file (full or relative path).
7050        },
7051      ],
7052      "id": "A String", # A unique ID for a specific instance of this message, typically assigned
7053          # by the client for tracking purpose. If empty, the server may choose to
7054          # generate one instead.
7055    },
7056  }
7057
7058  x__xgafv: string, V1 error format.
7059    Allowed values
7060      1 - v1 error format
7061      2 - v2 error format
7062
7063Returns:
7064  An object of the form:
7065
7066    { # This resource represents a long-running operation that is the result of a
7067      # network API call.
7068    "error": { # The `Status` type defines a logical error model that is suitable for different # The error result of the operation in case of failure or cancellation.
7069        # programming environments, including REST APIs and RPC APIs. It is used by
7070        # [gRPC](https://github.com/grpc). The error model is designed to be:
7071        #
7072        # - Simple to use and understand for most users
7073        # - Flexible enough to meet unexpected needs
7074        #
7075        # # Overview
7076        #
7077        # The `Status` message contains three pieces of data: error code, error message,
7078        # and error details. The error code should be an enum value of
7079        # google.rpc.Code, but it may accept additional error codes if needed.  The
7080        # error message should be a developer-facing English message that helps
7081        # developers *understand* and *resolve* the error. If a localized user-facing
7082        # error message is needed, put the localized message in the error details or
7083        # localize it in the client. The optional error details may contain arbitrary
7084        # information about the error. There is a predefined set of error detail types
7085        # in the package `google.rpc` that can be used for common error conditions.
7086        #
7087        # # Language mapping
7088        #
7089        # The `Status` message is the logical representation of the error model, but it
7090        # is not necessarily the actual wire format. When the `Status` message is
7091        # exposed in different client libraries and different wire protocols, it can be
7092        # mapped differently. For example, it will likely be mapped to some exceptions
7093        # in Java, but more likely mapped to some error codes in C.
7094        #
7095        # # Other uses
7096        #
7097        # The error model and the `Status` message can be used in a variety of
7098        # environments, either with or without APIs, to provide a
7099        # consistent developer experience across different environments.
7100        #
7101        # Example uses of this error model include:
7102        #
7103        # - Partial errors. If a service needs to return partial errors to the client,
7104        #     it may embed the `Status` in the normal response to indicate the partial
7105        #     errors.
7106        #
7107        # - Workflow errors. A typical workflow has multiple steps. Each step may
7108        #     have a `Status` message for error reporting.
7109        #
7110        # - Batch operations. If a client uses batch request and batch response, the
7111        #     `Status` message should be used directly inside batch response, one for
7112        #     each error sub-response.
7113        #
7114        # - Asynchronous operations. If an API call embeds asynchronous operation
7115        #     results in its response, the status of those operations should be
7116        #     represented directly using the `Status` message.
7117        #
7118        # - Logging. If some API errors are stored in logs, the message `Status` could
7119        #     be used directly after any stripping needed for security/privacy reasons.
7120      "message": "A String", # A developer-facing error message, which should be in English. Any
7121          # user-facing error message should be localized and sent in the
7122          # google.rpc.Status.details field, or localized by the client.
7123      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
7124      "details": [ # A list of messages that carry the error details.  There will be a
7125          # common set of message types for APIs to use.
7126        {
7127          "a_key": "", # Properties of the object. Contains field @type with type URL.
7128        },
7129      ],
7130    },
7131    "done": True or False, # If the value is `false`, it means the operation is still in progress.
7132        # If true, the operation is completed, and either `error` or `response` is
7133        # available.
7134    "response": { # The normal response of the operation in case of success.  If the original
7135        # method returns no data on success, such as `Delete`, the response is
7136        # `google.protobuf.Empty`.  If the original method is standard
7137        # `Get`/`Create`/`Update`, the response should be the resource.  For other
7138        # methods, the response should have the type `XxxResponse`, where `Xxx`
7139        # is the original method name.  For example, if the original method name
7140        # is `TakeSnapshot()`, the inferred response type is
7141        # `TakeSnapshotResponse`.
7142      "a_key": "", # Properties of the object. Contains field @type with type URL.
7143    },
7144    "name": "A String", # The server-assigned name, which is only unique within the same service that
7145        # originally returns it. If you use the default HTTP mapping, the
7146        # `name` should have the format of `operations/some/unique/name`.
7147    "metadata": { # Service-specific metadata associated with the operation.  It typically
7148        # contains progress information and common metadata such as create time.
7149        # Some services might not provide such metadata.  Any method that returns a
7150        # long-running operation should document the metadata type, if any.
7151      "a_key": "", # Properties of the object. Contains field @type with type URL.
7152    },
7153  }</pre>
7154</div>
7155
7156</body></html>