# Jakarta RESTful Web Services (JAX-RS) en Quarkus

## **Introducción**

Jakarta RESTful Web Services (JAX-RS) es la especificación estándar para crear servicios REST en Java. Quarkus implementa completamente JAX-RS y además proporciona su propia extensión `quarkus-rest` que mejora el rendimiento.

## **¿Qué es JAX-RS?**

JAX-RS es una API Java para el desarrollo de servicios web RESTful. Permite crear endpoints HTTP usando anotaciones simples y POJOs (Plain Old Java Objects).

## **Características Principales**

### **1\. Anotaciones Básicas**

```go
@Path("/api/heroes")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class HeroResource {
    
    @GET
    public Response getAllHeroes() {
        return Response.ok(heroes).build();
    }
    
    @GET
    @Path("/{id}")
    public Response getHero(@PathParam("id") Long id) {
        return Response.ok(hero).build();
    }
    
    @POST
    public Response createHero(Hero hero) {
        return Response.status(201).entity(createdHero).build();
    }
}
```

### **2\. Métodos HTTP**

JAX-RS soporta todos los métodos HTTP:

* `@GET`: Obtener recursos
    
* `@POST`: Crear recursos
    
* `@PUT`: Actualizar recursos
    
* `@DELETE`: Eliminar recursos
    
* `@PATCH`: Actualización parcial
    
* `@HEAD`: Headers sin cuerpo
    
* `@OPTIONS`: Opciones del recurso
    

### **3\. Parámetros**

```go
@GET
@Path("/search")
public Response search(
    @QueryParam("name") String name,
    @QueryParam("powerLevel") @DefaultValue("80") int powerLevel,
    @PathParam("id") Long id,
    @HeaderParam("Authorization") String auth,
    @CookieParam("sessionId") String sessionId
) {
    // ...
}
```

### **4\. Respuestas**

```go
// Respuesta simple
return Response.ok(hero).build();

// Respuesta con status
return Response.status(Response.Status.CREATED).entity(hero).build();

// Respuesta con headers
return Response.ok(hero)
    .header("X-Custom-Header", "value")
    .build();

// Respuesta sin contenido
return Response.noContent().build();
```

## **Quarkus REST vs RESTEasy Classic**

Quarkus ahora recomienda usar `quarkus-rest` en lugar de `quarkus-resteasy`:

* **Mejor rendimiento**: Optimizado para Quarkus
    
* **Startup más rápido**: Menos overhead
    
* **API moderna**: Mejoras en la API
    

## **Serialización Automática**

Quarkus serializa/deserializa automáticamente objetos Java a/desde JSON:

```go
@POST
public Response createHero(Hero hero) {
    // 'hero' ya está deserializado desde JSON automáticamente
    Hero created = heroService.create(hero);
    return Response.ok(created).build(); // Se serializa automáticamente
}
```

## **Ejemplo Completo**

Nuestro demo muestra:

* Endpoints CRUD completos
    
* Búsquedas con query parameters
    
* Manejo de errores
    
* Validación de parámetros
    

## **Ventajas en Quarkus**

1. **Startup Rápido**: Los endpoints se registran en tiempo de compilación
    
2. **Serialización Automática**: JSON automático con Jackson
    
3. **Validación Integrada**: Bean Validation funciona automáticamente
    
4. **Testing Fácil**: REST Assured integrado
    

## **Conclusión**

JAX-RS en Quarkus es potente y fácil de usar. La integración nativa con CDI y Bean Validation hace que crear APIs REST sea muy sencillo.

## **Recursos**

* [Demo completo](file:///Users/josediaz/Projects/JoeDayz/jakartaee-2026/quarkus-demos/jax-rs/)
    
* [Quarkus REST Guide](https://quarkus.io/guides/rest)
    
* [Jakarta REST Specification](https://jakarta.ee/specifications/restful-ws/)
