Как сделать DTO из сгенерированной Swagger Golang модели - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть несколько проблем при реализации REST API в Go.

Я использую go -swagger для документирования своего API. Он генерирует модель, основанную на структурах.

Моя первая проблема - я не знаю в своем файле swamger yaml, как определить простые отношения hasMany.

Если мне нужно транспортное средство с большим количеством колеса. В моей базе данных у меня будет таблица vehicle и таблица wheel, которая содержит id транспортного средства.

Так как у автомобиля нет wheel_id, в swagger я получаю простой type: object , Для колеса у меня есть свойство:

  vehicle:
    $ref: '#/definitions/Vehicle'

Это создает модель:

type Wheel struct {
  ...
  Vehicle *Vehicle
}

Это не то, что я хочу, чтобы мой API возвращал, когда я запрашиваю список колес.

Так что мне нужен DTO или какой-то маппер для работы между клиентом и базой данных.

Чтение https://www.reddit.com/r/golang/comments/6xgzmp/model_to_dto_mapper_my_first_experience_with_go/ похоже, это не способ делать вещи в Go.

Нужно ли мне удалять все ссылки из файла сваггера, чтобы он лучше соответствовал модели? (замените $ ref на идентификатор свойства: тип: строка)

Нужно ли использовать отражение, как описано здесь: Аналог оператора распространения ?

Какова лучшая практика в этом случай

1 Ответ

0 голосов
/ 02 марта 2020

Решение, которое я нашел, состоит в том, чтобы создать собственную модель ответа в сваггере:

/vehicle/{id}:
  get:
    ...
    responses:
      '200':
        schema:
          $ref: '#definitions/VehicleCustomeResponse'

Я думаю, что могу использовать сваггер anyOf, чтобы уменьшить количество дублирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...