[pugMI] Affidabilita' servizi REST/HTTP

Davide Marrone davide a skebby.com
Mar 16 Set 2014 01:48:22 PDT


On 15/09/14 19:38, Gaetano Giunta wrote:
> Davide Marrone wrote:
>>>  > @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.
>>>
>>> Torna tutto:
>>> - se salta prima di iniziare, il client ripete la richiesta con lo
>>> stesso id senza problemi
>>
>> si, ok
>>
>>> - se salta dopo che lo stato é cambiato, il client ripete la richiesta
>>> identica ma riceve 409 Conflict anziché 200 e smette di riprovare
>>
>> ok, e' quello che dicevo sopra, il client deve essere a conoscenza che
>> puo' riprovare e che puo' ricevere un errore di richiesta duplicata.
>> Quindi avete implementato un controllo di richiesta duplicata per dare
>> il 409?
>> Se il client fa una prima richiesta e salta la connessione prima che
>> riceve la risposta dal server lui deve riprovare ma deve anche passare
>> un identificativo per dire che la seconda richiesta e' quella di prima
>> ripetuta altrimenti il server pensera' che e' una nuova, giusto?
>>
>>> - se il server crasha a metà, il server deve garantire che la richiesta
>>> é gestita in modo idempotente
>>
>> ok, pensavo di piu' all'interruzione della connessione rispetto al
>> crash del server
>>
>>>
>>> Il problema sorge se devi chiamare un'api esterna non idempotente, qui
>>> sorgono considerazioni di business (meglio at least once o at most
>>> once?)
>>>
>>
>> stavo ragionando piu' che altro sul fatto che se la connessione viene
>> persa prima di ricevere una risposta il client deve riprovare ma deve
>> anche essere sicuro di non generare una richiesta duplicata, come
>> l'esempio dell'acquisto dei libri nell'articolo. Il client quando
>> riprova deve per forza far capire al server che la richiesta non e'
>> nuova ma sta riprovando e deve quindi usare un ID.
>>
>> Non ho mai visto (o non ho mai fatto caso ad) un API che ti chiede di
>> passare un identificativo nella richiesta per cui mi chiedevo se
>> qualcuno ne avesse mai vista una che funzionasse in questo modo.
>
> Il fatto che molte API esistenti non abbiano idea del concetto di
> transazione (gestita con qualsiasi tecnica) la dice lunga sulla qualita'
> del codice che ti puoi aspettare di trovare alzando il coperchio.
> Se avessi un cent per ogni sito che non mi da nessun feedback quando
> clicco su un bottone e la chiamata ajax soggiacente fallisce, sarei zio
> Paperone :-D
>

esatto, era proprio quello che chiedevo, credo che la maggior parte 
delle API sia implementato senza tenere in considerazione questo 
aspetto, mi chiedevo quindi se qualcuno avesse mai visto/implementato 
una soluzione simile

ciao
Davide


Maggiori informazioni sulla lista Milano