Привет,
Не знаю, баг это или улучшение, но вот оно
Допустим, я хочу создать API с четырьмя путями:
POST /bar
GET /bar/{id_bar}
POST /foo
GET /foo/{id_foo}
Но давайте рассмотрим, что я вставляю их с помощью пользовательского интерфейса в этом конкретном порядке:
GET /foo/{id_foo}
POST /bar
GET /bar/{id_bar}
POST /foo
Пользовательский интерфейс приятный, и пути отображаются отсортированными в соответствии с тем, что я хочу:
Но полученный yml не упорядочен и не соответствует тому, что отображается в пользовательском интерфейсе:
openapi: 3.0.2
info:
title: 'Test API'
version: 1.0.0
paths:
'/foo/{id_foo}': {}
/bar: {}
'/bar/{id_bar}': {}
/foo: {}
Обычно меня не волнует порядок путей в необработанном файле yml.
Но дело в том, что ReDoc следует порядку путей в yml
Итак, результирующая документация не упорядочена:
Это проблема, потому что как только API запускается, некоторые пути обновляются, некоторые удаляются, а некоторые создаются.
Это означает, что полученная документация быстро превращается в беспорядочную кашу.
У меня есть несколько идей, они далеки от совершенства, но это только начало
Может быть, мы сможем опираться на них и разработать
Ой, извините, я забыл прикрепить YML, который я использовал для скриншотов ReDoc
(Тот, что я вставил, не имеет операций, поэтому ReDoc генерирует пустой документ)
openapi: 3.0.2
info:
title: 'Test API'
version: 1.0.0
paths:
'/foo/{id_foo}':
get:
summary: 'Obtain a foo'
parameters:
-
name: id_foo
in: path
required: true
schema:
type: number
responses:
'201':
description: 'A foo'
/bar:
post:
summary: 'Create a bar'
responses:
'200':
description: 'A bar'
'/bar/{id_bar}':
get:
summary: 'Obtain a bar'
parameters:
-
name: id_bar
in: path
required: true
schema:
type: number
responses:
'201':
description: 'Bar created'
/foo:
post:
summary: 'Create a foo'
responses:
'200':
description: 'Foo created'
Это интересный вопрос, который, как ни удивительно, раньше не поднимался! На самом деле в пользовательском интерфейсе есть несколько мест, где, я думаю, мы должны предоставить ваш вариант C — отображать элементы в том порядке, в котором они появляются в документе, но предлагать варианты сортировки и изменения порядка (предположительно, перетаскиванием).
Тем не менее, временным решением будет сортировка путей и других списков перед передачей контента в ReDoc. Это было бы быстро и легко сделать, и это решило бы конкретную проблему функции «Предварительный просмотр» Apicurio.
Есть какие-нибудь мысли/идеи по этому поводу, @jsenko ?
Я тоже столкнулся с этой проблемой; мое наблюдение по этому поводу заключается в том, что APICURIO просто добавляет новое определение к текущему YAML либо при создании новых путей; или когда мы полностью заменяем yaml (например, для отдельного пути, если я что-то изменяю на вкладке «источник»).
Я вручную манипулирую базой данных, чтобы исправить это после того, как я сам изменяю YAML (затем обновляю столбец), и каким-то образом все сломалось, что мне нужно удалить проект и снова перезапустить.
Как сказал @EricWittmann , я думаю, что лучше всего отсортировать пути и другие списки перед передачей контента в ReDoc, или мы могли бы использовать другую кнопку на вкладке «Источник» рядом с кнопкой «Формат» (возможно, с именем «Сортировать пути»), с которыми мы можем справиться сами.
Как и в #394, я думаю, что общая идея здесь заключается в том, что пользовательский интерфейс Apicurio должен соответствовать порядку YAML для всех типов элементов (пути, поля, возможно, типы данных), потому что этот порядок иногда важен (например, для создания документации).
Одна простая вещь, которая была бы здесь полезна, — включить кнопку «Сохранить» при редактировании необработанного YAML и изменении только порядка элементов. В настоящее время Apicurio слишком умен и делает кнопку «Сохранить» серой, когда единственное, что изменилось, — это порядок элементов.
Я думаю, что лучше всего, чтобы порядок в пользовательском интерфейсе соответствовал источнику (как уже упоминалось), и чтобы пользователи могли перемещать элементы с помощью перетаскивания. Это не тривиальное изменение, но это правильное решение, ИМО. Мысли @jsenko ?
Самый полезный комментарий
Я тоже столкнулся с этой проблемой; мое наблюдение по этому поводу заключается в том, что APICURIO просто добавляет новое определение к текущему YAML либо при создании новых путей; или когда мы полностью заменяем yaml (например, для отдельного пути, если я что-то изменяю на вкладке «источник»).
Я вручную манипулирую базой данных, чтобы исправить это после того, как я сам изменяю YAML (затем обновляю столбец), и каким-то образом все сломалось, что мне нужно удалить проект и снова перезапустить.
Как сказал @EricWittmann , я думаю, что лучше всего отсортировать пути и другие списки перед передачей контента в ReDoc, или мы могли бы использовать другую кнопку на вкладке «Источник» рядом с кнопкой «Формат» (возможно, с именем «Сортировать пути»), с которыми мы можем справиться сами.