Eu sugeriria retornar apenas o que é necessário + um pouco de esclarecimento.
Por exemplo, dependendo de como sua API deve ser usada, você pode incluir uma cópia do objeto, como existe após ser salva.
Portanto, um POST de {key: 123} pode retornar {key: 123, foo: 'bar'}.
A idéia básica é que é melhor retornar o objeto do que ter que consultá-lo novamente.
Dito isto, os consumidores da sua API não precisam do objeto, não há necessidade de devolvê-lo.
Eu normalmente retorno {success: true} ou algo parecido, quando não há um objeto necessário no POST PUT e PATCH, porque facilita o recebimento. Dito isso, é melhor 99% do tempo retornar a representação salva do objeto, é raro que eles não precisem, e é "mais barato" enviar tudo em uma solicitação e depois em duas.
Para ser específico, em um laboratório, é perfeitamente adequado lidar com tudo com apenas códigos de status. No mundo real, é muito melhor retornar alguns dados, mesmo que redundantes, para que os consumidores de API possam entender facilmente o que você está tentando dizer.
O retorno de 200 {success: true} permite que as pessoas escrevam código nos dois sentidos:
if response.code == 200
do stuff
end
e
if response.body.success
do stuff
end
Além disso, não é tão difícil de fazer do seu lado.
Por fim, (desculpe pela estrutura de respostas do cocô), fornecendo uma API JSON pública para você abrir mão de muito controle sobre como será usado. Alguns clientes podem reagir de maneira diferente a diferentes organismos (ou a falta deles) ou a códigos de status.