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