<p dir="ltr"><br>
Il 15/set/2014 11:04 "Davide Marrone" <<a href="mailto:davide@skebby.com">davide@skebby.com</a>> ha scritto:<br>
><br>
> Ciao a tutti,<br>
> ho letto questo articolo:<br>
> <a href="http://www.infoq.com/articles/no-reliable-messaging">http://www.infoq.com/articles/no-reliable-messaging</a><br>
><br>
> non recentissimo ma che mi sembra molto interessante per quanto riguarda lo scambio di messaggi in maniera affidabile su REST o in generale su HTTP, in particolare la parte "Once, and Only Once".<br>
><br>
> Mi chiedevo se qualcuno ha mai implementato dei meccanismi del genere per lo sviluppo di un API o se avete mai utilizzato delle API di altri che vi hanno chiesto espressamente che ogni richiesta sia univoca, ad esempio passando un ID e che l'API puo' rispondere con un codice di errore di "richiesta duplicata".<br>
><br>
> Per poter avere questo livello di affidabilita' il client che usa il servizio remoto deve essere per forza coinvolto, deve sapere che:<br>
><br>
> 1) ogni richiesta deve essere univoca o deve avere un ID<br>
> 2) se non riceve una risposta puo' (e deve) ripetere la richiesta e puo' stare tranquillo che non sara' processata due volte, es in caso di creazione ordini o operazioni che hanno a che fare con il billing<br>
> 3) come risposta puo' ricevere un messaggio di codice di "richiesta duplicata" e lo deve gestire<br>
><br>
> @onebip: voi avete qualcosa del genere sulle API che date i clienti che possono billare un numero? Come fa il client a sapere se la sua richiesta e' stata processata, la connessione potrebbe saltare prima che ricevere il 200 o il messaggio di risposta.</p>
<p dir="ltr">Torna tutto:<br>
- se salta prima di iniziare, il client ripete la richiesta con lo stesso id senza problemi<br>
- se salta dopo che lo stato é cambiato, il client ripete la richiesta identica ma riceve 409 Conflict anziché 200 e smette di riprovare<br>
- se il server crasha a metà, il server deve garantire che la richiesta é gestita in modo idempotente</p>
<p dir="ltr">Il problema sorge se devi chiamare un'api esterna non idempotente, qui sorgono considerazioni di business (meglio at least once o at most once?)</p>
<p dir="ltr">><br>
> Ciao<br>
> Davide<br>
> _______________________________________________<br>
> Milano mailing list<br>
> <a href="mailto:Milano@ml.grusp.org">Milano@ml.grusp.org</a><br>
> <a href="http://ml.grusp.org/listinfo.cgi/milano-grusp.org">http://ml.grusp.org/listinfo.cgi/milano-grusp.org</a><br>
</p>