demoiselle / framework

Repositório principal contendo o Core e Extensions: JPA, Security, WS
https://demoiselle.org
127 stars 77 forks source link

Classe AbstractREST não segue os padrões de aplicações REST #98

Open joaomarcusc opened 7 years ago

joaomarcusc commented 7 years ago

Ao criar uma aplicação REST usando o demoiselle-generator, deparei-me com uma diferença na classe AbstractREST em relação ao padrão de aplicações REST. Os métodos PUT e PATCH são implementados fora do padrão. Analisando o trecho do código a que me refiro:

    @POST
    @Transactional
    @ApiOperation(value = "persist entity")
    @Override
    public T persist(@Valid T entity) {
        return bc.persist(entity);
    }

    @PUT
    @Transactional
    @ApiOperation(value = "full update entity")
    @Override
    public T mergeFull(@Valid T entity) {
        return bc.mergeFull(entity);
    }

    @PATCH
    @Path("{id}")
    @Transactional
    @ApiOperation(value = "partial update entity")
    @Override
    public T mergeHalf(@PathParam("id") final I id, T entity) {
    return bc.mergeHalf(id, entity);
    }

Verificamos que o método PUT age diretamente sobre a URL /resource, e o método PATCH sobre a URL /resource/{id}. De acordo com as informações presentes na página REST API Tutorial:

  1. As operações de atualização de um resource devem operar sobre a URL do próprio resource. Portanto, o método PUT deveria operar sobre a URL /resource/{id}, não sobre /resource.
  2. O método PATCH opera sobre a URL /resource/{id}, fazendo uma atualização parcial do resource.
leonardomerlin commented 7 years ago

Concordo contigo... e só pra ver se eu entendi bem, no "item 1" você quis dizer PUT no lugar de POST?

"Portanto, o método POST deveria operar sobre a URL /resource/{id}, não sobre /resource."

joaomarcusc commented 7 years ago

Isso @leonardomerlin obrigado pela correção, já atualizei!