Sto lavorando su un'API Web per fornire dati a una terza parte in base alle specifiche fornite.
Il processo per ciascuna chiamata API è essenzialmente:
1. Estrarre i dati come XML
2. Deserializzare i dati in DTO (POCO)
3. Restituisci DTO come contenuto della risposta (che viene quindi serializzato su JSON tramite la negoziazione del contenuto Web API 2)
Mi è stato chiesto da qualcuno sul nostro team di sviluppo di convalidare i DTO.
Oltre a garantire che le risposte siano in un formato che il client può elaborare, che essenzialmente è stato già ottenuto creando le classi DTO, questo mi sembra uno spreco di energie. Ho controllato Google, ma l'unica validazione dell'output di cui si sta parlando è la disinfezione di valori come numeri di carte di credito e SSN. Non ricordo di aver mai visto un metodo convalidare un oggetto appena creato prima di restituirlo.
Poiché la risposta JSON è in realtà solo l'XML estratto dopo essere stato deserializzato e ricalibrato, l'unico modo in cui il DTO potrebbe essere non valido sarebbe se l'XML estratto non fosse valido. Quindi fondamentalmente testerei le estrazioni su ogni chiamata.
Tranne alcuni casi in cui è specificato il formato, in realtà non so quali valori sono considerati validi dal client. Il meglio che posso fare nella maggior parte dei casi è assicurarsi che non ci siano spazi vuoti. In sostanza, tenterei di ricreare ciecamente la convalida del client solo in modo da poter pre-validare i dati prima che il client lo confermasse comunque. Supponendo che sia riuscito a farlo bene, il risultato sarebbe stato quello di spostare l'onere di supporto iniziale per il nostro team perché il nostro server avrebbe lanciato eccezioni di convalida invece di il proprio client.
La struttura dei DTO è abbastanza complicata. Se ignoro il fatto che sono stati creati attraverso la deserializzazione, la convalida si complica rapidamente. La maggior parte dei problemi di convalida che dovrei verificare (ad esempio, elementi null array, valori vuoti) non sono effettivamente possibili nell'implementazione reale. XmlSerializer non creerà elementi di array nulli e i campi del database NOT NULL non determineranno la mancanza di elementi XML. Aggiungi la copertura del 100% del test unitario e questo sta aggiungendo un notevole sforzo e complessità.
La convalida dell'output è addirittura una pratica? Non l'ho mai visto prima. Sembra eccessivamente cauto e preventivo. Se è una pratica, c'è un altro termine che potrebbe aiutarmi a trovare maggiori informazioni sull'argomento?