Dernière modification : Dec 08 , 2024

Pré-requis

Avant de commencer cet exercice, assurez-vous d'avoir les éléments suivants installés sur votre système :

  • JDK 11 ou supérieur
  • Apache Maven
  • Un éditeur de texte ou une IDE Java (comme Eclipse, IntelliJ IDEA, ou Visual Studio Code)

Étapes

Nous allons suivre la documentation de lien.

Nous avons besoin d'ajouter l'extension quarkus-smallrye-openapi à notre projet.

quarkus extension add quarkus-smallrye-openapi

Nous pouvons alors tester après redémarrage de l'application, l'URL fournissant le schéma OpenAPI.

̀Ouvrez votre navigateur à l'URL http://localhost:8080/q/openapi.

L'UI pour Swagger est disponible à cette adresse http://localhost:8090/q/swagger-ui/.

Documenter l'API REST

Créer une classe avec le code suivant :

package app;

import jakarta.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.info.License;
import org.eclipse.microprofile.openapi.annotations.tags.Tag;

@OpenAPIDefinition(
    tags = {
            @Tag(name="adoption", description="Adoption operations."),
            @Tag(name="communication", description="Communication/marketing services")
    },
    info = @Info(
        title="Adoption/Communication API",
        version = "1.0.0",
        contact = @Contact(
            name = "Example API Support",
            url = "http://exampleurl.com/contact",
            email = "techsupport@example.com"),
        license = @License(
            name = "Propriétaire",
            url = "https://www.monsteradoption.com"))
)public class ExampleApiApplication extends Application {
}

Documenter les ressources REST :

package adoption.rest;


import adoption.domain.AdoptionRepository;
import adoption.domain.Monster;
import jakarta.inject.Inject;
import jakarta.ws.rs.DELETE;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.PUT;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

import java.util.List;

import org.eclipse.microprofile.openapi.annotations.Operation;
import org.eclipse.microprofile.openapi.annotations.tags.Tag;
import org.jboss.resteasy.reactive.ResponseStatus;

@Path("/adoptions")
@Tag(name = "adoption")
@Produces(MediaType.APPLICATION_JSON)
public class AdoptionResource {

    @Inject
    AdoptionRepository adoptionRepository;

    @Operation(
        summary = "Get all monsters",
        description = "Get all monsters without pagination"
    )
    @GET
    public MonsterView getAllMonsters() {
        return new MonsterView(adoptionRepository.getAllMonsters());
    }

    @Operation(
            summary = "Find a monster by uuid",
            description = "Returns a monster by uuid"
    )
    @GET
    @Path("/{id}")
    public Monster getMonsterByUuid(String id) {
        return adoptionRepository.getMonsterByUuid(id);
    }

    @Operation(
            summary = "Search for a monster by name",
            description = "Search for a monster by name"
    )
    @GET
    @Path("/search/{name}")
    public MonsterView searchMonstersByName(String name) {
        return new MonsterView(adoptionRepository.searchMonstersByName(name));
    }

    @Operation(
            summary = "Submit a new adoption",
            description = "Submit a new adoption for a monster"
    )
    @POST
    public Monster createMonster(Monster monster) {
        adoptionRepository.addMonsterToAdopt(monster);
        return monster;
    }

    @Operation(
            summary = "Remove a monster from adoption",
            description = "Remove a monster from adoption"
    )
    @DELETE
    @Path("/{id}")
    @ResponseStatus(204)
    public void deleteMonsterById(String id) {
        adoptionRepository.deleteMonsterByUuid(id);
    }

    @Operation(
            summary = "Update a monster from adoption",
            description = "Update a monster from adoption"
    )
    @PUT
    @Path("/{id}")
    public Monster updateMonsterById(String id, Monster monster) {
        return adoptionRepository.updateMonsterByUuid(id, monster);
    }
}