CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-io-quarkus--quarkus-rest

A Jakarta REST implementation utilizing build time processing and Vert.x for high-performance REST endpoints with reactive programming support, security integration, and cloud-native features.

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

index.mddocs/

Quarkus REST

Quarkus REST is a modern Jakarta REST (JAX-RS) implementation built on Vert.x for high-performance, reactive REST endpoints with build-time optimization.

Installation

Maven:

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-rest</artifactId>
</dependency>

Gradle:

implementation("io.quarkus:quarkus-rest")

Quick Start

Basic REST Endpoint

import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;

@Path("/hello")
public class HelloResource {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello, World!";
    }
}

Reactive Endpoint

import io.smallrye.mutiny.Uni;

@Path("/async")
public class AsyncResource {
    @GET
    public Uni<String> getData() {
        return Uni.createFrom().item("Async response");
    }
}

Secured Endpoint

import jakarta.annotation.security.RolesAllowed;

@Path("/admin")
@RolesAllowed("admin")
public class AdminResource {
    @GET
    public List<User> getUsers() {
        return userService.findAll();
    }
}

Core Concepts

Threading Model

  • Reactive methods (Uni, Multi, CompletionStage): Run on I/O threads (event loop)
  • Blocking methods (regular return types): Run on worker threads
  • Override with @Blocking or @NonBlocking annotations

Request Processing

  1. Request received on Vert.x event loop
  2. Security checks (if configured)
  3. Request filters execute
  4. Resource method invoked (I/O or worker thread)
  5. Response filters execute
  6. Response sent to client

Feature Overview

FeatureDescriptionReference
Jakarta RESTStandard JAX-RS annotations (@GET, @POST, @Path, etc.)jakarta-rest.md
ReactiveMutiny Uni/Multi for async operationsreactive-programming.md
SecurityRBAC, permissions, authenticationsecurity.md
FiltersRequest/response filtering, exception mappingfilters.md
REST ResponseType-safe response wrapperrest-response.md
REST ClientDeclarative REST clientsrest-client.md
StreamingSSE and reactive streamsstreaming.md
MultipartFile uploads and multipart formsmultipart-forms.md
CachingHTTP caching directivescaching.md
ConfigurationRuntime configuration optionsconfiguration.md

Common Annotations

HTTP Methods

@GET @POST @PUT @DELETE @PATCH @HEAD @OPTIONS

Parameter Binding

@PathParam("id")        // URL path parameter
@QueryParam("filter")   // Query string parameter
@HeaderParam("auth")    // HTTP header
@FormParam("data")      // Form field
@Context                // Inject context objects

Quarkus Shortcuts

@RestPath("id")         // Shorter @PathParam
@RestQuery("filter")    // Shorter @QueryParam
@RestHeader("auth")     // Shorter @HeaderParam

Security

@RolesAllowed("admin")           // Role-based access
@PermissionsAllowed("doc:read")  // Permission-based access
@Authenticated                    // Require authentication
@PermitAll                        // Allow all users

Filters & Mapping

@ServerRequestFilter      // Request filter method
@ServerResponseFilter     // Response filter method
@ServerExceptionMapper    // Exception to Response mapping

Response Types

Return TypeExecutionUse Case
TBlocking (worker thread)Simple synchronous operations
Uni<T>Non-blocking (I/O thread)Single async value
Multi<T>Non-blocking (I/O thread)Stream of values
CompletionStage<T>Non-blocking (I/O thread)Java async API
ResponseDepends on contentFull HTTP control
RestResponse<T>Depends on contentType-safe HTTP control

Quick Reference

Creating Responses

// Simple return
return "text";
return new User("Alice");

// RestResponse
return RestResponse.ok(user);
return RestResponse.notFound();
return RestResponse.status(201, created);

// Response builder
return Response.ok(entity)
    .header("X-Custom", "value")
    .build();

Error Handling

@ServerExceptionMapper
public Response handleError(MyException ex) {
    return Response.status(400)
        .entity(ex.getMessage())
        .build();
}

Reactive Patterns

// Transform
return repository.findById(id)
    .onItem().transform(entity -> new DTO(entity));

// Error recovery
return service.getData()
    .onFailure().recoverWithItem(defaultValue);

// Retry
return client.call()
    .onFailure().retry().atMost(3);

// Combine
return Uni.combine().all()
    .unis(uni1, uni2, uni3)
    .asTuple();

Documentation Structure

Guides

Step-by-step instructions for common tasks:

Examples

Real-world usage scenarios:

Reference

Detailed API documentation:

Core APIs:

Features:

Configuration & Integration:

Advanced:

Key Features

Build-Time Optimization

Quarkus processes REST endpoints at build time, generating optimized bytecode for faster startup and lower memory usage.

Reactive by Default

Seamless integration with Mutiny for non-blocking, reactive programming. Methods returning Uni or Multi automatically run on I/O threads.

Security Integration

Built-in support for role-based and permission-based access control with automatic security context management.

Flexible Filtering

Simplified filter annotations (@ServerRequestFilter, @ServerResponseFilter) with automatic parameter injection and reactive support.

Type-Safe Responses

RestResponse<T> provides type-safe response handling with full control over status, headers, and entity.

Declarative REST Clients

Create REST clients using interfaces with JAX-RS annotations. Supports reactive types, custom headers, and error handling.

Configuration

Common configuration properties:

# Base path for REST endpoints
quarkus.rest.path=/api

# Multipart configuration
quarkus.rest.multipart.input-part.default-charset=UTF-8

# Buffer sizes
quarkus.rest.input-buffer-size=10240
quarkus.rest.output-buffer-size=8191

See Configuration Reference for complete options.

Integration

Quarkus REST integrates with:

  • JSON: Jackson or JSON-B for serialization
  • XML: JAXB for XML support
  • Security: OIDC, JWT, Elytron
  • Database: Hibernate Reactive, Panache
  • Messaging: Reactive Messaging, Kafka
  • Observability: Micrometer, OpenTelemetry
  • Templates: Qute template engine

Performance Tips

  1. Use reactive types (Uni/Multi) for I/O operations
  2. Avoid blocking on I/O threads
  3. Use @NonBlocking for fast, non-blocking operations
  4. Enable HTTP/2 for better performance
  5. Configure buffer sizes for large payloads
  6. Use caching annotations for cacheable responses

Getting Help

  • Quarkus Guides: https://quarkus.io/guides/
  • API Docs: https://javadoc.io/doc/io.quarkus/quarkus-rest
  • Community: https://quarkus.io/community/

Next Steps

  1. Start with: Quick Start Guide
  2. Learn reactive: Reactive Programming Guide
  3. Secure your API: Security Setup Guide
  4. Explore examples: Common Scenarios
  5. Deep dive: Reference Documentation

docs

index.md

tile.json