Ответы go -wagger изменились с указателя на значение - PullRequest
0 голосов
/ 06 февраля 2020

Я решил разделить большой файл swagger.yaml на 2 файла - один для хранения всех моделей системного уровня, а другой для хранения API для конкретной c службы. Я извлек модели в новый файл, сгенерировал модели и убедился, что они полностью идентичны старому поколению кода. Затем я перешел к исходному файлу и импортировал модели, используя ключевое слово "x- go -type", например:

State:
  x-go-type:
    import:
      package: myproj/swagger/gen/models/
    type: State

, когда я заново сгенерировал API, я вижу, что все ответы теперь используют значение скорее указатель. Но не только в структуре ответа - это также влияет на все API ответа. Это создает огромные различия, которые в основном бесполезны. Я пытаюсь выяснить, могу ли я отменить это изменение и сохранить исходный API (главным образом для предотвращения огромных изменений во многих сервисах, тестовый код и т. Д. c). Входящая структура параметров API также изменилась и теперь содержит внутренние структуры в виде значений, а не указателей. Их API также изменились, и поэтому изменение постепенно затрагивает большую часть базы кода.

Немного углубившись в код, я вижу файл "response.gotmpl" с кодом, соответствующим этим ответам, и я см. следующее:

// WithPayload adds the payload to the {{ humanize .Name }} response
func ({{ .ReceiverName }} *{{ pascalize .Name }}) WithPayload(payload {{ if and .Schema.IsComplexObject (not .Schema.IsBaseType) }}*{{ end }}{{ .Schema.GoType }}) *{{ pascalize .Name }} {
  {{ .ReceiverName }}.Payload = payload
  return {{ .ReceiverName }}
}

, который я прочитал так, как будто тип, который используется в ответе, больше не является BaseType (потому что это всегда был объект). Поэтому я предполагаю, что это был BaseObject, когда он был определен в части «define:» того же файла swagger.yaml, но это не так, когда он считается внешним типом.

Самая загадочная вещь, которую я здесь та же самая техника (использование "x- go -type") для использования структуры, созданной другим инструментом, не вызывает этой проблемы. и так как сами модели полностью идентичны, я не вижу, что это вызвало?

Подробности: Я использую go -wagger версии 0.21.0, commit: 7c0fc3ee340f9d99d85573bc54a57e303a639692 Ma c OS 10.14. 6 go 1.13.5

ps Я пытался добавить «x-nullable: false» и «x-isnullable: false» в нескольких местах, но это не внесло никаких изменений (не 100% уверен, что я использовал их правильно)

Спасибо

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