Рубрики
Без рубрики

Quercus + OpenAPI соединяет в себе тао бао, который нужно назвать шоколадный торт

Что происходит, когда мы соединяем один из melhoeres рамки веб-разработки с отличным инструментом… Помеченный java, кварками, ptbr, бразильскими иевами.

Что происходит, когда мы соединяем в один из melhoeres рамки веб-разработки с отличный инструмент , что позволяет, что люди и компьютеры понимают наше приложение? Результат мы узнаем скоро.

Давайте не будем слишком подробно останавливаться на то, что Swagger-это замечательное средство, и потому, что каждый должен использовать его. Есть несколько статей хорошие, что говорит на эту тему.

Мы будем создавать microsserviço, который добавляет, удаляет сведения о пирожных. Как microsserviço, как сущность, упрощены, поскольку в центре нашего внимания в OpenAPI. После этого, мы поставили заметки, чтобы описать наше приложение и использовании Swagger-UI для описания и обработки этой услуги.

Сначала мы будем создавать наш сервис тортов. Para fazer isso, vamos usar o плагин maven do Quarkus:

mvn io.quarkus:quarkus-maven-plugin:1.6.1.Final:create \
    -DprojectGroupId=cadastro-de-bolo \
    -DprojectArtifactId=open-api \
    -DclassName="com.BoloResource" \
    -Dpath="/bolo" \
    -Dextensions="resteasy-jsonb, smallrye-openapi, quarkus-smallrye-openapi"

С этого мы и создали проект необходимые расширения.

Чтобы избежать больших проблем, будем удалить два файла, которые были созданы автоматически.

Теперь, давайте создадим объект торт. Для этого, давайте создадим файл Торт.java внутри каталог src/main/java/с . После, мы будем поместить код ниже в файле.

package com;

public class Bolo {
  String nome;
  String descricao;

  public Bolo() {
  }

  public Bolo(String nome, String descricao) {
    this.nome = nome;
    this.descricao = descricao;
  }

  public String getNome() {
    return nome;
  }

  public void setNome(String nome) {
    this.nome = nome;
  }

  public String getDescricao() {
    return descricao;
  }

  public void setDescricao(String descricao) {
    this.descricao = descricao;
  }

}

Кроме файла Торт.java что мы создаем, мы будем вносить изменения в файл BoloResource.java с правилами нашего сервиса. Он будет стоять с этой стороны:

package com;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/bolo")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class BoloResource {
  private Set bolos;

  public BoloResource() {
    bolos = new HashSet<>();
    bolos.add(new Bolo("Chocolate", "Melhor bolo do mundo"));
    bolos.add(new Bolo("Sensação", "Chocolate com morango"));
  }

  @GET
  public Set list() {
    return bolos;
  }

  @POST
  public Set add(Bolo bolo) {
    bolos.add(bolo);
    return bolos;
  }

  @DELETE
  @Path("/{nome}")
  public Set delete(PathParam("nome") String nome) {
    bolos.removeIf(boloExistente -> //
        boloExistente.nome.equalsIgnoreCase(nome));
    return bolos;
  }
}

Эта услуга является довольно простой. Он список, добавляет или удаляет торты и всегда при операции добавления или удаления, он возвращает все торты зарегистрированных.

Сделано это, достаточно только запустить приложение с помощью команды:

mvn quarkus:dev

И все готово. У нас есть услуга карте. При обращении в адрес http://localhost:8080/openapi мы будем иметь файл описания endpoints этой службы. Файл имеет примерно такое лицо:

---
openapi: 3.0.1
info:
  title: Generated API
  version: "1.0"
paths:
  /bolo:
    get:
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetBolo'
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Bolo'
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetBolo'
  /bolo/{nome}:
    delete:
      requestBody:
        content:
          application/json:
            schema:
              type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SetBolo'
components:
  schemas:
    Bolo:
      type: object
      properties:
        descricao:
          type: string
        nome:
          type: string
    SetBolo:
      uniqueItems: true
      type: array
      items:
        $ref: '#/components/schemas/Bolo'

Действительно, есть описание в наш сервис. Однако, тот факт, что мы файлом описания, не значит, что эти сведения являются действительно полезными. Хотите сказать, мы обнаружили, что внутри endpoint /торт у нас есть методы GET, Post и Delete. Но и там? Что такое торт? Что он получает?

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

Давайте начнем с описания самой службы. Для этого просто создайте файл с именем Для этого просто создайте файл с именем в каталоге с и вставить следующий код.

package com;

import javax.ws.rs.core.Application;

import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition;
import org.eclipse.microprofile.openapi.annotations.info.Contact;
import org.eclipse.microprofile.openapi.annotations.info.Info;
import org.eclipse.microprofile.openapi.annotations.servers.Server;
import org.eclipse.microprofile.openapi.annotations.tags.Tag;

