Это кажется довольно простым вопросом, поэтому извиняюсь, если об этом задавали раньше; пожалуйста, укажите мне направление любых полезных ресурсов.
Итак, у меня есть служба RESTful для получения некоторых данных. Однако службе RESTful требуется определенный объем данных для выполнения извлечения. Эти данные можно грубо суммировать как данные «контекста пользователя» - информацию о пользователе (независимо от того, хранится ли она вызывающим приложением или ранее получена из другого приложения), которую служба должна использовать для выполнения операции поиска.
Поскольку REST работает семантически, правильным глаголом (методом HTTP) для получения чего-либо является запрос GET. В большинстве примеров GET-запросов, которые я видел, используются только небольшие объемы данных, и данные передаются по URL-адресу. Однако, как только мы перейдем к сфере услуг, которые требуют больших объемов данных для извлечения, кажется неправильным помещать всю эту информацию в URL-адрес. Более того, существуют известные ограничения на длину URL-адресов, которые применяются определенными компонентами (часто 255 символов или около того, IIRC).
По-видимому, доступны следующие варианты:
- Используйте POST для отправки данных в теле запроса. Однако это не семантически, поскольку мы не просим службу обновлять что-либо, а только получать.
- Поместите большую часть информации (в моем случае «контекст пользователя») в заголовок HTTP. Однако это «кажется неправильным», поскольку для заголовков следует использовать заголовки, а не данные.
- Сделайте несколько запросов для отправки данных по нескольким URL-адресам. Однако это, похоже, нарушает цель без сохранения состояния, поскольку служба должна поддерживать какое-то состояние, чтобы связать запросы вместе.
- Запишите данные в базу данных, а затем передайте службе ключ для извлечения данных оттуда. Однако это приведет к тому, что запрос не будет самодостаточным, а также приведет к возникновению узких мест в производительности.
Есть другой вариант? Какая здесь лучшая практика?