Мне недавно напомнили об этом старом вопросе, и я хотел добавить еще один ответ для полноты, основанный на более поздних реализациях в моей собственной работе.
Для справки, Я написал в блоге на эту тему недавно.
По сути, суть этого вопроса заключалась в следующем: «Как я могу передать более крупный и более сложный критерий поиска ресурсу, чтобы получить отфильтрованный список объектов?»И все закончилось двумя вариантами:
- Набор параметров строки запроса GET
- POST с DTO в теле запроса
Первый вариант не идеален, потому что реализация уродлива и URL-адрес, вероятно, превысит максимальную длину в какой-то момент.Второй вариант, хотя и функциональный, просто не подходил мне в смысле «RESTful».В конце концов, я ПОЛУЧАЮ данных, верно?
Однако, имейте в виду, что я не просто ПОЛУЧАЮ данных.Я создаю список объектов.Каждый объект уже существует, но сам список не существует.Это совершенно новая вещь, созданная путем выдачи критериев поиска / фильтрации для полного хранилища объектов на сервере.(В конце концов, помните, что коллекция объектов сама по себе все еще является объектом.)
Это чисто семантическая разница, но безусловно важная.Потому что, проще всего, это означает, что я могу с комфортом использовать POST для выдачи этих критериев поиска на сервер.Ответ - это данные, которые я получаю, поэтому я «получаю» данные.Но я не «ПОЛУЧАЮ» данные в том смысле, что я фактически выполняю акт творения, создавая новый экземпляр списка объектов, который, как оказалось, состоит из уже существующих элементов.
IПолностью признаю, что ограничение никогда не было техническим, оно было просто семантическим.Просто он никогда не "сидел как надо" со мной.Нетехническая проблема требует нетехнического решения, в данном случае семантического.Рассмотрение проблемы с несколько иной семантической точки зрения привело к гораздо более чистому решению, которое оказалось тем решением, которое я в конечном итоге использовал.