Index: generated/googleapis/lib/serviceuser/v1.dart |
diff --git a/generated/googleapis/lib/serviceuser/v1.dart b/generated/googleapis/lib/serviceuser/v1.dart |
index 8641cbf0e938f9006b7408fcf89d8943df3e15a3..35401f7b6e705a0d10637b887ff81d3199b60f12 100644 |
--- a/generated/googleapis/lib/serviceuser/v1.dart |
+++ b/generated/googleapis/lib/serviceuser/v1.dart |
@@ -1237,6 +1237,14 @@ class Endpoint { |
core.List<core.String> features; |
/** The canonical name of this endpoint. */ |
core.String name; |
+ /** |
+ * The specification of an Internet routable address of API frontend that will |
+ * handle requests to this [API |
+ * Endpoint](https://cloud.google.com/apis/design/glossary). |
+ * It should be either a valid IPv4 address or a fully-qualified domain name. |
+ * For example, "8.8.8.8" or "myservice.appspot.com". |
+ */ |
+ core.String target; |
Endpoint(); |
@@ -1256,6 +1264,9 @@ class Endpoint { |
if (_json.containsKey("name")) { |
name = _json["name"]; |
} |
+ if (_json.containsKey("target")) { |
+ target = _json["target"]; |
+ } |
} |
core.Map toJson() { |
@@ -1275,6 +1286,9 @@ class Endpoint { |
if (name != null) { |
_json["name"] = name; |
} |
+ if (target != null) { |
+ _json["target"] = target; |
+ } |
return _json; |
} |
} |
@@ -1539,6 +1553,15 @@ class Field { |
*/ |
class Http { |
/** |
+ * When set to true, URL path parmeters will be fully URI-decoded except in |
+ * cases of single segment matches in reserved expansion, where "%2F" will be |
+ * left encoded. |
+ * |
+ * The default behavior is to not decode RFC 6570 reserved characters in multi |
+ * segment matches. |
+ */ |
+ core.bool fullyDecodeReservedExpansion; |
+ /** |
* A list of HTTP configuration rules that apply to individual API methods. |
* |
* **NOTE:** All service configuration rules follow "last one wins" order. |
@@ -1548,6 +1571,9 @@ class Http { |
Http(); |
Http.fromJson(core.Map _json) { |
+ if (_json.containsKey("fullyDecodeReservedExpansion")) { |
+ fullyDecodeReservedExpansion = _json["fullyDecodeReservedExpansion"]; |
+ } |
if (_json.containsKey("rules")) { |
rules = _json["rules"].map((value) => new HttpRule.fromJson(value)).toList(); |
} |
@@ -1555,6 +1581,9 @@ class Http { |
core.Map toJson() { |
var _json = new core.Map(); |
+ if (fullyDecodeReservedExpansion != null) { |
+ _json["fullyDecodeReservedExpansion"] = fullyDecodeReservedExpansion; |
+ } |
if (rules != null) { |
_json["rules"] = rules.map((value) => (value).toJson()).toList(); |
} |
@@ -2525,6 +2554,53 @@ class MetricDescriptor { |
} |
/** |
+ * Bind API methods to metrics. Binding a method to a metric causes that |
+ * metric's configured quota, billing, and monitoring behaviors to apply to the |
+ * method call. |
+ * |
+ * Used by metric-based quotas only. |
+ */ |
+class MetricRule { |
+ /** |
+ * Metrics to update when the selected methods are called, and the associated |
+ * cost applied to each metric. |
+ * |
+ * The key of the map is the metric name, and the values are the amount |
+ * increased for the metric against which the quota limits are defined. |
+ * The value must not be negative. |
+ */ |
+ core.Map<core.String, core.String> metricCosts; |
+ /** |
+ * Selects the methods to which this rule applies. |
+ * |
+ * Refer to selector for syntax details. |
+ */ |
+ core.String selector; |
+ |
+ MetricRule(); |
+ |
+ MetricRule.fromJson(core.Map _json) { |
+ if (_json.containsKey("metricCosts")) { |
+ metricCosts = _json["metricCosts"]; |
+ } |
+ if (_json.containsKey("selector")) { |
+ selector = _json["selector"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (metricCosts != null) { |
+ _json["metricCosts"] = metricCosts; |
+ } |
+ if (selector != null) { |
+ _json["selector"] = selector; |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
* Declares an API to be included in this API. The including API must |
* redeclare all the methods from the included API, but documentation |
* and options are inherited as follows: |
@@ -3169,6 +3245,328 @@ class PublishedService { |
} |
} |
+/** |
+ * Quota configuration helps to achieve fairness and budgeting in service |
+ * usage. |
+ * |
+ * The quota configuration works this way: |
+ * - The service configuration defines a set of metrics. |
+ * - For API calls, the quota.metric_rules maps methods to metrics with |
+ * corresponding costs. |
+ * - The quota.limits defines limits on the metrics, which will be used for |
+ * quota checks at runtime. |
+ * |
+ * An example quota configuration in yaml format: |
+ * |
+ * quota: |
+ * |
+ * - name: apiWriteQpsPerProject |
+ * metric: library.googleapis.com/write_calls |
+ * unit: "1/min/{project}" # rate limit for consumer projects |
+ * values: |
+ * STANDARD: 10000 |
+ * |
+ * |
+ * # The metric rules bind all methods to the read_calls metric, |
+ * # except for the UpdateBook and DeleteBook methods. These two methods |
+ * # are mapped to the write_calls metric, with the UpdateBook method |
+ * # consuming at twice rate as the DeleteBook method. |
+ * metric_rules: |
+ * - selector: "*" |
+ * metric_costs: |
+ * library.googleapis.com/read_calls: 1 |
+ * - selector: google.example.library.v1.LibraryService.UpdateBook |
+ * metric_costs: |
+ * library.googleapis.com/write_calls: 2 |
+ * - selector: google.example.library.v1.LibraryService.DeleteBook |
+ * metric_costs: |
+ * library.googleapis.com/write_calls: 1 |
+ * |
+ * Corresponding Metric definition: |
+ * |
+ * metrics: |
+ * - name: library.googleapis.com/read_calls |
+ * display_name: Read requests |
+ * metric_kind: DELTA |
+ * value_type: INT64 |
+ * |
+ * - name: library.googleapis.com/write_calls |
+ * display_name: Write requests |
+ * metric_kind: DELTA |
+ * value_type: INT64 |
+ */ |
+class Quota { |
+ /** |
+ * List of `QuotaLimit` definitions for the service. |
+ * |
+ * Used by metric-based quotas only. |
+ */ |
+ core.List<QuotaLimit> limits; |
+ /** |
+ * List of `MetricRule` definitions, each one mapping a selected method to one |
+ * or more metrics. |
+ * |
+ * Used by metric-based quotas only. |
+ */ |
+ core.List<MetricRule> metricRules; |
+ |
+ Quota(); |
+ |
+ Quota.fromJson(core.Map _json) { |
+ if (_json.containsKey("limits")) { |
+ limits = _json["limits"].map((value) => new QuotaLimit.fromJson(value)).toList(); |
+ } |
+ if (_json.containsKey("metricRules")) { |
+ metricRules = _json["metricRules"].map((value) => new MetricRule.fromJson(value)).toList(); |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (limits != null) { |
+ _json["limits"] = limits.map((value) => (value).toJson()).toList(); |
+ } |
+ if (metricRules != null) { |
+ _json["metricRules"] = metricRules.map((value) => (value).toJson()).toList(); |
+ } |
+ return _json; |
+ } |
+} |
+ |
+/** |
+ * `QuotaLimit` defines a specific limit that applies over a specified duration |
+ * for a limit type. There can be at most one limit for a duration and limit |
+ * type combination defined within a `QuotaGroup`. |
+ */ |
+class QuotaLimit { |
+ /** |
+ * Default number of tokens that can be consumed during the specified |
+ * duration. This is the number of tokens assigned when a client |
+ * application developer activates the service for his/her project. |
+ * |
+ * Specifying a value of 0 will block all requests. This can be used if you |
+ * are provisioning quota to selected consumers and blocking others. |
+ * Similarly, a value of -1 will indicate an unlimited quota. No other |
+ * negative values are allowed. |
+ * |
+ * Used by group-based quotas only. |
+ */ |
+ core.String defaultLimit; |
+ /** |
+ * Optional. User-visible, extended description for this quota limit. |
+ * Should be used only when more context is needed to understand this limit |
+ * than provided by the limit's display name (see: `display_name`). |
+ */ |
+ core.String description; |
+ /** |
+ * User-visible display name for this limit. |
+ * Optional. If not set, the UI will provide a default display name based on |
+ * the quota configuration. This field can be used to override the default |
+ * display name generated from the configuration. |
+ */ |
+ core.String displayName; |
+ /** |
+ * Duration of this limit in textual notation. Example: "100s", "24h", "1d". |
+ * For duration longer than a day, only multiple of days is supported. We |
+ * support only "100s" and "1d" for now. Additional support will be added in |
+ * the future. "0" indicates indefinite duration. |
+ * |
+ * Used by group-based quotas only. |
+ */ |
+ core.String duration; |
+ /** |
+ * Free tier value displayed in the Developers Console for this limit. |
+ * The free tier is the number of tokens that will be subtracted from the |
+ * billed amount when billing is enabled. |
+ * This field can only be set on a limit with duration "1d", in a billable |
+ * group; it is invalid on any other limit. If this field is not set, it |
+ * defaults to 0, indicating that there is no free tier for this service. |
+ * |
+ * Used by group-based quotas only. |
+ */ |
+ core.String freeTier; |
+ /** |
+ * Maximum number of tokens that can be consumed during the specified |
+ * duration. Client application developers can override the default limit up |
+ * to this maximum. If specified, this value cannot be set to a value less |
+ * than the default limit. If not specified, it is set to the default limit. |
+ * |
+ * To allow clients to apply overrides with no upper bound, set this to -1, |
+ * indicating unlimited maximum quota. |
+ * |
+ * Used by group-based quotas only. |
+ */ |
+ core.String maxLimit; |
+ /** |
+ * The name of the metric this quota limit applies to. The quota limits with |
+ * the same metric will be checked together during runtime. The metric must be |
+ * defined within the service config. |
+ * |
+ * Used by metric-based quotas only. |
+ */ |
+ core.String metric; |
+ /** |
+ * Name of the quota limit. The name is used to refer to the limit when |
+ * overriding the default limit on per-consumer basis. |
+ * |
+ * For group-based quota limits, the name must be unique within the quota |
+ * group. If a name is not provided, it will be generated from the limit_by |
+ * and duration fields. |
+ * |
+ * For metric-based quota limits, the name must be provided, and it must be |
+ * unique within the service. The name can only include alphanumeric |
+ * characters as well as '-'. |
+ * |
+ * The maximum length of the limit name is 64 characters. |
+ * |
+ * The name of a limit is used as a unique identifier for this limit. |
+ * Therefore, once a limit has been put into use, its name should be |
+ * immutable. You can use the display_name field to provide a user-friendly |
+ * name for the limit. The display name can be evolved over time without |
+ * affecting the identity of the limit. |
+ */ |
+ core.String name; |
+ /** |
+ * Specify the unit of the quota limit. It uses the same syntax as |
+ * Metric.unit. The supported unit kinds are determined by the quota |
+ * backend system. |
+ * |
+ * The [Google Service Control](https://cloud.google.com/service-control) |
+ * supports the following unit components: |
+ * * One of the time intevals: |
+ * * "/min" for quota every minute. |
+ * * "/d" for quota every 24 hours, starting 00:00 US Pacific Time. |
+ * * Otherwise the quota won't be reset by time, such as storage limit. |
+ * * One and only one of the granted containers: |
+ * * "/{organization}" quota for an organization. |
+ * * "/{project}" quota for a project. |
+ * * "/{folder}" quota for a folder. |
+ * * "/{resource}" quota for a universal resource. |
+ * * Zero or more quota segmentation dimension. Not all combos are valid. |
+ * * "/{region}" quota for every region. Not to be used with time intervals. |
+ * * Otherwise the resources granted on the target is not segmented. |
+ * * "/{zone}" quota for every zone. Not to be used with time intervals. |
+ * * Otherwise the resources granted on the target is not segmented. |
+ * * "/{resource}" quota for a resource associated with a project or org. |
+ * |
+ * Here are some examples: |
+ * * "1/min/{project}" for quota per minute per project. |
+ * * "1/min/{user}" for quota per minute per user. |
+ * * "1/min/{organization}" for quota per minute per organization. |
+ * |
+ * Note: the order of unit components is insignificant. |
+ * The "1" at the beginning is required to follow the metric unit syntax. |
+ * |
+ * Used by metric-based quotas only. |
+ */ |
+ core.String unit; |
+ /** |
+ * Tiered limit values. Also allows for regional or zone overrides for these |
+ * values if "/{region}" or "/{zone}" is specified in the unit field. |
+ * |
+ * Currently supported tiers from low to high: |
+ * VERY_LOW, LOW, STANDARD, HIGH, VERY_HIGH |
+ * |
+ * To apply different limit values for users according to their tiers, specify |
+ * the values for the tiers you want to differentiate. For example: |
+ * {LOW:100, STANDARD:500, HIGH:1000, VERY_HIGH:5000} |
+ * |
+ * The limit value for each tier is optional except for the tier STANDARD. |
+ * The limit value for an unspecified tier falls to the value of its next |
+ * tier towards tier STANDARD. For the above example, the limit value for tier |
+ * STANDARD is 500. |
+ * |
+ * To apply the same limit value for all users, just specify limit value for |
+ * tier STANDARD. For example: {STANDARD:500}. |
+ * |
+ * To apply a regional overide for a tier, add a map entry with key |
+ * "<TIER>/<region>", where <region> is a region name. Similarly, for a zone |
+ * override, add a map entry with key "<TIER>/{zone}". |
+ * Further, a wildcard can be used at the end of a zone name in order to |
+ * specify zone level overrides. For example: |
+ * LOW: 10, STANDARD: 50, HIGH: 100, |
+ * LOW/us-central1: 20, STANDARD/us-central1: 60, HIGH/us-central1: 200, |
+ * LOW/us-central1-*: 10, STANDARD/us-central1-*: 20, HIGH/us-central1-*: 80 |
+ * |
+ * The regional overrides tier set for each region must be the same as |
+ * the tier set for default limit values. Same rule applies for zone overrides |
+ * tier as well. |
+ * |
+ * Used by metric-based quotas only. |
+ */ |
+ core.Map<core.String, core.String> values; |
+ |
+ QuotaLimit(); |
+ |
+ QuotaLimit.fromJson(core.Map _json) { |
+ if (_json.containsKey("defaultLimit")) { |
+ defaultLimit = _json["defaultLimit"]; |
+ } |
+ if (_json.containsKey("description")) { |
+ description = _json["description"]; |
+ } |
+ if (_json.containsKey("displayName")) { |
+ displayName = _json["displayName"]; |
+ } |
+ if (_json.containsKey("duration")) { |
+ duration = _json["duration"]; |
+ } |
+ if (_json.containsKey("freeTier")) { |
+ freeTier = _json["freeTier"]; |
+ } |
+ if (_json.containsKey("maxLimit")) { |
+ maxLimit = _json["maxLimit"]; |
+ } |
+ if (_json.containsKey("metric")) { |
+ metric = _json["metric"]; |
+ } |
+ if (_json.containsKey("name")) { |
+ name = _json["name"]; |
+ } |
+ if (_json.containsKey("unit")) { |
+ unit = _json["unit"]; |
+ } |
+ if (_json.containsKey("values")) { |
+ values = _json["values"]; |
+ } |
+ } |
+ |
+ core.Map toJson() { |
+ var _json = new core.Map(); |
+ if (defaultLimit != null) { |
+ _json["defaultLimit"] = defaultLimit; |
+ } |
+ if (description != null) { |
+ _json["description"] = description; |
+ } |
+ if (displayName != null) { |
+ _json["displayName"] = displayName; |
+ } |
+ if (duration != null) { |
+ _json["duration"] = duration; |
+ } |
+ if (freeTier != null) { |
+ _json["freeTier"] = freeTier; |
+ } |
+ if (maxLimit != null) { |
+ _json["maxLimit"] = maxLimit; |
+ } |
+ if (metric != null) { |
+ _json["metric"] = metric; |
+ } |
+ if (name != null) { |
+ _json["name"] = name; |
+ } |
+ if (unit != null) { |
+ _json["unit"] = unit; |
+ } |
+ if (values != null) { |
+ _json["values"] = values; |
+ } |
+ return _json; |
+ } |
+} |
+ |
/** Response message for SearchServices method. */ |
class SearchServicesResponse { |
/** |
@@ -3305,6 +3703,8 @@ class Service { |
* manage consumption of the service, etc. |
*/ |
core.String producerProjectId; |
+ /** Quota configuration. */ |
+ Quota quota; |
/** |
* Output only. The source information for this configuration if available. |
*/ |
@@ -3400,6 +3800,9 @@ class Service { |
if (_json.containsKey("producerProjectId")) { |
producerProjectId = _json["producerProjectId"]; |
} |
+ if (_json.containsKey("quota")) { |
+ quota = new Quota.fromJson(_json["quota"]); |
+ } |
if (_json.containsKey("sourceInfo")) { |
sourceInfo = new SourceInfo.fromJson(_json["sourceInfo"]); |
} |
@@ -3485,6 +3888,9 @@ class Service { |
if (producerProjectId != null) { |
_json["producerProjectId"] = producerProjectId; |
} |
+ if (quota != null) { |
+ _json["quota"] = (quota).toJson(); |
+ } |
if (sourceInfo != null) { |
_json["sourceInfo"] = (sourceInfo).toJson(); |
} |