在具有spring-boot和angular的客户端 - 服务器应用程序中。我找到的大多数资源都解释了如何从Spring引导中公开REST端点并使用http客户端从角度消耗它。
大多数情况下,JSON中的通信是预先规划的,在角度和弹簧启动端都维护DTO(DataTransfertObject)。
我想知道具有fullstack经验的人是否知道一些替代方法,避免在前端和后端维护DTO,也许在应用程序的两端共享模型?
答案 0 :(得分:1)
Swagger将是一个很好的工具,可以在这里使用。
您可以采用代码优先的方法,从Java控制器生成一个swagger规范& TOs或spec-first方法将生成您的Java控制器&来自swagger规范的TO。
无论哪种方式,您都可以使用swagger规范为客户端生成一组TypeScript接口。
答案 1 :(得分:0)
这是一个困难的话题,因为我们正在处理两种不同的技术堆栈。我看到的唯一方法是从公共数据模型生成这些对象。
答案 2 :(得分:0)
正如 Pace 所说,Swagger 将是您可以使用的一项很棒的功能。在这种情况下,加上 API 端点的 documentation,您可以在前端和后端之间同步对象模型。您只需使用 Swagger 的 .json
或 .yaml
文件即可通过 ng-swagger-gen 在前端生成服务和对象模型。
例如,当您想要构建或运行应用程序时,将用于生成服务和对象模型的命令放在 package.json
中:
...
"scripts": {
...
"start": "ng-swagger-gen && ng serve",
"build": "ng-swagger-gen && ng build -prod"
...
},
...
因此,在运行这些命令之一后,您将更新对象模型,如果对象属性名称或类型发生更改,添加/删除对象属性,您将收到错误,您必须先修复它然后继续前进。
注意:请记住,服务和对象模型将基于 Swagger 文件生成,因此应始终对其进行更新。
PS:我正在做一个项目,我们甚至后端的每个代码都是基于 Swagger 文件生成的;) 所以他们只是更改了 Swagger 文件,仅此而已。
答案 3 :(得分:0)
听起来不错,但行不通。这不仅仅是维护 dto 的。 假设 api 将 String 更改为 List。将您的打字稿 dto 从字符串更新为字符串 [] 是不够的。字符串操作背后的逻辑现在需要处理字符串列表。就我个人而言,我不觉得在双方维护 dto 很麻烦。灵活性和更简洁代码的小权衡(您将在不同的 dto 中使用不同的方法)