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.
