Apicurio-studio: Порядок пути в yml API не упорядочен и не соответствует пути в пользовательском интерфейсе.

Созданный на 12 мар. 2019  ·  5Комментарии  ·  Источник: Apicurio/apicurio-studio

Привет,

Не знаю, баг это или улучшение, но вот оно

Описание проблемы

Допустим, я хочу создать 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

Пользовательский интерфейс приятный, и пути отображаются отсортированными в соответствии с тем, что я хочу:

image

Но полученный 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

Итак, результирующая документация не упорядочена:

image

image

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

Что может быть сделано

У меня есть несколько идей, они далеки от совершенства, но это только начало
Может быть, мы сможем опираться на них и разработать

  • Всегда сортировать выводимый API
    Плюсы: Простота реализации (я так думаю?)
    Минусы: пользователи не могут выбирать свой порядок
  • Добавить возможность сортировки путей в выводимом API.
    Плюсы: Простота реализации (я так думаю?)
    Минусы: пользователь не может изменить порядок отдельных путей
  • Измените пользовательский интерфейс, чтобы отображаемые пути не были упорядочены,
    и добавить кнопку для сортировки всего + кнопки для перемещения отдельных путей вверх и вниз
    Достоинства: Решит все
    Минусы: сложнее всего реализовать (я думаю?)
enhancement

Самый полезный комментарий

Я тоже столкнулся с этой проблемой; мое наблюдение по этому поводу заключается в том, что APICURIO просто добавляет новое определение к текущему YAML либо при создании новых путей; или когда мы полностью заменяем yaml (например, для отдельного пути, если я что-то изменяю на вкладке «источник»).

Я вручную манипулирую базой данных, чтобы исправить это после того, как я сам изменяю YAML (затем обновляю столбец), и каким-то образом все сломалось, что мне нужно удалить проект и снова перезапустить.

Как сказал @EricWittmann , я думаю, что лучше всего отсортировать пути и другие списки перед передачей контента в ReDoc, или мы могли бы использовать другую кнопку на вкладке «Источник» рядом с кнопкой «Формат» (возможно, с именем «Сортировать пути»), с которыми мы можем справиться сами.

Все 5 Комментарий

Ой, извините, я забыл прикрепить 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 ?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги