API Spring Restful - Strategia del controller

2

Stiamo sviluppando un nuovo REST Api per la nostra applicazione web aziendale Spring MVC legacy (prima era comunicazione con i frontend Adobe Flex).

Come regola generale, abbiamo dichiarato che stavamo creando un @RestController per ogni modello che abbiamo nella nostra applicazione. Abbiamo anche un BaseController per la gestione dell'operazione CRUD su ogni modello.

Il fatto è che il backend della nostra applicazione è molto grande e monolitico, contando almeno 2-3 migliaia di classi del modello, quindi la creazione di un controller per ognuno di questi inizia a sembrare non realistico.

Inoltre, abbiamo utilizzato Swagger per la documentazione API, quindi sembra che per ogni controller aggiunto, Swagger impieghi un po 'di tempo all'avvio del server per mappare gli endpoint corrispondenti. Temo che questo si intensificherà in tempi di avvio del server molto lunghi (usiamo Tomcat).

È un antipattern mappare un controller per ogni classe di modello?

Grazie

    
posta frankieta 15.12.2017 - 19:28
fonte

1 risposta

1

Non penso che mappare un controller su un modello sarebbe considerato un antipattern. Se non hai mappato un controller per ogni modello, in quale altro modo stai attualmente pianificando di interagire con quel modello?

Sembra che il problema principale sia che ci sono un sacco di classi di modelli e la mappatura di ciascuna a un controller richiederà uno sforzo notevole. Hai detto che la regola era di creare un controller per ogni modello, ma a ciascun modello occorre davvero interagire direttamente o le classi di modelli possono essere combinate in una "risorsa" più ampia? Ad esempio, se si dispone di una persona e un modello di numero di telefono, è necessario esporre separatamente la persona e il numero di telefono? Oppure possono essere "uniti" in un'unica risorsa da esporre? Senza sapere cosa rappresentano le classi del modello, suggerirei di esaminarle e determinare se ci sono risorse di livello superiore che vorreste esporre. Se i modelli A, B e C sono componenti di una "risorsa" R, non esponeteli in modo indipendente ma attraverso un controller per la risorsa R.

Se ogni modello è indipendente e deve essere in grado di operare singolarmente, credo che ogni modello avrà bisogno del proprio controllore. Se stai cercando di accelerare questo processo, l'unica cosa che potrei pensare è se la maggior parte dei controller eseguono solo CRUD per automatizzare la generazione di quelle classi, o dato che hai menzionato che stai usando Spring, cercando gli strumenti all'interno di quel framework per fare alcuni lavori pesanti per te (progetto Spring Data Rest per esempio).

    
risposta data 15.12.2017 - 20:17
fonte

Leggi altre domande sui tag