Architettura: lo schema deve convalidare i messaggi di risposta in arrivo?

2

Un servizio Web che utilizzo utilizza XSD per descrivere la sua API. Di recente, hanno aggiunto un campo a un messaggio di risposta in cui non era presente xsd:any , quindi, quando il nostro validatore dello schema ha provato a convalidare rispetto al precedente xsd, non è riuscito. Abbiamo considerato questa incompatibilità a ritroso e aperto un ticket.

Il loro architetto ha risposto che dovremmo convalidare i nostri messaggi in uscita (richieste), ma non preoccuparci di convalidare le risposte. Dovremmo scegliere i campi che vogliamo nelle risposte e ignorare il resto. Ha anche detto che dovremmo impostare il nostro validatore di schemi per ignorare i "nuovi" campi e convalidare il resto.

Se esiste una tale impostazione per alcuni validatori di schemi, allora forse questo architetto non ha torto, ma d'altra parte se la mia applicazione si rompe perché un campo di cui non ho bisogno di preoccuparmi di cambiare (o di essere creato) non lo fa che indicano una violazione del principio di segregazione dell'interfaccia ? È davvero accettabile per me convalidare i singoli campi dell'oggetto frammentario invece di aspettarsi che sia tutto o niente corretto?

Mi rendo conto che non convalidare i dati in arrivo da un servizio esterno ha implicazioni di sicurezza, ma in questa domanda sto cercando di conoscere i principi architettonici più degli aspetti di sicurezza.

    
posta kojiro 03.06.2015 - 17:23
fonte

3 risposte

3

Their architect replied that we should validate our outgoing messages (requests)...

Non stanno praticando ciò che predicano. Se lo fossero, riceverai messaggi validi per l'XSD.

Il problema è sicuramente dalla loro parte e dovrebbero risolverlo, ma nel mondo reale dobbiamo spesso risolvere i problemi che altri creano, quindi potrebbe essere necessario "non preoccuparsi di convalidare le risposte" solo per mantenere le cose in corso.

Con i protocolli Internet in generale, proviamo a generare output conformi agli standard pur tollerando input non conformi. Sto cercando di trovare la RFC su HTML o HTTP (o qualunque cosa fosse) che la metta così, ma non molto in questo momento. Ma il punto è che sei tollerante dalla tua parte e aiuta a mantenere le cose andando benché sia sporco.

    
risposta data 03.06.2015 - 18:19
fonte
1

Se stai utilizzando le risposte come input per il tuo sistema, devi sicuramente convalidarle. Se stai solo verificando il successo o l'insuccesso, e possibilmente registrando alcuni ID restituiti, probabilmente non hai bisogno per validare, ma sono d'accordo che tu debba fare in modo che i ragazzi del servizio web risolvano il loro problema. Dovrebbero essere in atto procedure per passare a una nuova versione del servizio se apportano modifiche non retrocompatibili. E speriamo che questo li renderà un po 'più cauti nel progettare il loro schema in futuro!

    
risposta data 03.06.2015 - 20:51
fonte
1

Suppongo che, se esiste uno schema XSD, dovresti riuscire a convalidare qualsiasi cosa contro di esso. Bene, è lo scopo della sua esistenza;)

Quindi, suppongo che debbano solo rilasciare una nuova versione del loro schema per aggiornare il tuo software.

Come aggiungere un nuovo campo in una risposta ... Beh, se non ci fosse uno schema, penserei che non dovrebbe essere considerato un break a BC. Quando progetti un utente API, dovresti essere il più agile possibile. Rimuovere un campo o modificarne il formato dovrebbe essere una pausa per te. Ma l'aggiunta di una nuova non dovrebbe.

    
risposta data 07.06.2015 - 15:57
fonte

Leggi altre domande sui tag