OpenAPI spe c для реактивного REST-сервиса с использованием Quarkus - PullRequest
1 голос
/ 23 апреля 2020

Пока что

Я пытаюсь запустить реактивную службу REST, следуя официальному руководству , используя RESTEasy и JSON -B. Я также добавил поддержку OpenAPI для тестирования службы, следуя этому руководству .

Обе части работают самостоятельно, служба правильно возвращает жестко закодированные демонстрационные данные. Пользовательский интерфейс Swagger показывает доступные маршруты и позволяет их вызывать.

Однако это не так гладко, как мне бы хотелось ...

Из простых, нереактивных маршрутов, схем были правильно извлечены:

Fruit:
  type: object
  properties:
    description:
      type: string
    name:
      type: string

Но из реактивных маршрутов были извлечены пустые схемы. Например, введение

@GET
@Path("/{name}")
public Uni<Fruit> getOne(@PathParam(value = "name") String name) {
}

привело к схеме:

UniFruit:
  type: object

Есть ли способ повторно использовать существующую схему Fruit?

Я пытался комментируя маршрут, но это не имело никакого эффекта:

@GET
@Path("/{name}")
// @Schema(ref = "#/components/schemas/Fruit")  // Nope...
// @Schema(ref = "Fruit")                       // Nope...
public Uni<Fruit> getOne(@PathParam(value = "name") String name) {
}

В идеале, я бы не хотел аннотировать каждый реактивный метод отдельно в любом случае.

Вопрос

Есть ли способ настроить для всего проекта использовать схему T всякий раз, когда маршрут возвращает Uni<T> или Multi<T>?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Тем временем вы можете использовать атрибут implementation аннотации @Schema:

@GET
@Path("/{name}")
@APIResponse(
            content = @Content(mediaType = MediaType.APPLICATION_JSON,
                    schema = @Schema(implementation = Fruit.class)))
    public Uni<Fruit> getOne(@PathParam(value = "name") String name) {
}
0 голосов
/ 24 апреля 2020

Я просмотрел MicroProfile OpenAPI spe c https://github.com/eclipse/microprofile-open-api/blob/master/spec/src/main/asciidoc/microprofile-openapi-spec.adoc, но не смог найти способ выполнить изменение схемы в рамках проекта по вашему запросу. Вы можете сделать это для заданного класса, но здесь класс Uni, и вам нужны разные схемы в зависимости от параметризованного типа.

Таким образом, исправление в Quarkus кажется приемлемым подходом, если только не SmallRye OpenAPI (реализация ) имеет несколько конкретных c способов сделать это.

...