Uso do HATEOAS no Projeto Spring Boot - Felipe-builder/rest-conexa-challenger GitHub Wiki

Uso do HATEOAS no Projeto Spring Boot

Este documento descreve a implementação do HATEOAS (Hypertext As The Engine Of Application State) em um projeto Spring Boot 3.1.0. O HATEOAS é uma abordagem que permite a descoberta dinâmica de recursos por meio da navegação em links dentro das respostas da API.

Dependência Maven

Para utilizar o HATEOAS no seu projeto Spring Boot, inclua a seguinte dependência no seu arquivo pom.xml:

xml

<dependency>
    <groupId>org.springframework.hateoas</groupId>
    <artifactId>spring-hateoas</artifactId>
    <version>2.1.1</version>
</dependency>

Implementação no Service

UserService

O serviço (UserService) foi ajustado para incluir links HATEOAS nas respostas. Ao buscar um usuário por ID, um link para a própria consulta é adicionado.

java

public UserDTO findById(String id) throws Exception {
    // ...
    return user.add(linkTo(methodOn(UserController.class).findById(id)).withSelfRel());
}

Ajustes no DTO

UserDTO

O DTO (UserDTO) foi ajustado para estender RepresentationModel e incluir um identificador (key) em vez de id.

java

public class UserDTO extends RepresentationModel<UserDTO> implements Serializable {
    private UUID key;
    // ...
}

Conclusão

Ao implementar o HATEOAS no projeto, tornamos as respostas da API mais dinâmicas e navegáveis. Os links HATEOAS são adicionados para permitir a descoberta fácil de recursos relacionados. Certifique-se de seguir as práticas RESTful ao criar novos endpoints e recursos.

Exemplo de Uso

  • Buscar Todos os Usuários:

    • Método: GET
    • Endpoint: /api/v1/user
    • Resposta: Lista de usuários com links para cada usuário individual.
  • Buscar Usuário por ID:

    • Método: GET
    • Endpoint: /api/v1/user/{id}
    • Resposta: Detalhes do usuário com links, incluindo um link para a própria consulta.
    • Resultado:
      • {
            "id": "46eb3cea-d202-4382-8e63-c1eb1d4c919f",
            "email": "[email protected]",
            "full_name": "Givonaldo Pereira 123",
            "specialty": "Cardiologista - SR",
            "cpf": "101.202.303-10",
            "birth_date": "1980-03-10",
            "phone": "(21) 3232-6562",
            "_links": {
                "self": {
                    "href": "http://localhost:8080/api/v1/user/46eb3cea-d202-4382-8e63-c1eb1d4c919f"
                }
            }
        }
        
  • Criar Novo Usuário:

    • Método: POST
    • Endpoint: /api/v1/user
    • Corpo da Requisição: JSON com dados do novo usuário.
    • Resposta: Detalhes do usuário recém-criado com links.
  • Atualizar Usuário:

    • Método: PUT
    • Endpoint: /api/v1/user
    • Corpo da Requisição: JSON com dados atualizados do usuário.
    • Resposta: Detalhes do usuário atualizado com links.
    • Resultado:
      • {
          "id": "46eb3cea-d202-4382-8e63-c1eb1d4c919f",
          "email": "[email protected]",
          "full_name": "Givonaldo Pereira 123",
          "specialty": "Cardiologista - SR - 1",
          "cpf": "101.202.303-10",
          "birth_date": "1980-03-10",
          "phone": "(21) 3232-6562",
          "_links": {
              "self": {
                  "href": "http://localhost:8080/api/v1/user/46eb3cea-d202-4382-8e63-c1eb1d4c919f"
              }
          }
        }
        
  • Atualizar Senha do Usuário:

    • Método: PATCH
    • Endpoint: /api/v1/user/{id}/password
    • Corpo da Requisição: JSON com nova senha.
    • Resposta: Código de status 204 No Content se bem-sucedido.
  • Excluir Usuário:

    • Método: DELETE
    • Endpoint: /api/v1/user/{id}
    • Resposta: Código de status 204 No Content se bem-sucedido.
    • Essa documentação fornece uma visão geral da implementação do HATEOAS no projeto Spring Boot. Certifique-se de manter a consistência nas práticas RESTful ao expandir a API.

https://docs.spring.io/spring-hateoas/docs/current/api/org/springframework/hateoas/server/mvc/WebMvcLinkBuilder.html

⚠️ **GitHub.com Fallback** ⚠️