Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа
Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд
Как это решается?
Здравствуйте, TailWind, Вы писали:
TW>Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа
TW>Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд
TW>Как это решается?
Обычно это решается через REST. Где-то у Sinclair было подробное объяснение о REST, вроде вот этого
Протокол HTTP, но другое. Поищите по его сообщениям.
Общая идея — клиент генерирует GUID и указывает его в запросе, все запросы исполняются с проверкой, что такого GUID в совершённых операциях ещё не было.
Это очень грубое и поверхностное объяснение.
Здравствуйте, TailWind, Вы писали:
TW>Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа
TW>Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд
TW>Как это решается?
Общее решение методы api для таких случаев должны быть индепонентны.
Q>Общее решение методы api для таких случаев должны быть индепонентны.
Поясните на пальцах, плиз
Добустим нужно добавить карточку нового заказа в базу
Разные юзеры могут делать это одновременно
Здравствуйте, TailWind, Вы писали:
Q>>Общее решение методы api для таких случаев должны быть индепонентны.
TW>Поясните на пальцах, плиз
https://habr.com/ru/company/yandex/blog/442762/
Здравствуйте, TailWind, Вы писали:
TW>Программа -> http -> php -> mysql insert -> mysql ответ -> *** php ответ -> *** http ответ -> программа
TW>Если там, где *** произойдёт обрыв связи, то программа подумает, что запись не вставлена в бд и повторит добавление, что приведёт к появлению дубля в бд
TW>Как это решается?
Решается с помощью idempotency-key (ключей идемпотентности).
Клиент генерирует ключ идемпотентности (например, UUID) и отправляет его вместе с запросом. Если произойдет обрыв связи, то клиент повторно отправляет запрос, но с тем же ключом идемпотентности. И так до тех пор, пока не получит успешный ответ.
Сервер обрабатывает запросы, и при этом сохраняет ключи идемпотентности обработанных запросов. Перед обработкой запрос сервер ищет ключ идемпотентности среди сохраненных, и может определить, является ли данный запрос первым (который нужно обработать) или повторным (нужно отбросить).
Научно-популярно описано здесь, например:
https://habr.com/ru/company/yandex/blog/442762/