代码之家  ›  专栏  ›  技术社区  ›  Raj Rao

通过web服务集成两个系统的最佳实践

  •  0
  • Raj Rao  · 技术社区  · 14 年前

    在我的例子中,独立的系统是一个web服务(但它可以是任何东西)。 我的问题是,当您在数据方面集成到单独的系统(如web服务)时,什么是最佳实践?

    示例:web服务提供产品列表。产品使用类别分组。你可以得到一个子类别中的所有产品。您可以通过其id(整数)或名称(唯一值)来获取特定产品。

    在我的申请中:

    我显示类别和产品列表-用户可以选择产品并指定订单数量。

    1. 我应该存储类别的名称还是类别的ID?

    2. 我应该存储产品的名称还是产品的ID?

    3. 我应该如何命名数据库中存储web服务数据的字段 (categoryID或wscategoryID:以便按照惯例知道价值来自何处?)

    还有其他的最佳实践吗?

    还有其他推荐信吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   MicE    14 年前

    从您的问题中,我了解到Web服务的界面如下所示:

    /product/
    /product/{ProductId}
    /product/{ProductName}
    /product/category/{CategoryId}
    

    既然你问你是否应该储存 CategoryName ,我假设它是唯一的(与 ProductName )。
    我还假设web服务处理产品或类别被透明地重命名的情况(即通过提供重定向或任何其他允许您检测并相应地处理它的方法)。如果没有,不要考虑将名称存储为对产品或类别的引用-始终使用id。

    我会给你同样的答案 问题1和2 . 尽管 产品名称 类型名 在技术上允许您将它们作为产品和类别的唯一标识符存储在应用程序中,我将选择存储它们的id。主要的决定点是你的存储介质。因为您使用的是数据库,而且web服务允许您通过唯一的数字id访问对象,所以应该应用数据库规范化规则-因此应该 商店ID .

    然而,以上假设您使用的是关系数据库—如果您使用的是NoSQL数据库,我假设存储名称而不是ID也是一个可行的选择(至少就我目前对NoSQL解决方案的理解而言,不幸的是,我没有任何实践经验)。所有的经验都还没有)。

    关于 第3题 -我将坚持您已经在数据库中使用的命名约定。对于表和列的命名有很多不同的约定,所以我真的怀疑在如何命名引用web服务对象的列方面是否有任何标准化的约定。我会根据你的名字 现有命名约定 在某种程度上 各栏目的明确 所有使用该系统的人。注意,如果将来有可能使用其他web服务,则应考虑将服务的名称保留在列名中,而不是使用泛型 ws 前缀-例如 AmazonProductId AmazonCategoryId .

    我将试着从我的经验中指出一些项目,但我不会将它们标记为 最佳做法 -只是一些需要思考的话题。

    根据我的经验,我发现以与数据库中的数据相同的方式处理web服务中的数据是有用的——至少从应用程序的角度来看,在应用程序的存储层将从应用程序逻辑中抽象出来。我的意思是,无论您的存储介质是数据库还是web服务,您都应该考虑并准备类似的场景。 与数据库一样,web服务也可能宕机,两者都可能导致其数据或完整性损坏,这两种情况都将要求您在输入时清理或处理数据。

    数据缓存 应该是一个在您的列表中排名靠前的项目-除了明显的性能原因之外,它还允许您处理web服务的中断(在一定程度上受缓存数据的限制)。
    例如,应用程序显示应用程序中最常购买的产品列表。如果应用程序只存储产品的id,则必须对web服务执行一个或多个请求,才能检索需要在列表中显示的所有产品的名称。如果您在本地或数据库中缓存产品名称,您将获得更好的性能,节省资源,并且在Web服务关闭时也会有故障保护方案。

    参照完整性 是使用web服务时要考虑的另一个重要方面。由于web服务与数据库完全分离,因此您没有创建外键的选项,就像在仅数据库的解决方案中那样。这意味着web服务中的数据更改(即产品更新或删除)可能会破坏数据库中数据的完整性。

    关于 参考文献 ,这主要取决于您将要使用的web服务的类型(您没有指定要使用的服务)。如果服务基于rest原则,我可以推荐 Restful Web Services by Leonard Richardson and Sam Ruby . 尽管它并不专注于应用程序/服务集成,但它是对rest的一个很好的介绍。