<p dir="ltr"><br>
Il 16/set/2014 13:03 "Matteo Vaccari" <<a href="mailto:vaccari@pobox.com">vaccari@pobox.com</a>> ha scritto:<br>
><br>
><br>
><br>
> 2014-09-16 10:37 GMT+02:00 Davide Marrone <<a href="mailto:davide@skebby.com">davide@skebby.com</a>>:<br>
>><br>
>> On 15/09/14 18:25, Badkill wrote:<br>
>>><br>
>>> Il giorno 15 settembre 2014 11:20, Davide Marrone <<a href="mailto:davide@skebby.com">davide@skebby.com</a><br>
>>> <mailto:<a href="mailto:davide@skebby.com">davide@skebby.com</a>>> ha scritto:<br>
>>><br>
>>><br>
>>><br>
>>>     @onebip: voi avete qualcosa del genere sulle API che date i clienti<br>
>>>     che possono billare un numero? Come fa il client a sapere se la sua<br>
>>>     richiesta e' stata processata, la connessione potrebbe saltare prima<br>
>>>     che ricevere il 200 o il messaggio di risposta.<br>
>>><br>
>>><br>
>>> Le 'risposte' avvengono solitamente in maniera asincrona, tramite delle<br>
>>> notifiche che hanno un id univoco e posso essere 'ritentate' in caso di<br>
>>> fallimento, a quel punto é il client che deve gestire l'idempotenza...<br>
>><br>
>><br>
>> Capisco, ma quando fa la richiesta sincrona non restituite niente? Solo HTTP/200? Nemmeno un ID che poi ripassate nella notifica asincrona?<br>
>><br>
>> Se ad esempio un cliente chiama<br>
>><br>
>> addebita 2 euro sul numero 3334455667 (relativo ad un servizio A)<br>
>> addebita 2 euro sul numero 3334455667 (relativo ad un servizio B)<br>
>><br>
>> e voi non restituite niente sulla richiesta sincrona poi quando ricevera' la notifica asincrona non sapra' piu' come distinguere le due notifiche. Oppure nella richiesta puo' specificare un suo ID che dopo si ritrova nella notifica? <br>
><br>
><br>
> Quest'ultima.  Nella richiesta /deve/ specificare un'id, altrimenti non possiamo restituire una risposta asincrona.<br>
><br></p>
<p dir="ltr">Stiamo mischiando 2 problemi qui: idempotenza della richiesta e correlazione della notifica che verrà fatta.</p>
<p dir="ltr">Il primo problema si risolve con un id di richiesta generato e passato dal client, che in caso di retry lo ripassa. Internamente usiamo gli ObjectId di MongoDB ad esempio, oppure UUID.</p>
<p dir="ltr">La correlazione della notifica può utilizzare l'id della richiesta visto che é già disponibile. Può anche avere un id remoto ritornato nella risposta sincrona, ma é un po' più laborioso perché la notifica potrebbe arrivare prima che tu possa registrare l'id remoto ed essere quindi rifiutata, necessitando anche lei di retry.<br></p>