在通过API使用远程数据库的应用程序中放置数据的位置?

时间:2009-09-04 08:17:01

标签: ruby-on-rails

这是一般性问题,因此我不会说出我所引用的网站的API。

好的,我们可以说API让我可以访问某些对象(书籍/其他产品)。我想让我的用户能够在我的应用程序的数据库中“存储”这些对象,以便以后他们可以再次“查看”它们。

我的问题是关于“商店”和“评论”的动词。 (当然,在可能的情况下将使用缓存,而不是从远程数据库中提取数据)

1)我应该真正存储

a)只是一个特定于API的密钥,足以在审核时从API中提取其他对象数据

b)API密钥+其他唯一ID(如书籍的ISBN,如果不存在其他“自然”ID,则为名称)。我的想法是,如果必须的话,以后它会让我更改使用过的API。

c)所有对象的数据(如作者,制造商等)。也就是说,仅将API用于显示搜索结果

2)如果是1 a)或b),我应该如何组织项目模型?我应该

a)将API的接口分隔为单独的类(如RemoteItem)或者我应该

b)只定义Item内的方法,与远程站点透明地进行通信?

c)或要包含的模块?

1 个答案:

答案 0 :(得分:0)

1)。首先是一个技术思想:如果您掌控了API,那么您可以确定您对API特定密钥的重要性的信任程度。在这种情况下,你实际上并没有控制它,所以我更喜欢“带和括号”的方法,也藏匿了ISBN(我不知道其他媒体是否提供类似的独特ID)。这纯粹是为了处理您无法控制的API中的潜在变化。

然后考虑可用性。如果您存储其他一些数据,您不仅可以容纳API中的转换,您可以更轻松地提供其他功能,例如搜索类似的项目,或搜索不同的站点以进行价格比较。

所以我倾向于隐藏更多信息 - 就像书籍作者和标题所说的那样。

2)。我不确定我是否完全理解替代方案。问题是Item本身是否具有调用API的“持久性”逻辑,或者是否有一个提取项目的Library对象?我的直觉是你需要一个库来管理搜索,它可以封装访问一个或多个远程站点的细节。