Я управляю несколькими магазинами, и, поскольку это становится проблемой, я хочу перейти к новой настройке, где есть один API, который используется всеми магазинами. Я хочу использовать Laravel для магазинов, а также для API. Поскольку приложения ориентированы на электронную коммерцию, мне нужно где-то хранить тележки клиентов, и я хочу, чтобы они также были доступны через API. Дело в том, что у меня нет большого опыта в «Restfull» и программировании / мышлении без сохранения состояния, особенно в том, что касается сохранения чего-то вроде данных корзины, но я действительно хочу узнать об этом.
Таким образом, корзины нельзя хранить в сеансе PHP / Laravel, как в обычном веб-приложении, поскольку 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 использует временные метки, поэтому временные метки таблицы корзины будут изменены при добавлении чего-либо в корзину. поэтому я просто хочу запустить скрипт, который очищает таблицу базы данных, удаляя все старые корзины, которые имеют отметку времени updated_at, которая старше, например, на 3 месяца. К тому времени сеанс клиентского приложения уже давно истек, и эти тележки все равно не будут доступны.
// On the API server
$cart = Cart::where(['updated_at', '<=', Carbon::now()->subMonths(3)])->delete();
Итак, теперь мой вопрос: является ли это хорошим решением (и я знаю, что оно действительно субъективно) для извлечения и хранения данных корзины через RESTfull API? Это безопасно или есть какие-то уязвимости? Я никогда не программировал что-то подобное раньше, и я просто хочу проверить, вписывается ли мой образ мышления в образ мышления без состояния / RESTfull и в правильном ли я положении.
Заранее спасибо !!