Permiti uma substituição total de uma coleção, por exemplo, PUT ~/people/123/shoes
onde o corpo é a representação da coleção inteira.
Isso funciona para pequenas coleções filho de itens em que o cliente deseja revisar os itens e remover alguns e adicionar outros e, em seguida, atualizar o servidor. Eles podem PUT uma coleção vazia para deletar tudo.
Isso significaria GET ~/people/123/shoes/9
que ainda permaneceria no cache mesmo que um PUT o excluísse, mas isso é apenas um problema de cache e seria um problema se outra pessoa excluísse o sapato.
Minhas APIs de dados / sistemas sempre usam ETags em vez de tempos de expiração para que o servidor seja atingido em cada solicitação e eu exijo os cabeçalhos de versão / simultaneidade corretos para alterar os dados. Para APIs que são somente leitura e alinhadas com visualização / relatório, eu uso tempos de expiração para reduzir ocorrências na origem, por exemplo, um placar pode durar 10 minutos.
Para coleções muito maiores, como ~/people
, tendo a não precisar de várias exclusões, o caso de uso tende a não surgir naturalmente e, portanto, um único DELETE funciona bem.
No futuro, e por experiência com a construção de APIs REST e enfrentando os mesmos problemas e requisitos, como auditoria, eu estaria inclinado a usar apenas verbos GET e POST e projetar em torno de eventos, por exemplo, POST um evento de mudança de endereço, embora eu suspeite que virá com seu próprio conjunto de problemas :)
Eu também permitiria que os desenvolvedores de front-end criassem suas próprias APIs que consomem APIs de back-end mais rígidas, uma vez que muitas vezes há razões práticas e válidas do lado do cliente pelas quais eles não gostam de designs de API REST estritos "fanáticos por Fielding" e para produtividade e motivos de camadas de cache.