Что происходит, когда мы соединяем в один из 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 Setbolos; 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 Setbolos; 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”