电子商务网站架构

时间:2011-08-25 12:03:01

标签: java security rest architecture e-commerce

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

事实上,会有:

  • 前台网站
  • 后台办公室网站,充当内容管理员和客户服务
  • 处理所有功能逻辑的RESTful WS

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

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

2 - RESTful WS必须从外部无法访问或被外部访问(如果我想提供访问产品描述的可能性,例如亚马逊为其产品访问,但不是'安全'数据)

3 - 我如何保护WS?认证?授权?(我想我可以使用Spring Security ......)

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

非常感谢你。

2 个答案:

答案 0 :(得分:2)

“1 - 这是一个很好的电子商务应用程序架构吗?”

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

为什么?

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

如果您确定RESTful服务需要与托管前台和后端的Web服务器完全不同的计算机上运行,​​那么您还需要额外的要求,例如在本地网络上加载更多负载(电缆,路由器,网络等)推动它。

简而言之,那里有许多步骤可以增加内存和处理器的要求,但几乎没有提供任何价值。此外,它会从根本上增加您必须编写的代码量,同样几乎没有ROI。额外的代码将归结为不断地将数据从一种类型编组到另一种类型:例如int值为一个字符串,用于构造您的帖子查询,然后在接收者上发帖子,将其转换回int(具有适当的类型和边界检查)和处理。

是否存在我主张使用REST的情况?供内部使用?没有。如果呼叫需要由外部第三方应用程序进行,那么是。

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

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

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

答案 1 :(得分:1)

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

根据我的尝试和经验,我觉得将客户的前端Web服务与员工的后台Web服务分开是非常方便的。首先,这将阻止两种Web服务的代码混合在一起。因此,将来维护代码会更容易。我能想到的另一个好处是,有些公司不希望员工访问办公室外的网络服务。因此,如果您将两种Web服务分开,则可以轻松地在Internet上访问前端Web服务,并且只能在公司办公室内本地访问后端Web服务。如果允许您的后台Web服务可以在线访问,我认为这种架构仍然可以帮助您在安全方面。例如,假设您可以使用URL“http://mydomain.com/back/”访问您的后台Web服务。如果您的员工没有向其他人透露“/ back”,则没有人会知道您的后台服务是否可用。

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

关于如何保护您的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美分!如果我错了,请纠正我=)!