REST购物车

Sat*_*bbi 12 rest

可以使用REST架构约束实现购物车吗?

我想集中关于会话状态的问题.在实现购物车的典型MVC应用程序中,最有可能的是,会话对象将在会话中被管理,购物车将作为产品列表来管理.

如果应用程序遵循REST架构,那么如何管理同一个购物车.REST约束之一是状态管理是客户的责任.

购物车及其进度是否应由客户管理?任何例子?在简单的购物车或任何其他企业应用程序中管理客户端状态的任何缺点?

Jas*_*ers 12

将购物车作为资源存储在服务器上没有任何问题.它是应存储在客户端上的会话状态. https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm#sec_5_1_3

为了成为无状态,您的购物车URI应该能够识别独特的购物车,而无需依赖任何会话信息.

例如,/shopping-cart除非您的应用程序中只有一个购物车,否则可能还不够.

可能,每个用户至少会有一个购物车.所以,你可以使用像/user/1234/shopping-cart/shopping-cart?userID=1234.

更有可能的是,您可能需要为每个用户提供多个购物车.所以,你会想给你的车一个唯一的ID喜欢/user/1234/shopping-cart/5678或只是/shopping-cart/5678.

关键是,处理请求所需的一切都应该在请求中.


cas*_*lin 5

在REST应用程序中,会话状态完全由客户端管理,并且请求必须包含服务器必须理解的所有必要信息。例如,如果服务器要求身份验证,则每个请求必须包含凭据。

REST 无状态约束定义如下:

5.1.3无状态

客户端到服务器的每个请求都必须包含理解该请求所需的所有信息,并且不能利用服务器上任何已存储的上下文。因此,会话状态完全保留在客户端上。[...]

但是,无状态约束并不意味着服务器不应存储任何数据

会话状态由服务器管理的应用程序中,这是一种将购物车数据存储在HTTP会话中的常见方法。但是购物车不是会话状态。而且,很可能不应完全由客户端来管理它。

在REST中,购物车可以是由URL标识的资源,例如,/shopping-cart并且可以对其执行操作。所有购物车数据都可以保存到服务器上的数据库中。

可以命名的任何信息都可以是REST资源,甚至可以是购物车:

5.2.1.1资源和资源标识符

REST中信息的关键抽象是一种资源。可以命名的任何信息都可以是资源:文档或图像,临时服务(例如“洛杉矶今天的天气”),其他资源的集合,非虚拟对象(例如人)等。换句话说,任何可能成为作者超文本引用目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点与该映射相对应的实体。[...]

您可以在购物车上执行以下操作:

  • GET /shopping-cart:获取购物车。

  • POST /shopping-cart:将一个商品添加到购物车(与您要添加的商品以及请求正文中的金额一起发送一些数据)。

  • DELETE /shopping-cart/11从购物车中删除具有ID 的商品。

  • PATCH /shopping-cart:更新购物车(在请求正文中发送一些要更新的数据)。

  • PUT /shopping-cart:替换购物车的全部内容(在请求正文中用购物车的内容发送一些数据)。

  • DELETE /shopping-cart:删除购物车

  • POST /shopping-cart/order:订购购物车内容

因此,请注意客户端不会随时存储有关购物车的任何信息。与购物车有关的所有信息都将存储在服务器中。


有关REST的更多信息,我建议阅读Roy T. Fielding 论文第5章