java - Hålla modeller mellan Spring Boot och Angular-applikation i synk. Alternativ?


I klient-server-applikationer med spring-boot och angular. De flesta resurser jag hittar förklarar hur man exponerar REST-endpoint från spring boot och konsumerar den från angular med en http-klient.

De flesta gånger rekommenderas det att kommunicera i JSON och att underhålla DTO:er (DataTransferObject) både på Angular- och Spring Boot-sidan.

Jag undrar om människor med fullstack-erfarenhet känner till något alternativ för att undvika att underhålla DTO:er både i frontend och backend, kanske genom att dela modeller mellan de två ändarna av applikationen?

Svar #1

Swagger skulle vara ett bra verktyg att använda här.

Du kan ta ett kod-först tillvägagångssätt som kommer att generera en Swagger-specifikation från dina Java-kontroller och TO:er eller ett spec-först tillvägagångssätt som kommer att generera dina Java-kontroller och TO:er från en Swagger-specifikation.

Hur som helst kan du sedan använda swagger-specifikationen för att generera en uppsättning TypeScript-gränssnitt för klientsidan.

Svar #2

Som Pace sa skulle Swagger vara en fantastisk funktion som du kan använda. I det här fallet, förutom att ha utmärkt dokumentation för API-slutpunkterna, kan du synkronisera objektmodeller mellan frontend och backend. Du behöver bara använda .json eller .yaml-filen från Swagger för att generera tjänster och objektmodeller på frontend-sidan genom att använda ng-swagger-gen. Sedan lägger du kommandot för att generera tjänster och objektmodeller i package.json när du vill bygga eller köra din applikation, till exempel:

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

Så efter att ha kört ett av dessa kommandon kommer du att ha uppdaterade objektmodeller och om ett objekts egenskapsnamn eller typ har ändrats, lägga till/ta bort objektets egenskap, kommer du att få ett fel och du måste åtgärda det först innan du går vidare.

Observera: Tänk bara på att tjänsterna och objektmodellerna kommer att genereras baserat på Swagger-filen, så den bör alltid uppdateras.

PS: Jag arbetade på ett projekt där till och med all kod på backend-sidan genererades baserat på Swagger-filen ;) så de ändrar bara Swagger-filen och det är allt.

Relaterade artiklar