CRUD / Запросы лучше всего представлены с глаголами HTTP. Создание и обновление - это обычно PUT или POST. Получить будет ПОЛУЧИТЬ. Удалять будет УДАЛИТЬ. Это в целом отображение. Суть в том, что GET не вызывает побочных эффектов, и что глаголы делают то, что от них ожидают.
Поместить действие в URI можно, если это единственный способ его передачи (например, клиентская библиотека http не позволяет отправлять запросы не GET / POST). Однако большинство библиотек делают , поэтому настоятельно рекомендуется не передавать глагол через URL.
«Лучший» способ версии API - использовать заголовки HTTP для каждого запроса; это позволяет клиентам обновлять / понижать конкретные запросы вместо каждого отдельного. Конечно, такая гранулярность управления версиями должна быть запрограммирована с самого начала и может серьезно усложнить код на стороне сервера. Большинство людей просто используют URL для доступа к серверам. Более подробное объяснение приведено в сообщении в блоге Питера Уильямса "Управление версиями остальных веб-служб"
Нет лучшего типа возвращаемых данных; это зависит от вашего приложения. JSON может быть проще для веб-сайтов Ajax, тогда как XML может быть проще для сложных структур, которые вы хотите запросить с помощью Xpath. Буферы протокола являются третьим вариантом. Также обсуждается, лучше ли указывать протокол возврата в URL или в заголовках HTTP.
По большей части заголовки будут оказывать наибольшее влияние на кэширование, поскольку прокси-серверы должны учитывать их при сообщении, как и пользовательские агенты (хотя, очевидно, UA ведут себя по-другому). Кэширование на основе одного URL очень зависит от слоев. Некоторые пользовательские агенты ничего не кэшируют с помощью строки запроса (Safari, iirc), а прокси-серверы могут кэшировать или не кэшировать, если считают нужным.