【问题标题】:e-commerce website architecture电子商务网站架构
【发布时间】:2011-08-25 22:50:06
【问题描述】:

我想为一个电子商务网站应用程序创建一个休息架构。

其实会有:

  • 前台网站
  • 作为内容管理器和客户服务的后台网站
  • 一个处理所有功能逻辑的 RESTful WS

我对这个架构有几个问题:

1 - 它是电子商务应用程序的良好架构吗?

2 - RESTful WS 必须不能从外部访问或安全以供外部访问(如果我想提供访问产品描述的可能性,例如亚马逊对其产品所做的,但不是“安全”数据)

3 - 我怎样才能保护 WS?验证 ?授权?(我想我可以使用 Spring Security...)

4 - 对于支付等交易案例,如何在 REST WS 中完成?或者我必须创建一个用于两个网站的独立库吗?

非常感谢您。

【问题讨论】:

    标签: java security rest architecture e-commerce


    【解决方案1】:

    “1 - 它是电子商务应用程序的良好架构吗?”

    就个人而言,我认为在这种情况下使用 RESTful 架构是一种浪费。最好将必要的逻辑编码到一个公共库中,该库包含在前端和后端办公室中。

    为什么?

    简单地说,每个服务调用都需要您的网络服务器处理另一个请求。这意味着在本地执行额外的工作来创建请求,将数据从内存中的常规对象转换为 post 变量并发送请求。此外,接收方必须响应请求,将请求变量转换回可用的东西并进行处理。

    如果您决定 RESTful 服务需要运行在与托管前端和后端的 Web 服务器完全不同的机器上,那么您还有其他要求,例如在本地网络(电缆、路由器、网卡等)来推动它。

    简而言之,其中有许多步骤会增加内存和处理器需求,但几乎没有价值回报。此外,它从根本上增加了您必须编写的代码量,而且几乎没有 ROI。附加代码将归结为不断将数据从一种类型编组到另一种类型:例如int 值转换为字符串,用于构造您的 post 查询,然后在接收者接收 post,将其转换回 int(具有适当的类型和边界检查)并进行处理。

    有没有我会提倡为此使用 REST 的情况?供内部使用?不。如果需要由外部 3rd 方应用程序进行调用,则可以。

    “2 - RESTful WS 必须不能从外部访问...”
    不可以。您可以在本地网络范围内完全控制它。

    “3 - 我如何保护 WS ..”
    这里有很多方法,甚至都不好笑。您可以加密流量,您可以要求为每个请求提供用户凭据,甚至可能只是经过验证的 API 密钥。无论如何你都应该这样做。

    “4 - 对于支付等交易案例,如何在 REST WS 中完成...”
    它将以与传输其他数据完全相同的方式完成。将卡片信息发布到您的服务,然后您的服务会联系网关以运行交易,并将详细信息发送回调用网络应用程序。

    【讨论】:

      【解决方案2】:

      我最近刚开始实施一个电子商务网络应用程序,当时我得到了我的第一份实习。事实上,即使我没有使用 RESTful WS,我也使用了您在问题中提到的类似架构。

      从我的尝试和体验来看,我觉得把前台给客户的web服务和后台给员工的web服务分开是很方便的。首先,这将防止两种 Web 服务的代码混合在一起。因此,将来维护代码会更容易。我能想到的另一个好处是,一些公司不希望他们的员工在办公室外访问网络服务。这样一来,如果将这两种 Web 服务分开,就可以很容易地使前端的 Web 服务在 Internet 上可以访问,而使后端的 Web 服务只能在公司办公室的本地访问。如果您的后端 Web 服务被允许在线访问,我认为这种架构仍然可以在安全方面为您提供一些帮助。例如,假设可以使用 URL“http://mydomain.com/back/”访问您的后台 Web 服务。如果您的员工不向其他任何人透露“/back”,那么没有人会知道您的后台服务在这里可用。

      此外,关于“处理所有功能逻辑的 RESTful WS”,我不确定这是否是个好主意。例如,在我的 Web 应用程序中,即使员工和普通用户都可以登录系统,但我实际上有两种不同的“登录”方法。原因是在登录过程中,如果请求来自工作人员,我需要检查其他信息。此外,登录后,我发回给员工和用户的cookies也包含不同的信息集。因此,我认为在可能的情况下将功能逻辑部分分开可能会更好。以后维护代码也会更方便。

      关于如何保护你的 WS,我认为你写的是对的。在用户可以访问任何种类的服务之前,请他登录。此外,在用户访问特定种类的服务之前,请检查他是否有权访问它。这就是我在我的系统中所做的。

      最后,对于支付等交易案例,我不确定使用 RESTful WS 是否是个好主意。再次,我必须承认我以前从未使用过 RESTful WS,因此,我的意见可能不可靠。不过根据Oracle的documentation

      RESTful design may be appropriate when the web services are completely stateless. 
      A good test is to consider whether the interaction can survive a restart of the server.
      

      如果您想执行事务,我认为您的应用程序总是必须在某个时间点记住有关客户端的一些信息。例如,您需要记住他的购物车中的物品,或者当客户输入他的信用卡号码时,您需要阻止他在电影院预订的座位。

      那是我的 2 美分!如果我错了,请纠正我=)!

      【讨论】:

      • 仅供参考 - 您引用的 Oracle 文档是指您的服务是否需要 多个 请求来完成处理的概念。这个词的用法与它用于 CC 交易的方式完全不同。您只需向 Web 服务提交一个请求即可处理 cc 事务。
      • 另外,(这非常挑剔,所以请以最友好的方式对待它:):这不是“员工”,而是“员工”。工作人员是复数形式。另外,它不是“代码”,复数形式只是“代码”
      • @Chris Lively :P 感谢您的纠正!我对所有这些事情都很陌生。我只是想贡献一些东西并从反馈中了解更多呵呵^^。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 2015-05-10
      • 2017-09-07
      • 2011-07-21
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多