把实体 - 关系图中的“关系”发布成数据服务实体 - 关系图中定义的“实体”之间的“关系”为“一对一”、“一对多”、“多对多”的关系。把实体 - 关系图中的“关系”发布成数据服务,这里所说的“关系”不是实体之间的数量对应关系,而是语义上数据依赖、相似关系。实体之间的语义关系有几种,如图 6 所示。
图 6. 实体之间的语义关系图下面分别来阐述图 6 所示的关系对应的数据服务。 相同属性
“相同属性”指的是“实体 A 和 B 有相同属性”。在“在线购物”的这个场景中,由“相同属性”找出来的数据服务可能包括:具有相同“收获地址”的订单;具有相同“风格”的商品,具有相同属性“打折商品”的商品,等等。一个应用场景是:当用户浏览一件 T 恤的时候,假如“T 恤”这个实体的属性有:风格、面料、尺寸、品牌这四个属性,我们可以识别出来跟实体“T 恤”相同属性的数据服务有两类:一类是相同实体类型的,如相同“风格”的“T 恤”,相同“面料”的“T 恤,相同“尺寸”的“T 恤”,相同“面料”的“T 恤”;还有不同实体的具有“相同属性”的数据服务包括:相同“风格”的“裤子”,相同“面料”的“裤子”,相同“尺寸”的“裤子”,相同“面料”的“裤子”等等。
从技术来讲,“相同属性”这种识别出来的数据服务其实就是给在 1)中识别出来的实体创建了很多不同的查询条件。通过“属性”,把数据服务关联了起来。通过本系统的第一篇文章,读者已经知道了 REST 的一个核心思想是创建相互联系的服务,而“相同属性”识别数据服务的方法,一方面我们可以得到很多数据服务,另一方面,这些数据服务天然的就相互联系在一块,和 REST 的核心思想一致。
从用户的角度来讲,“相同属性”是一种导航的线索,通过“相同属性”的关系识别出来的数据服务,使得人们获得一种灵活查询数据的能力。 操作
“操作”关系是指“实体 A 对实体 B 做了什么操作”。比如在“在线购物”的这个场景中,“买家”是一种类型的实体,“商品”是另一种类型的实体,“买家 A ‘购买’了商品 B”就是“操作”关系的一种实例。
通过“操作”关系,可以定义的数据服务包括:买家 A 购买的商品列表,买家 A 浏览的商品列表,买家 A 评价的商品列表等等。
和通过“相同属性”识别的数据服务类似,通过“操作”关系识别出来的数据服务也天然的符合 REST 的约束。 实体 A 的实例和实体 B 有相同的关系
“实体 A 的实例和实体 B 有相同的关系”指的是同种类型的实体的不同实例和第二种类型的实体有相同的关系。还是拿“在线购物”为例,买家 A“购买”了商品 C,买家 B 也“购买”了商品 C,那么可以提供一个数据服务为“同时购买商品 C”的买家列表。细心的读者已经发现,这种关系和“相同属性”的关系有相似之处,不同点在于“相同属性”的关系不依赖于第二种实体,而这种关系依赖于外来的实体,识别数据服务的规则是一样。
和前两种通过“关系”识别出来的数据服务一样,通过“实体 A 的实例和实体 B 有相同的关系”的关系识别出来的数据服务也天然的符合 REST 的约束。