Buat REST APIs sedarhana di Quarkus

Pastikan sudah ada ada koneksi ke db dengan contoh sederhana disini: https://undebugable.blogspot.com/2025/07/setup-postgresql-dan-quarkus-dengan.html.

Berikut contoh sederhana namun powerful untuk Quarkus REST API CRUD pada entitas User. Contoh ini menggunakan resource, DTO, dan service layer agar mudah dikembangkan ke depannya.

Penjelasan singkat:

  • UserResource: REST endpoint untuk CRUD.
  • UserService: Logika bisnis CRUD.
  • UserDTO: Data transfer object untuk input/output.
  • Gunakan dependency injection dan response yang sesuai. 

build.gradle

dependencies {
... 
implementation 'io.quarkus:quarkus-rest-jackson'
... 
}

User.java

package com.yoesoff.plate.entity;

import io.quarkus.hibernate.orm.panache.PanacheEntity;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;

@Entity
@Table(name = "app_users")
public class User extends PanacheEntity {
public String username;
public String password;
public String email;

// Default constructor
public User() {
}

// Constructor with parameters
public User(String username, String password, String email) {
this.username = username;
this.password = password;
this.email = email;
}

// Getters and setters can be added if needed
}

UserDTO.java

package com.yoesoff.plate.dto;

public class UserDTO {
public Long id;
public String username;
public String email;
}

 UserService.java

package com.yoesoff.plate.service;

import com.yoesoff.plate.entity.User;
import com.yoesoff.plate.dto.UserDTO;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.transaction.Transactional;
import java.util.List;
import java.util.stream.Collectors;

@ApplicationScoped
public class UserService {

public List<UserDTO> listAll() {
return User.listAll().stream()
.map(entity -> toDTO((User) entity))
.collect(Collectors.toList());
}

public UserDTO findById(Long id) {
User user = User.findById(id);
return user != null ? toDTO(user) : null;
}

@Transactional
public UserDTO create(UserDTO dto) {
User user = new User(dto.username, "default", dto.email);
user.persist();
return toDTO(user);
}

@Transactional
public UserDTO update(Long id, UserDTO dto) {
User user = User.findById(id);
if (user == null) return null;
user.username = dto.username;
user.email = dto.email;
return toDTO(user);
}

@Transactional
public boolean delete(Long id) {
return User.deleteById(id);
}

private UserDTO toDTO(User user) {
UserDTO dto = new UserDTO();
dto.id = user.id;
dto.username = user.username;
dto.email = user.email;
return dto;
}
}

UserResource.java

package com.yoesoff.plate.resource;

import com.yoesoff.plate.dto.UserDTO;
import com.yoesoff.plate.service.UserService;
import jakarta.inject.Inject;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import java.util.List;

@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class UserResource {

@Inject
UserService userService;

@GET
public List<UserDTO> list() {
return userService.listAll();
}

@GET
@Path("/{id}")
public Response get(@PathParam("id") Long id) {
UserDTO user = userService.findById(id);
if (user == null) return Response.status(Response.Status.NOT_FOUND).build();
return Response.ok(user).build();
}

@POST
public Response create(UserDTO dto) {
UserDTO created = userService.create(dto);
return Response.status(Response.Status.CREATED).entity(created).build();
}

@PUT
@Path("/{id}")
public Response update(@PathParam("id") Long id, UserDTO dto) {
UserDTO updated = userService.update(id, dto);
if (updated == null) return Response.status(Response.Status.NOT_FOUND).build();
return Response.ok(updated).build();
}

@DELETE
@Path("/{id}")
public Response delete(@PathParam("id") Long id) {
boolean deleted = userService.delete(id);
if (!deleted) return Response.status(Response.Status.NOT_FOUND).build();
return Response.noContent().build();
}

Postman

curl --location 'http://localhost:8080/users' \
--header 'Content-Type: application/json' \
--data-raw '{
    "username": "testuser",
    "email": "testuser@example.com"
}'

 

 

Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Numpang Kerja Remote dari Bandung Digital Valley

Cara Decompile berkas Dex dan Apk Android