Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... }
POST /v1/computeeffectiveaccessscope
ComputeEffectiveAccessScope
根据请求中的规则返回有效的访问范围。不持久化任何内容;由于集群和命名空间可能发生变化,因此不是幂等的。由于潜在的大负载,选择 POST 方法。在保持响应精简和详细之间存在优势。如果只包含选定集群和命名空间的 ID,则响应延迟和处理时间较低,但调用方应将其响应与自身的世界观叠加,这容易出现一致性问题。列出所有集群和命名空间及其相关元数据对调用方来说很方便,但会使用次要数据膨胀消息。我们让调用方决定他们想要获得的详细程度:- 最小值,仅列出包含子树的根及其 ID。集群可以是 INCLUDED(其命名空间包含在内但不列出)或 PARTIAL(至少一个命名空间被明确包含)。命名空间只能是 INCLUDED。- 标准 [默认值],列出所有已知集群和命名空间及其 ID 和名称。集群可以是 INCLUDED(所有命名空间都明确列为 INCLUDED),PARTIAL(所有命名空间都明确列出,有些为 INCLUDED,有些为 EXCLUDED)和 EXCLUDED(所有命名空间都明确列为 EXCLUDED)。命名空间可以是 INCLUDED 或 EXCLUDED。- 高,每个集群和命名空间都带有元数据。
字段名称 | 必需 | 可为空 | 类型 | 描述 | 格式 |
---|---|---|---|---|---|
code |
整数 |
int32 |
|||
message |
字符串 |
||||
details |
ProtobufAny 列表 |
Any
包含任意序列化的协议缓冲区消息以及描述序列化消息类型的URL。
Protobuf库提供支持,以实用函数或Any类型的附加生成方法的形式打包/解包Any值。
示例1:在C++中打包和解包消息。
Foo foo = ...; Any any; any.PackFrom(foo); ... if (any.UnpackTo(&foo)) { ... }
示例2:在Java中打包和解包消息。
Foo foo = ...; Any any = Any.pack(foo); ... if (any.is(Foo.class)) { foo = any.unpack(Foo.class); } // or ... if (any.isSameTypeAs(Foo.getDefaultInstance())) { foo = any.unpack(Foo.getDefaultInstance()); }
Example 3: Pack and unpack a message in Python.
foo = Foo(...) any = Any() any.Pack(foo) ... if any.Is(Foo.DESCRIPTOR): any.Unpack(foo) ...
Example 4: Pack and unpack a message in Go
foo := &pb.Foo{...} any, err := anypb.New(foo) if err != nil { ... } ... foo := &pb.Foo{} if err := any.UnmarshalTo(foo); err != nil { ... }
Protobuf库提供的打包方法默认使用'type.googleapis.com/full.type.name'作为类型URL,解包方法仅使用类型URL中最后一个'/'后的完全限定类型名称,例如"foo.bar.com/x/y.z"将产生类型名称"y.z"。
Any
值的JSON表示使用反序列化的嵌入式消息的常规表示,并添加一个包含类型URL的附加字段@type
。示例
package google.profile; message Person { string first_name = 1; string last_name = 2; }
{ "@type": "type.googleapis.com/google.profile.Person", "firstName": <string>, "lastName": <string> }
如果嵌入式消息类型是众所周知的并且具有自定义JSON表示,则该表示将被嵌入,并添加一个value
字段,该字段除了@type
字段外还包含自定义JSON。示例(对于消息[google.protobuf.Duration][])
{ "@type": "type.googleapis.com/google.protobuf.Duration", "value": "1.212s" }
字段名称 | 必需 | 可为空 | 类型 | 描述 | 格式 |
---|---|---|---|---|---|
@type |
字符串 |
唯一标识序列化协议缓冲区消息类型的URL/资源名称。此字符串必须包含至少一个“/”字符。URL路径的最后一个段必须表示类型的完全限定名称(如 |
任何重复字段的每个元素都是一个单独的规则。规则通过逻辑OR连接:如果存在允许资源x
的规则,则x
在访问范围内。
字段名称 | 必需 | 可为空 | 类型 | 描述 | 格式 |
---|---|---|---|---|---|
includedClusters |
|
||||
includedNamespaces |
|||||
clusterLabelSelectors |
|||||
namespaceLabelSelectors |
EffectiveAccessScope描述了给定当前状态哪些集群和命名空间“在范围内”。基本上,如果AccessScope应用于当前已知的集群和命名空间,则结果是EffectiveAccessScope。
EffectiveAccessScope表示一个树,其节点标记为包含和排除。如果包含一个节点,则其所有子节点都包含。
字段名称 | 必需 | 可为空 | 类型 | 描述 | 格式 |
---|---|---|---|---|---|
clusters |
字段名称 | 必需 | 可为空 | 类型 | 描述 | 格式 |
---|---|---|---|---|---|
id |
字符串 |
||||
name |
字符串 |
||||
state |
UNKNOWN,INCLUDED,EXCLUDED,PARTIAL, |
||||
labels |
|
||||
namespaces |
字段名称 | 必需 | 可为空 | 类型 | 描述 | 格式 |
---|---|---|---|---|---|
id |
字符串 |
||||
name |
字符串 |
||||
state |
UNKNOWN,INCLUDED,EXCLUDED,PARTIAL, |
||||
labels |
|
SetBasedLabelSelector只允许基于集合的标签要求。
下一个可用标签:3
字段名称 | 必需 | 可为空 | 类型 | 描述 | 格式 |
---|---|---|---|---|---|
requirements |