【发布时间】:2018-10-14 04:32:31
【问题描述】:
我正在管理多个商店,由于这变得很麻烦,我想转移到一个新设置,在该设置中,所有商店都使用一个 API。我想将 Laravel 用于商店和 API。由于该应用程序专注于电子商务,因此我确实需要将客户购物车存储在某个地方,并且我希望它们也可以通过 API 使用。问题是我在“Restfull”和无状态编程/思考方面没有很多经验,尤其是在保存购物车数据之类的主题方面,但我真的很想了解它。
因此,由于 API 是无状态的,因此购物车不能像在普通 Web 应用程序中那样存储在 PHP/Laravel 会话中。因此我想出了以下解决方案(将产品添加到购物车的示例):
-
在执行对购物车端点的调用时,检查客户端应用的会话中是否有购物车标识符,如果没有,则创建一个。在 API 上请求与购物车相关的端点时,始终发送此唯一标识符。
// On the client app $http->post('https://api.mainapp.com/cart/add', 'json' => [ 'product_id' => 1, 'cart_identifier' => session()->get('cart_identifier'), ]); -
购物车端点检查是否提供了唯一标识符并通过唯一标识符从数据库中检索购物车
// On the API server $cart = Cart::where(['cart_identifier', 'qgbwaqt4jibijycDhY4U'])->firstOrFail(); return $cart->addToCart(['product_id' => 1]);
3.1。如果唯一标识符没有购物车,则创建一个新购物车并在新购物车上执行操作。
// On the API server
$newCart = Cart::create(['cart_identifier' => 'qgbwaqt4jibijycDhY4U']);
$newCart->addToCart(['product_id' => 1]);
-
Laravel 使用时间戳,所以当有东西被添加到购物车时,购物车表的时间戳会被修改。因此,我只想运行一个脚本来清理 db 表,删除所有具有 updated_at 时间戳的旧购物车,例如 3 个月。到那时,客户端应用的会话早已过期,无论如何这些购物车都不会被访问。
// On the API server $cart = Cart::where(['updated_at', '<=', Carbon::now()->subMonths(3)])->delete();
所以现在我的问题是:对于通过 RESTfull API 检索和存储购物车数据,这是一个好的解决方案(我知道这真的很主观)吗?它是安全的还是有任何漏洞?我以前从未编写过这样的程序,我只是想检查一下我的思维方式是否适合无状态/RESTfull 思维方式,以及我是否走上正轨。
提前致谢!!
【问题讨论】: