# #java #go #openapi #openapi-generator
Вопрос:
Поэтому я использую OpenAPI для создания классов API на Golang и Java. То, как генераторы соответствующих языков интерпретируют файл yml, похоже, отличается.
Вот часть файла yml:
parameters:
- name: collectionName
schema:
type: string
- name: filter_by
in: query
schema:
type: string
required: true
- name: batch_size
in: query
required: true
schema:
type: integer
И генератор для Golang сгенерировал следующую структуру:
type DeleteDocumentsParams struct {
FilterBy string `json:"filter_by"`
BatchSize int `json:"batch_size"`
}
в то время как для Java такой класс не был создан. Однако, если я заключу параметры filter_by
и batch_size
в такой объект, как этот
parameters:
- name: collectionName
in: path
description: The name of the collection to delete documents from
required: true
schema:
type: string
- name: deleteQueryParams
in: query
schema:
type: object
properties:
filter_by:
type: string
batch_size:
type: integer
Класс DeleteQueryParams создается в Java. Но в Golang параметры добавляются во вложенную структуру, подобную этой
type DeleteDocumentsParams struct {
DeleteQueryParams *struct {
BatchSize *int `json:"batch_size,omitempty"`
FilterBy *string `json:"filter_by,omitempty"`
} `json:"deleteQueryParams,omitempty"`
}
Короче говоря, генератор Golang добавляет слой упаковки для параметров запроса, которые я указываю, в то время как генератор Java этого не делает. Возможно ли добиться единообразия в этом случае. Или есть ли какие-либо флаги, которые я могу использовать для включения или отключения переноса параметров объектов?
Комментарии:
1. Так что я уже пробовал использовать
openapi-generator
раньше. Качество кода было невелико, и его было относительно сложно использовать. Попробовав несколько других вариантов, я обнаружил, что это лучший генератор для спецификаций OpenAPI:go-swagger
. Вот несколько ссылок на документацию, относящуюся к вашей проблеме дляgo-swagger
: модели и схемы .go-swagger
поддерживает только OpenAPI 2.0, он же Swagger 2.0.