我正在管理多个商店,因为这变得很麻烦,我想转移到一个新的设置,其中有一个API被所有商店消耗。我想将Laravel用于商店以及API。由于应用程序是以电子商务为重点,我需要将客户购物车存储在某个地方,我希望它们也可以通过API获得。问题是我没有很多关于'Restfull'和无状态编程/思考的经验,特别是没有关于保存像购物车数据这样的主题,但我真的很想了解它。
因此,购物车无法存储在PHP / Laravel会话中,就像它们在普通的Web应用程序中一样,因为API是无状态的。因此,我提出了以下解决方案(将产品添加到购物车的示例):
执行购物车端点调用时,请检查客户端应用会话中是否有购物车标识符,如果没有,请创建一个。在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思维模式以及我是否正常运行。
提前致谢!!
答案 0 :(得分:1)
听起来你有一些有用的东西......所以你可以把它留在那里。但是,如果我们只是头脑风暴〜我可能会做这样的事情......
上面的内容会: