image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image
Ualace Santos
Ualace Santos18/07/2023 15:45
Compartilhe

Uso de DTO na API REST

     O DTO (Data Transfer Object)

     Na API REST, um DTO (Data Transfer Object) é usado para transferir dados entre o cliente e o servidor. Ele é usado em vez de uma entidade porque as entidades geralmente contêm mais informações do que o necessário para a transferência de dados. Além disso, as entidades podem conter informações confidenciais que não devem ser expostas ao cliente. Um DTO é uma classe simples que contém apenas as informações necessárias para a transferência de dados. Ele é usado para reduzir a largura de banda necessária para transferir dados e para melhorar o desempenho da API.

    As diferenças entre DTO e entidade são:

    Uma entidade representa um objeto persistente em um banco de dados, enquanto um DTO representa um objeto que será transferido pela rede.

    Uma entidade pode conter informações confidenciais que não devem ser expostas ao cliente, enquanto um DTO contém apenas as informações necessárias para a transferência de dados.

    Uma entidade pode conter mais informações do que o necessário para a transferência de dados, enquanto um DTO contém apenas as informações necessárias.

    Um DTO (Data Transfer Object) é um objeto que define como os dados serão enviados pela rede. Ele é usado para desacoplar a camada de serviço da camada de banco de dados. O DTO é uma classe que possui informações que são formadas a partir de uma ou mais entidades (classes cujos atributos são mapeados para os campos de uma tabela em um banco de dados). O DTO é uma classe simples que contém apenas campos e propriedades para armazenar dados e não contém lógica de negócios

    Aqui está um exemplo de como criar um DTO em Java:

    public class BookDTO {

      private Long id;

      private String title;

      private String authorName;

      public BookDTO() {}

      public BookDTO(Long id, String title, String authorName) {

        this.id = id;

        this.title = title;

        this.authorName = authorName;

      }

      // getters and setters

    }

    Usar DTOs em vez de entidades em uma API REST com Java é uma prática recomendada para evitar o acoplamento indesejável entre a API e o modelo de domínio1. DTOs são objetos que carregam dados entre processos para reduzir o número de chamadas de métodos2.

    Aqui está um exemplo de como usar DTOs em vez de entidades em uma API REST com Java1:

    @RestController

    @RequestMapping("/api/v1")

    public class BookController {

      private final BookService bookService;

      public BookController(BookService bookService) {

        this.bookService = bookService;

      }

      @GetMapping("/books")

      public List<BookDTO> getAllBooks() {

        return bookService.findAll();

      }

      @GetMapping("/books/{id}")

      public ResponseEntity<BookDTO> getBookById(@PathVariable(value = "id") Long bookId)

          throws ResourceNotFoundException {

        BookDTO bookDTO = bookService.findById(bookId);

        return ResponseEntity.ok().body(bookDTO);

      }

      @PostMapping("/books")

      public BookDTO createBook(@Valid @RequestBody BookDTO bookDTO) {

        return bookService.save(bookDTO);

      }

      @PutMapping("/books/{id}")

      public ResponseEntity<BookDTO> updateBook(@PathVariable(value = "id") Long bookId,

                            @Valid @RequestBody BookDTO bookDetails) throws ResourceNotFoundException {

        BookDTO updatedBook = bookService.update(bookId, bookDetails);

        return ResponseEntity.ok(updatedBook);

      }

      @DeleteMapping("/books/{id}")

      public Map<String, Boolean> deleteBook(@PathVariable(value = "id") Long bookId)

          throws ResourceNotFoundException {

        return bookService.delete(bookId);

      }

    }

    Por fim, o DTO é o que chamamos de camada de representação, desprovidade de regra de negócio. Enquanto as entidades, por exemplo, faz parte da camada de domínio, juntamente com o service, onde estará a regra de negócio e a comunicação com o banco de dados.

    Compartilhe
    Recomendados para você
    Microsoft 50 Anos - Prompts Inteligentes
    Microsoft 50 Anos - GitHub Copilot
    Microsoft 50 Anos - Computação em Nuvem com Azure
    Comentários (5)
    Ana Silva
    Ana Silva - 20/07/2023 14:16

    muito bom!

    Emerson Borges
    Emerson Borges - 18/07/2023 17:03

    Ótima a explicação, melhorando a minha experiência de como usar DTO,

    Obrigado @UalaceSantos

    Arthur Galanti
    Arthur Galanti - 18/07/2023 16:16

    Muito bem explicativo, mudou meus conceitos sobre DTO

    Agno Santiago
    Agno Santiago - 18/07/2023 16:25

    Contribuição fenomenal. Obrigado

    Murilo Costa
    Murilo Costa - 18/07/2023 16:29

    Ótimas dicas. Obrigado por compartilhar!