Intestazione risposta HTTP per un ID richiesta univoco per il servizio REST

8

Per il nostro servizio REST voglio inviare un ID di richiesta univoco ad ogni risposta; utile per il debug di progetti interni, ma anche per offrire supporto a terze parti che potrebbero utilizzare il servizio in futuro.

Ho deciso che ho bisogno di utilizzare un'intestazione di risposta, poiché non tutte le richieste REST devono comportare un corpo di risposta (spesso API REST di livello inferiore si avvalgono solo di codice di stato e descrizione), ma dovrebbe comunque inviare indietro questo ID richiesta.

Voglio assicurarmi, se possibile, che io usi un HTTP Response Header che improbabile venga rimosso da qualsiasi proxy lungo il percorso.

Questo potrebbe essere molto importante in quanto un gran numero di client saranno probabilmente dispositivi mobili con ciò che è destinato a essere "interessanti" topologie di rete tra loro e i nostri server.

Tuttavia, è probabile che gli stessi servizi vengano commercializzati anche ad altre aziende con i loro firewall / proxy aziendali.

Per questo motivo ho praticamente escluso l'idea di utilizzare un'intestazione di risposta personalizzata a favore di un'intestazione ben nota.

La mia attuale intestazione famosa vincente sarebbe l'intestazione ETag , ma mentre è quasi giusta, non è abbastanza - perché ETag è per una risorsa, non una richiesta (es. due richieste separate per la stessa risorsa restituiranno legittimamente lo stesso ETag ). Inoltre, se lo faccio, significherebbe che non posso fare alcun tagging di entità per qualcos'altro.

Qualcuno ha qualche idea migliore?

Aggiorna

L'intestazione di Pragma, a quanto sembra, potrebbe essere utilizzata, ma sto riscontrando problemi di scrittura all'interno dell'Asp.Net WebAPI. Ecco una domanda correlata su SO .

    
posta Andras Zoltan 25.07.2012 - 17:43
fonte

2 risposte

4

Vorrei usare un corpo standardizzato e non usare l'intestazione. Ad esempio, ogni corpo può essere JSON e includere un campo ID. Finché è standardizzato su tutta la piattaforma, è garantito che funzioni.

Non userei un'intestazione personalizzata a causa del rischio che venga rimossa. Non utilizzerei un'intestazione standard perché non ne conosco uno che si adatti perfettamente (ad esempio l'ETag che menziona viene utilizzato per determinare le modifiche ai file e le chiavi di memorizzazione nella cache.)

    
risposta data 25.07.2012 - 19:58
fonte
0

Dai un'occhiata alle linee guida del team di Heroku. Tra le altre cose come Etags suggeriscono un ID di richiesta nell'intestazione. Stiamo cercando di implementare la maggior parte di queste linee guida laddove hanno senso.

Trace requests with Request-Ids

Include a Request-Id header in each API response, populated with a UUID value. If both the server and client log these values, it will be helpful for tracing and debugging requests.

link

    
risposta data 12.12.2014 - 15:57
fonte

Leggi altre domande sui tag