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