GithubHelp home page GithubHelp logo

spring-webflux-sample's People

Contributors

ocrisurbainski avatar jonathanmdr avatar

Watchers

 avatar

spring-webflux-sample's Issues

DTOs de Input e Output

public class PeopleDTO {
private String id;
@CPF
private String cpf;
@NotBlank
private String nome;
@NotNull
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private LocalDate dataNascimento;
}

  • Os objetos de entrada e saída mudam por motivos diferentes, o fato de manter uma única classe para represetnar o input e output aumenta a chance de uma quebra de funcionalidade em caso de mudança e quebra o SRP do SOLID.

Sugeriria você ter classes únicas para representar os inputs e outputs para cada tipo de recurso exposto na API

Exemplo: CreatePleopleRequest, CreatePeopleResponse, UpdatePeopleRequest, UpdatePeopleResponse e assim sucessivamente.

Open API

@Operation(operationId = "insert", description = "Método para salvar uma nova pessoa", responses = {
@ApiResponse(responseCode = "201", description = "Pessoa salva com sucesso"),
@ApiResponse(responseCode = "500", description = "Caso algum erro aconteca")
})

  • Separar a documentação da API do código do controlador REST facilida a legibilidade e manutenção, mantém responsabilidades isoladas.

Sugeriria criar uma interface para concentrar as anotações do Open API e implementar a mesma no controlador REST por meio de sobrescrita, fiz um único comentário mas é válido para todos os métodos expostos da API

Definição de Recurso Fora da Especificação REST

@GetMapping(value = "/all", produces = MediaType.TEXT_EVENT_STREAM_VALUE)

  • Seguindo a especificação REST da definição de recursos estarem sempre no plural, não faz sentido ter uma rota GET people/all pois na definição de GET /peoples já é explícito o retorno.

Sugeriria remover o /all

Aqui mesmo sendo um exemplo para praticar seria interessante fornecer a possibilidade de realizar a busca baseado em alguns filtros e devolver o resultado dentro de uma paginação.

Parâmetro Booleano

  • O uso de parâmetro booleano apesar de facilitar a implementação ele dificulta a legibilidade, pois ao olhar a chamada do método obrigatoriamente eu preciso ir até o método para entender o que ele está fazendo.
  • Outro ponto é que o uso de parâmetro booleano faz com que o método save tenha 2 responsabilidades, salvar e atualizar, seguindo o RSP do SOLID ambos mudam por motivos diferentes, logo uma alteração no método salvar pode quebrar 2 funcionalidades, no seu caso, inserir e atualizar.

Sugeriria a implementação de 2 métodos distintos, um para salvar e outro para atualizar, mesmo que tenham uma semelhança entre si e cause o sentimento de código repetido você garante o isolamento da responsabilidade

Ausência do Header Location na Criação de Novos Recursos

public Mono<PeopleDTO> insert(@RequestBody @Valid Mono<PeopleDTO> dto) {
return dto.map(mapper::toPeople)
.map(operations::insert)
.flatMap(value -> value)
.map(mapper::toPeopleDTO)
.log();
}

  • Normalmente os métodos de criação ao serem invocados devolvem na resposta um Header de nome Location que contém o endereço URI para realizar a busca no recurso recém criado.

Sugeriria utilizar o ResponseEntity para montar a resposta adicionando o Header Location

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.