Я допустил оптовую замену коллекции, например, PUT ~/people/123/shoes
когда тело является полным представлением коллекции.
Это работает для небольших дочерних коллекций элементов, где клиент хочет просмотреть элементы и удалить некоторые из них и добавить другие, а затем обновить сервер. Они могли ПОСТАВИТЬ пустую коллекцию, чтобы удалить все.
Это будет означать, GET ~/people/123/shoes/9
что он все равно останется в кеше, даже если PUT удалил его, но это просто проблема кеширования, и это будет проблемой, если какой-то другой человек удалит обувь.
Мои API данных / систем всегда используют ETags, а не время истечения срока действия, поэтому сервер обрабатывается при каждом запросе, и мне требуются правильные заголовки версии / параллелизма для изменения данных. Для API, которые доступны только для чтения и выровнены по просмотру / отчету, я использую время истечения срока действия, чтобы уменьшить количество обращений к источнику, например, таблица лидеров может работать в течение 10 минут.
Для гораздо больших коллекций, например ~/people
, мне не нужно многократное удаление, вариант использования обычно не возникает естественным образом, и поэтому одиночное DELETE работает нормально.
В будущем, исходя из опыта создания REST API и решения тех же проблем и требований, как аудит, я был бы склонен использовать только глаголы GET и POST и проектировать вокруг событий, например, POST для события смены адреса, хотя я подозреваю, что приеду со своим набором проблем :)
Я также позволил бы интерфейсным разработчикам создавать свои собственные API-интерфейсы, которые потребляют более строгие серверные API-интерфейсы, поскольку на стороне клиента часто есть практические и веские причины, по которым им не нравятся строгие конструкции REST API "Fielding zealot", а также для повышения производительности и Причины расслоения кеша.