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.
关键是,处理请求所需的一切都应该在请求中.
在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/1:1从购物车中删除具有ID 的商品。
PATCH /shopping-cart:更新购物车(在请求正文中发送一些要更新的数据)。
PUT /shopping-cart:替换购物车的全部内容(在请求正文中用购物车的内容发送一些数据)。
DELETE /shopping-cart:删除购物车
POST /shopping-cart/order:订购购物车内容
因此,请注意客户端不会随时存储有关购物车的任何信息。与购物车有关的所有信息都将存储在服务器中。
有关REST的更多信息,我建议阅读Roy T. Fielding 论文的第5章。
| 归档时间: |
|
| 查看次数: |
11983 次 |
| 最近记录: |