因此,在过去,我工作的网站依赖于将数据访问直接与应用程序和视图代码混合在一起的单层架构。我最近让团队相信实现数据访问服务层 (API) 的优势;尤其是最近关于水平扩展的讨论(本机移动应用程序等)。
现在想到的实现是使用Entity Framework
将数据库映射到 Data Contract
客户端将使用WCF
服务请求的类。
我过去在较小的规模上使用过这种方法,但现在有大量数据对象的范围,每个对象都有许多可能被查询的标准,我在设想如何构建 API 时遇到了问题。
数据类示例列表:
- 产品
- 商人
- 牌
- 分类
- 优惠券
- 用户
- 评论
- 问题
- 答案
- ETC
(希望这些对象相关的方式足以说明我的观点)
服务要求
- 服务必须与语言无关(.net、php、java、objective c)
- 模式必须允许多个不同的数据源充当一个 api(比如我们的用户存储在 MSSQL 服务器中,我们的评论系统存储在 MySQL 中,我们的产品来自 XML 提要)
- 必须能够从 API 端实现对象缓存
这些数据对象中的每一个本质上都需要基于它的几个列进行查询(返回单个对象或集合)。虽然我可以为每个不同的场景编写一个新的 API 方法,但我认为必须有一种更优雅的方法来做到这一点。
示例请求:
- 通过 id 获取单个产品。
- 获取按“创建日期”、“价格”或“折扣”排序的特定商家、品牌或分类的产品列表。
- 获取用户提交的所有评论
- 获取产品的所有评论
- ...
在我的研究中,我遇到了这篇MSDN 文章,其中概述了创建 API 的几种标准方法。我很想听听每种方法的优缺点,以及哪种方法似乎最适合我上面描述的模型。