@OpenAPIDefinition(//
    tags = { //
        @Tag(name = "tutorial", description = "Exemplo de estudo."), //
        @Tag(name = "bolo", description = "Pessoas gostam de bolo.")//
    }, //
    info = @Info(//
        title = "A fantástica fábrica de bolo", //
        version = "1.0.0", //
        contact = @Contact(//
            name = "Fale com o Aleatório", //
            url = "https://github.com/lucasscharf")), //
    servers = { //
        @Server(url = "http://localhost:8080")//
    }) //
public class Descricao extends Application {
}

Этот класс служит в качестве якоря для аннотации, описания. Эти книжке описываю, что это приложение делает, кто сделал, важные сведения, etc… Полное описание и краткое лучшее из этих заметок, можно найти в документации по microprofile OpenAPI .

Мы также можем изменить наш файл BoloResource.java добавить в заметки описание OpenAPI. Новый файл будет выглядеть следующим образом:

package com;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.eclipse.microprofile.openapi.annotations.Operation;
import org.eclipse.microprofile.openapi.annotations.enums.SchemaType;
import org.eclipse.microprofile.openapi.annotations.media.Content;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import org.eclipse.microprofile.openapi.annotations.parameters.Parameter;
import org.eclipse.microprofile.openapi.annotations.parameters.RequestBody;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;

@Path("/bolo")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class BoloResource {
  private Set bolos;

  public BoloResource() {
    bolos = new HashSet<>();
    bolos.add(new Bolo("Chocolate", "Melhor bolo do mundo"));
    bolos.add(new Bolo("Sensação", "Chocolate com morango"));
  }

  @GET
  @Operation(summary = "Retorna todos os bolos cadastrados")
  @APIResponse(responseCode = "200", //
      content = @Content(//
          mediaType = MediaType.APPLICATION_JSON, //
          schema = @Schema(//
              implementation = Bolo.class, //
              type = SchemaType.ARRAY)))
  public Set list() {
    return bolos;
  }

  @Operation(summary = "Cadastra um bolo")
  @APIResponse(responseCode = "200", //
      description = "Retorna todos os todos os bolos cadastrados, incluindo o novo bolo", //
      content = @Content(//
          mediaType = MediaType.APPLICATION_JSON, //
          schema = @Schema(//
              implementation = Bolo.class, //
              type = SchemaType.ARRAY)))
  @POST
  public Set add(//
      @RequestBody(required = true, //
          content = @Content(//
              mediaType = MediaType.APPLICATION_JSON, //
              schema = @Schema(//
                  implementation = Bolo.class))) Bolo bolo) {
    bolos.add(bolo);
    return bolos;
  }

  @Operation(summary = "Deleta um bolo pelo nome do bolo")
  @APIResponse(responseCode = "200", //
      description = "Todos os bolos cadastrados menos aquele retirado", //
      content = @Content(mediaType = MediaType.APPLICATION_JSON, //
          schema = @Schema(implementation = Bolo.class, //
              type = SchemaType.ARRAY)))
  @DELETE
  @Path("/{nome}")
  public Set delete(//
      @Parameter(description = "Nome do bolo a ser retirado", required = true) //
      @PathParam("nome") String nome) {
    bolos.removeIf(boloExistente -> //
    boloExistente.nome.equalsIgnoreCase(nome));
    return bolos;
  }
}

Доступ к URL-адрес OpenAPI, давайте посмотрим, что информация более подробную информацию о наше приложение. Однако, вся эта описание до сих пор присутствует в файле yml, что не так же удобным для человека. Это поможет вам, но вы все еще можете сделать лучше.

Чтобы сделать все это, и многое другое, что мы имеем Swagger UI.

Развязный пользовательский интерфейс

Для тех кто не знает, Swagger UI-это инструмент, который позволяет просматривать и взаимодействовать с функциями API. Он создается посредством документации OpenAPI (той, что мы описали там), и позволяет иметь легкий доступ к back-end создание простого клиента.

Самая интересная часть в том, что Quarkus уже оставляет все готово для использования. После размещения заметки описание в нашем приложении, – это только доступ к url /swagger-ui нашего сервиса.

Делая это, мы будем иметь следующий экран:

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

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

Документация-это что-то очень важное. В OpenAPI позволяет как быстро документировать наше приложение, как уберегает вас остаться, что создание класса повторяющихся.

Это победа все стороны.

Использование очень Swagger UI, чтобы проверить различные записи на мои услуги, а затем автоматизировать все испытания.

Ох, и код этой должности может быть найден нет github .

Оригинал: “https://dev.to/lucasscharf/quarkus-openapi-uma-combinacao-tao-boa-que-deveria-se-chamar-bolo-de-chocolate-4eb7”