<div dir="ltr">We've had to deal with this problem, like 2 days ago.<div><br></div><div>What we decided to do in the end was having a unique identifier on the client, and on the create action, if the unique identifier is already present on a record, we return a 307 temporary redirect, and redirect the client to the update action.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2015-04-25 1:28 GMT+01:00 Srushti Ambekallu <span dir="ltr"><<a href="mailto:srshti@gmail.com" target="_blank">srshti@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The way this manifested for us was iOS Safari not getting a confirmation of the first POST because of a spotty connection, and deciding to submit again (we disable the button on the first submit, so a double-click is less likely for us). As part of the API design, we request the consumers to send a unique transaction ID (a UUID, probably). We started out by failing on a duplicate transaction, but we’re not moving towards returning the response of the first request in the second.<br>
<br>
We will probably use redis or something similar to temporarily store these responses for a couple of minutes or so.<br>
<br>
I mentioned our solution in the context of the API specifically, because we have third party consumers of our API, as well as our own single-page Angular app and mobile apps which speak directly to the API.<br>
<br>
----<br>
Thanks,<br>
Srushti<br>
<div class="HOEnZb"><div class="h5"><br>
> On 25-Apr-2015, at 01:12, Andrew Stewart <<a href="mailto:boss@airbladesoftware.com">boss@airbladesoftware.com</a>> wrote:<br>
><br>
> Thanks, everyone, for all the suggestions.<br>
><br>
>> Tom:<br>
>> I assume we’re talking about a POST request that has side effects that shouldn’t be repeated, like sending an email or creating a row in a database table.<br>
><br>
> Yes, that's exactly what I'm talking about.<br>
><br>
> I hadn't thought of debouncing the side-effects instead of the requests.  Presumably one would have to explicitly code this in wherever necessary.  In contrast a middleware approach could apply to all POSTs.<br>
><br>
>> Rob:<br>
>> ... in the event of a double-click, it's the second submission that the user will actually see. If you're showing something useful on the confirmation page (even just the confirmation itself), you don't want to lose that in favour of a validation message.<br>
><br>
> That seems like a fairly crucial point – does it always hold?  No matter whether we somehow ignore the second POST or debounce its side-effects, we want the user to see the result of the first POST.<br>
><br>
> I think I'll experiment a little and see how things shake out.<br>
><br>
> Bon weekend!<br>
><br>
> Andy<br>
> _______________________________________________<br>
> Chat mailing list<br>
> <a href="mailto:Chat@lists.lrug.org">Chat@lists.lrug.org</a><br>
> Archives: <a href="http://lists.lrug.org/pipermail/chat-lrug.org" target="_blank">http://lists.lrug.org/pipermail/chat-lrug.org</a><br>
> Manage your subscription: <a href="http://lists.lrug.org/options.cgi/chat-lrug.org" target="_blank">http://lists.lrug.org/options.cgi/chat-lrug.org</a><br>
> List info: <a href="http://lists.lrug.org/listinfo.cgi/chat-lrug.org" target="_blank">http://lists.lrug.org/listinfo.cgi/chat-lrug.org</a><br>
<br>
_______________________________________________<br>
Chat mailing list<br>
<a href="mailto:Chat@lists.lrug.org">Chat@lists.lrug.org</a><br>
Archives: <a href="http://lists.lrug.org/pipermail/chat-lrug.org" target="_blank">http://lists.lrug.org/pipermail/chat-lrug.org</a><br>
Manage your subscription: <a href="http://lists.lrug.org/options.cgi/chat-lrug.org" target="_blank">http://lists.lrug.org/options.cgi/chat-lrug.org</a><br>
List info: <a href="http://lists.lrug.org/listinfo.cgi/chat-lrug.org" target="_blank">http://lists.lrug.org/listinfo.cgi/chat-lrug.org</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">Bruno Bonamin.</div>
</div>