HTTP-глаголы и согласование содержимого или GET-строки для службы REST? - PullRequest
2 голосов
/ 30 марта 2009

Я проектирую сервис REST и пытаюсь взвесить все за и против использования полного массива http-глаголов и согласования контента против строковых переменных GET. Влияет ли мой выбор на кешируемость? Ни одно из решений не может быть правильным для каждой области.

Что лучше всего подойдет для запросов и запросов (например,? Action = PUT)?

Что лучше всего подходит для выбора версии API (например,? Version = 1.0)?

Что лучше всего подходит для типа возвращаемых данных (например,? Type = json)?

1 Ответ

5 голосов
/ 30 марта 2009

CRUD / Запросы лучше всего представлены с глаголами HTTP. Создание и обновление - это обычно PUT или POST. Получить будет ПОЛУЧИТЬ. Удалять будет УДАЛИТЬ. Это в целом отображение. Суть в том, что GET не вызывает побочных эффектов, и что глаголы делают то, что от них ожидают.

Поместить действие в URI можно, если это единственный способ его передачи (например, клиентская библиотека http не позволяет отправлять запросы не GET / POST). Однако большинство библиотек делают , поэтому настоятельно рекомендуется не передавать глагол через URL.

«Лучший» способ версии API - использовать заголовки HTTP для каждого запроса; это позволяет клиентам обновлять / понижать конкретные запросы вместо каждого отдельного. Конечно, такая гранулярность управления версиями должна быть запрограммирована с самого начала и может серьезно усложнить код на стороне сервера. Большинство людей просто используют URL для доступа к серверам. Более подробное объяснение приведено в сообщении в блоге Питера Уильямса "Управление версиями остальных веб-служб"

Нет лучшего типа возвращаемых данных; это зависит от вашего приложения. JSON может быть проще для веб-сайтов Ajax, тогда как XML может быть проще для сложных структур, которые вы хотите запросить с помощью Xpath. Буферы протокола являются третьим вариантом. Также обсуждается, лучше ли указывать протокол возврата в URL или в заголовках HTTP.

По большей части заголовки будут оказывать наибольшее влияние на кэширование, поскольку прокси-серверы должны учитывать их при сообщении, как и пользовательские агенты (хотя, очевидно, UA ведут себя по-другому). Кэширование на основе одного URL очень зависит от слоев. Некоторые пользовательские агенты ничего не кэшируют с помощью строки запроса (Safari, iirc), а прокси-серверы могут кэшировать или не кэшировать, если считают нужным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...