java - Holde modeller synkronisert mellom Spring Boot- og Angular-applikasjon. Alternativer?


I klient-server-applikasjoner med Spring Boot og Angular. De fleste ressursene jeg finner forklarer hvordan man eksponerer REST-endepunkter fra Spring Boot og bruker dem fra Angular med en HTTP-klient.

For det meste anbefales det å kommunisere i JSON, og opprettholde DTOer (DataTransferObject) både på Angular- og Spring Boot-siden.

Jeg lurer på om folk med fullstack-erfaring kjenner til noen alternativer for å unngå å vedlikeholde DTO-er både i frontend og backend, kanskje ved å dele modeller mellom de to endene av applikasjonen?

Svar #1

Swagger ville være et godt verktøy å bruke her.

Du kan ta en kode-først tilnærming som vil generere en Swagger-spesifikasjon fra dine Java-kontrollere og TO-er, eller en spesifikasjon-først tilnærming som vil generere dine Java-kontrollere og TO-er fra en Swagger-spesifikasjon.

Uansett kan du deretter bruke swagger-spesifikasjonen til å generere et sett med TypeScript-grensesnitt for klient-siden.

Svar #2

Som Pace sa, ville Swagger være en flott funksjon som du kan bruke. I dette tilfellet, i tillegg til å ha god dokumentasjon for API-endepunktene, kan du synkronisere objektmodeller mellom frontend og backend. Du må bare bruke .json eller .yaml-filen fra Swagger for å generere tjenestene og objektmodellene på frontend-siden ved å bruke ng-swagger-gen. Deretter legg inn kommandoen for å generere tjenester og objektmodell i package.json når du vil bygge eller kjøre applikasjonen din, for eksempel:

...
    "scripts": {
    ...
    "start": "ng-swagger-gen && ng serve",
    "build": "ng-swagger-gen && ng build -prod"
     ...
  },
...

Så etter å ha kjørt en av disse kommandoene vil du ha oppdaterte objektmodeller, og hvis et objekts eiendomsnavn eller type har endret seg, legge til/fjerne en objekt-eiendom, vil du få en feil og du må fikse den først før du går videre.

Merk: Husk at tjenester og objektmodeller vil bli generert basert på Swagger-filen, så den bør alltid oppdateres.

PS: Jeg jobbet på et prosjekt der til og med all kode på backend-siden ble generert basert på Swagger-filen ;) så de bare endret Swagger-filen, og det var det.

Relaterte artikler