接口(Interface):让不同对象"长得一样"
当你有十几种"长得差不多"的对象类型,却想用同一套逻辑去操作它们时,接口就是答案。 这一篇讲清接口是什么、它和对象类型的区别、怎么用继承与实现搭出多态。
https://www.palantir.com/docs/foundry/interfaces/interface-overview/
原始标题:Interfaces · Overview
一句话速览
接口(Interface):让不同对象"长得一样":当你有十几种"长得差不多"的对象类型,却想用同一套逻辑去操作它们时,接口就是答案。这一篇讲清接口是什么、它和对象类型的区别、怎么用继承与实现搭出多态。
一句话:接口描述"形状与能力"
An interface describes the shape of an object type and its capabilities.
在中文里,「接口(interface)」常被翻译得太技术化。你可以把它理解成一张 规格清单:一份对象类型要想"长得合规",就必须具备清单上列出的属性、链接和动作。 接口本身不存任何数据,它只定义形状(shape)与能力(capabilities)。
关键价值在"共享"二字:只要多种对象类型都符合同一张清单,同一段工作流就能 一次写好、处处适用——这就是后面要反复提到的多态(polymorphism)。
一个例子:Facility 接口
同样的形状,三种完全不同的现实事物。
设想你有一个 Facility(设施)接口,它规定:任何实现者都要有
Facility Name(设施名称)和 Location(位置)这两个属性。
下面这三种对象类型,现实里毫无关系,却都"长得合规",于是都能实现(implement)这个接口:
facilityName · location + 自己专属的 iataCode、跑道数等。facilityName · location + 自己专属的生产线、产能等。facilityName · location + 自己专属的机位容量等。Facility 接口来写,就能同时覆盖机场、工厂、机库——
将来再加一个新的对象类型(比如 Warehouse 仓库),只要它实现了接口,工作流立刻兼容,无需重写。
接口由什么组成?
接口 = 属性 + 链接约束 + 动作约束 + 元数据。
一个接口由四类东西拼成,我们可以对照着理解:
| 组成部分 | 说明 |
|---|---|
| Interface properties 接口属性 | 接口要求的属性。可以直接定义在接口上(推荐),也可以复用「共享属性(shared properties)」。 |
| Link type constraints 链接类型约束 | 规定实现接口的对象类型"应当有哪些链接",以及链接的两端长什么样。 |
| Action type constraints 动作类型约束 | 规定实现接口的对象类型"应当具备哪些动作能力"。原文注明这部分处于 beta 阶段。 |
| Metadata 元数据 | 关于接口本身的描述信息,便于在平台里检索与治理。 |
最重要的一点:一个接口可以被多个对象类型实现,反过来,一个对象类型也可以同时实现多个接口, 分别服务于不同的工作流。
继承与实现:像搭积木一样复用
extend 继承属性,implement 声明符合规格。
接口和编程语言里的接口很像,支持继承(extend)。你可以从已有接口 扩展(extend)出一个"子接口",它自动继承父接口的全部属性, 再往上加更具体的属性。
两条规则值得记牢:
- 对象类型实现接口(implement):声明"我符合这张规格清单",从而能被面向接口的工作流使用。
- 层层继承:一个接口可以 extend 多个其他接口,被继承的接口还能再继承别的接口,属性会"穿透"多层传递下来。
接口 vs 对象类型:抽象 vs 具体
一句话区分两者最常被混淆的地方。
原文把两者的差异拆成"功能"和"外观"两层。先看成功能:
外观上也有一处很贴心的区分:在平台界面里, 接口的图标用虚线边框圈起来,一眼就能和实心的对象类型分开。
练一练:它属于哪一类?
权限与当前支持范围
接口还在快速演进,支持情况因应用而异。
接口的权限通过「本体角色(Ontology roles)」来管理——和本体里其它资源走同一套授权体系。
原文特别提示:接口仍在积极开发中,支持范围会随平台更新而变化。目前大致分三档:
| 支持程度 | 涉及的应用 / 服务 |
|---|---|
| 已支持 | Ontology Manager(定义/编辑/实现接口)、Marketplace(打包与安装接口)、Functions(TypeScript v2 函数) |
| 部分支持 | Actions(可定义对"实现接口的对象"做增改删与链接,接口动作约束在 beta)、Object Set Service(按接口搜索排序)、Ontology SDK(作 API 层,TypeScript 已支持,Java/Python 在开发中) |
| 暂不支持 | Workshop;Functions 的 TypeScript v1 与 Python 版本 |
动手:这个类型实现了接口吗?
判断依据只有"形状"——有没有那几个必填字段。
假设有接口 Facility,它要求实现者必须具备 facilityName 与 location 两个属性。
下面每个卡片列出一种对象类型所拥有的属性。
点击卡片,判断它是否实现了 Facility 接口。
一页带走
延伸阅读 · 相关页面
按主题横向跳转,不必顺着目录一篇篇读。
常见问题速答 · FAQ
关于「接口(Interface):让不同对象"长得一样"」,读者最常问的几个问题。