backstage~实体的介绍及它们的关系
在Backstage中,这些参数用于定义软件目录中各种实体(如组件、API、资源等)之间的关系。它们总是成对出现的,分别从关系两端的视角来描述同一种连接。
以下是这些参数的概念解释:
1. 所有权关系
ownedBy:声明“谁拥有我”。例如,一个“微服务组件”在其YAML定义中通过ownedBy: [team-a]来声明它被“team-a”这个团队所拥有。ownerOf:声明“我拥有谁”。这是从所有者(如团队)的角度出发。例如,“team-a”这个Group实体会通过ownerOf: [component:my-service]来声明它拥有“my-service”这个组件。
2. API 提供关系
providesApis:声明“我提供哪些API”。用于定义组件(通常是后端服务)对外暴露的API接口。例如,component:order-service在其定义中写明providesApis: [order-api]。apiProvidedBy:声明“我由哪个组件提供”。这是从API实体的角度出发。例如,api:order-api在其定义中会通过apiProvidedBy: [component:order-service]来指明它的提供者。
3. API 消费关系
consumesApis:声明“我消费/使用哪些API”。用于定义组件(如前端应用或另一个服务)所依赖的外部API。例如,component:web-frontend写明consumesApis: [order-api, user-api]。apiConsumedBy:声明“我被哪些组件消费/使用”。这是从API实体的角度反向描述。例如,api:order-api可以通过apiConsumedBy: [component:web-frontend, component:mobile-app]来查看其所有消费者。
4. 依赖关系
dependsOn:声明“我依赖于谁”。用于定义组件运行时对另一个组件、API或资源的硬性依赖。例如,component:payment-service可能依赖于一个数据库资源:dependsOn: [resource:payment-db]。这有助于进行影响分析和故障排查。dependencyOf:声明“谁依赖于我”。这是从被依赖方的角度描述。例如,resource:payment-db会通过dependencyOf: [component:payment-service]来了解哪些组件依赖自己。
5. 层级/父子关系
parentOf:声明“谁是我的子级/下级”。通常用于Group(组/团队)或System(系统)实体。例如,一个名为infrastructure的父组可以声明parentOf: [group:network-team, group:storage-team]。childOf:声明“谁是我的父级/上级”。这是从子实体的角度描述。例如,group:network-team会声明childOf: [group:infrastructure]。
6. 集合与成员关系
memberOf:声明“我属于哪个集合/组”。通常用于User(用户)实体。例如,用户Alice的定义中会写明memberOf: [group:frontend-developers]。hasMember:声明“哪些成员属于我”。这是从Group(组)实体的角度描述。例如,group:frontend-developers会声明hasMember: [user:alice, user:bob]。
7. 整体与部分关系
partOf:声明“我是哪个更大整体的一部分”。用于描述一个组件属于某个更大的系统或领域。例如,component:checkout-service可以声明partOf: [system:e-commerce-platform]。这有助于构建系统视图。hasPart:声明“我包含哪些部分”。这是从整体(如System)的角度描述。例如,system:e-commerce-platform会声明hasPart: [component:checkout-service, component:product-catalog]。
核心总结:
- 每一对参数(如
ownedBy/ownerOf)描述的都是同一种关系,只是视角不同。 - 在实践中,通常只需要在一端(通常是“子”端或被拥有端,如组件、API)定义关系(如
ownedBy,partOf),Backstage 的后台处理器会自动在另一端(如团队、系统)填充对应的反向关系(如ownerOf,hasPart),从而确保目录中关系图谱的双向一致性和可导航性。
浙公网安备 33010602011771号