Rest 如何利用大摇大摆生成的Golang模型制作DTO

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

我在Go中实现RESTAPI时遇到了一些问题

我使用go-swagger来记录我的API。它生成一个基于结构的模型

我的第一个问题是,我不知道如何在我的swagger yaml文件中定义简单的hasMany关系

如果我需要一辆有很多轮子的车。在我的数据库中,我将有一个
车辆
表和一个
车轮
表,其中包含车辆的
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声明它应该在其返回中包含该模型。