2
respostas

sobre o PATCH

Olá, até o momemento usamos os métodos Get, Post, Put, Delete. por curiosidade eu pensei em adicionar mais uma chave e valor no livro 1, {"paginas" : "500"} Então me deparei com a seguinte questão, vou usar o PUT, mas ai o PUT ia funcionar, mas na verdade eu estaria reescrevendo o objeto, quando na verdade eu só queria adicionar mais uma propriedade que são é a quantidade de página.

Então descobri que o PATCH faz isso, adiciona mais campos sem afetar os demais. mas só consegui fazer isso, de uma forma não dinâmica.

app.patch('/livros/:id', (req, res) => {
    const index = buscaLivro(req.params.id);
    livros[index]["autor"] = "Isaac Isimov"
    res.status(200).send("Alteração bem sucedida");
});

funcionou, mas está errado, pois eu deveria pegar essa informação do body, mas não sei como colocar isso aqui ["autor"] = "Isaac Isimov" e se realmente é aqui.

2 respostas

Boa noite Geraldo

A informação autor existe dentro do objeto livros? Se sim e se o seu método buscaLivro retorna a própria coleção de livros, uma forma seria só alterar o próprio index ( até trocaria o nome index por livros ) e ficaria livros.autor = "Isaac Isimov". Mas tem um outro ponto também; você está integrado com algum banco de dados / ORM? ou está fazendo a manipulação de dados em memória, ou seja, em um array javascript o qual quando fecha a aplicação, tudo é perdido? Caso esteja usando um banco, após ter feito a obtenção do registro do livro, você precisaria de usar o método do banco ou ORM para atualizar o registro passando o id.

Sobre usar Patch, está correto para alterar uma única informação e não todo os campos. Porém, é bem comum na arquitetura Restful, adotar o PUT mesmo para um campo. Mas usar o Patch também não é incorreto e é totalmente possível de se usar.

a função busca livro localiza o livro com base no id

function buscaLivro(id) {
    return livros.findIndex(livro => {
        return livro.id === Number(id);
    });
}

e por enquanto estou manipulando em memoria um array de objetos

const livros = [
    {
        id: 1,
        titulo: 'o Senhor dos Anéis'
    },
    {
        id: 2,
        titulo: 'O Hobbit'
    }
]

minha ideia seria apenas adicionar um novo campo no livro com id 1 que seria o autor