yandex-market / yandex-market-partner-api

API Яндекс Маркета для продавцов
BSD 3-Clause "New" or "Revised" License
16 stars 3 forks source link

[Go] Unknown field при json unmarshal #8

Open DeOne4eg opened 2 weeks ago

DeOne4eg commented 2 weeks ago

С недавнего время появилась проблема в Go, которая ломает множество запросов.

Генерация:

openapi-generator generate \
  -i openapi/openapi.yaml \
  -g go \
  -o . \
  --git-host githost \
  --git-user-id user_id \
  --git-repo-id yandex-market \
  -p packageName=yamarket \
  -p structPrefix=true \
  -p enumClassPrefix=true \
  -p generateInterfaces=true \
  -p withGoMod=true

Версия:

> openapi-generator version
7.8.0

Суть: рассмотрим, например, метод https://api.partner.market.yandex.ru/campaigns/{campaignId}/stats/orders. В массиве orders присутствует поле buyerType, но в описании моделей (yaml файлы) этого поля нет. Из-за этого я получаю ошибку json: unknown field \"buyerType\", которая возвращается из json.Unmarshal().

Подобное происходит по многим методам и это лишь один вариант.

Дополнительно: Есть еще одна проблема, которая возникает в ChannelType:

func (v *NullableChannelType) Unset() {
    v.value = nil
    v.isSet = false
}

value является пустой структурой, поэтому никак не может быть nil. Правильный вариант struct{}{}, но, скорее всего, это все же проблема самого openapi-generator.

DeOne4eg commented 2 weeks ago

Если в генераторе установить disallowAdditionalPropertiesIfNotPresent=false, то все работает.

Но проблема с ChannelType остается.

vbauer commented 1 week ago

@DeOne4eg Доброго времени суток,

Подобное происходит по многим методам и это лишь один вариант.

Методы могу возвращать больше параметров, чем указано в спецификации. Такое происходит в двух случаях: либо параметр пессимизируют из контракта чтобы постепенно вывести, либо наоборот вводят новый параметр (который пока что еще не готов 100% открыться на всех пользоваталей)

Как вы правильно подметили, нужно включить disallowAdditionalPropertiesIfNotPresent=false

Есть еще одна проблема, которая возникает в ChannelType

Если я правильно понял комментарий, сам ChannelType описан как:

channels:
  description: Список каналов продвижения товаров.
  type: array
  nullable: true
  items:
    $ref: '../schemas.yaml#/ChannelType'