Stiamo costruendo una SOA con un approccio RESTful ai servizi. Una volta che i sistemi sono in produzione, avremo molti clienti che utilizzano l'interfaccia, inclusi i sistemi interni e di terze parti.
Vorremmo essere in grado di consumare e eco nelle informazioni risposta data dal un'applicazione client come: -
- Session ID - Potrebbe essere un Java EE ID di sessione o cliente qualcosa di specifico, questo è utile per il team di supporto e il debug dei problemi del client per rintracciarli attraverso tutti i nostri sistemi.
- ID transazione - Un identificatore univoco per la richiesta che possiamo eco al client per aiutare il cliente in correlazione richiesta/risposta se essi invocano il servizio in modo asincrono o se implementiamo un processo di lunga esecuzione 202 stile accettati.
Soluzioni possibili
Così attaccano ai vincoli RESTful suggerirebbero abbiamo bisogno di utilizzare HTTP per implementare questo e ci sono diverse opzioni che potremmo implementare.
- intestazione Pragma - implementare estensione-pragma per la transazione-id, session-id, ecc Questo sembra purista di soluzioni in quanto utilizza un'intestazione HTTP standard, anche se sarei interessato è diventato una discarica per tutto ciò che non può essere disturbato a pensare correttamente.
- X-My-Header - intestazioni personalizzate per ogni campo che richiediamo. Può essere spogliato dai proxy, non HTTP di base quindi sembra anti-resto
- In stringa di query o rappresentazioni XML/JSON - Aggiungere i campi per tutte le nostre risorse. Poiché si tratta di un parametro operativo, sembra che debba essere fornito come metadata anziché su una risorsa.
- Cookies - utilizzare Cookie e Set-Cookie per contenere valori-chiave; utile nel caso di ID di sessione poiché la maggior parte delle implementazioni utilizza già i cookie. Dovrebbe re-inviare ogni volta per supportare la correlazione lato client che tipo di sconfigge il punto di utilizzo di un cookie.
La risposta
C'è un precedente per questo? Siamo pazzi? C'è qualcosa di ovvio che mi manca in tutte le mie ricerche? A nessuno importa davvero come sosterranno i loro servizi una volta che saranno schierati? Devo solo stare zitto e andare via?
Sto sperando che qualcuno possa aiutare.
P.S. scusa se questo è un po 'un saggio, il consiglio ha detto "essere specifico" ....
Grazie Peter, X- * header o Pragma sembrano essere le migliori (meno cattive) opzioni da un punto di vista di progettazione ma entrambi hanno i loro limiti. X- * essendo spogliato dai proxy potrebbe essere un problema minore dato che in pratica sembra che i proxy siano uno degli utenti chiave di questi (X-Forwarded-For) e entrambe le soluzioni richiedono documentazione esterna poiché non c'è nulla di predefinito in HTTP/REST per questo scopo. Ho anche sentito dire che alcuni framework superano l'intestazione di Pragma per scopi di caching con il supporto HTTP 1.0 e in realtà non supportano le estensioni. Forse HTTP 2.0 prenderà in considerazione il mio povero team di supporto ... – James
Quindi vorrei andare per X-headers. In realtà, l'ho fatto quando ero in quella situazione, simile al tuo. –