Rest 如何利用大摇大摆生成的Golang模型制作DTO
我在Go中实现RESTAPI时遇到了一些问题 我使用go-swagger来记录我的API。它生成一个基于结构的模型 我的第一个问题是,我不知道如何在我的swagger yaml文件中定义简单的hasMany关系 如果我需要一辆有很多轮子的车。在我的数据库中,我将有一个Rest 如何利用大摇大摆生成的Golang模型制作DTO,rest,go,swagger,Rest,Go,Swagger,我在Go中实现RESTAPI时遇到了一些问题 我使用go-swagger来记录我的API。它生成一个基于结构的模型 我的第一个问题是,我不知道如何在我的swagger yaml文件中定义简单的hasMany关系 如果我需要一辆有很多轮子的车。在我的数据库中,我将有一个车辆表和一个车轮表,其中包含车辆的id 由于车辆没有车轮id,因此在swagger中,我得到了一个简单的类型:object。 对于wheel,我有一个属性: vehicle: $ref: '#/definitions/V
车辆
表和一个车轮
表,其中包含车辆的id
由于车辆没有车轮id
,因此在swagger中,我得到了一个简单的类型:object
。
对于wheel,我有一个属性:
vehicle:
$ref: '#/definitions/Vehicle'
这将生成一个模型:
type Wheel struct {
...
Vehicle *Vehicle
}
当我请求一个控制盘列表时,这不是我希望API返回的结果
所以我需要一个DTO或某种映射器来在客户端和数据库之间工作
阅读
看起来这不是围棋的方式
我是否需要删除我的招摇过市文件中的所有参照,以便更好地匹配模型?(将$ref替换为属性id:type:string)
我是否需要使用此处描述的反射:
这种情况下的最佳实践是什么?我找到的解决方案是在swagger中创建一个自定义响应模型:
/vehicle/{id}:
get:
...
responses:
'200':
schema:
$ref: '#definitions/VehicleCustomeResponse'
我想我可以使用Swigger的
anyOf
来减少复制量。Go-Swigger不(也永远不会)支持openAPI 3,所以anyOf没有帮助。模型必须复制:(不清楚您希望web调用在这里完成什么。如果您从/vehicle/{id}
,如果不是车辆,你希望得到什么?如果车辆
没有车轮的概念,为什么当你撞到车辆
端点时,你想要一个车轮列表?我想要的是非常标准的。我想自定义我的响应。如果/get wheel/{id}我不想要整个车辆对象(其中包含许多其他引用)啊,那么是的,您必须创建一个自定义响应对象,因为包含对车辆定义的引用就是您向Swagger声明它应该在其返回中包含该模型。