WebApi - GET запрос и сложные параметры
От: Shmj Ниоткуда  
Дата: 07.07.20 08:22
Оценка:
В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело. Отойти от правил и использовать POST вместо GET?
Отредактировано 07.07.2020 8:23 Shmj . Предыдущая версия .
Re: WebApi - GET запрос и сложные параметры
От: Qulac Россия  
Дата: 07.07.20 08:40
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело. Отойти от правил и использовать POST вместо GET?


Как вариант сериализавать нужные параметры в json и передать как параметр в строке запроса.
Программа – это мысли спрессованные в код
Re: WebApi - GET запрос и сложные параметры
От: RushDevion Россия  
Дата: 07.07.20 08:55
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело. Отойти от правил и использовать POST вместо GET?


Лучше бы на конкретном примере.
Сложно сходу придумать задачу, чтобы была необходимость пихать в GET полноценные сложные объекты.
А для простых вещей вот такие варианты вполне нормально выглядят.
// Returns list of entities with given ids
GET \api\entities\1;2;10;15
// Returns part of the map enclosed by given area
GET \api\map\moscow?area=(10,10);(20,25);(30,41);(30,41);(0;12)
Re: WebApi - GET запрос и сложные параметры
От: Mr.Delphist  
Дата: 07.07.20 10:51
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело. Отойти от правил и использовать POST вместо GET?


GET умеет работать со списками, есть лишь заковык с конкретным синтаксисом (три варианта, но не все браузеры/фреймворки умеют все три — надо проверять)

/do/you/love?fruits=apple&fruits=banana
/do/you/love?fruits[]=apple&fruits[]=banana
/do/you/love?fruits=apple,banana
Re: WebApi - GET запрос и сложные параметры
От: Ночной Смотрящий Россия  
Дата: 08.07.20 12:16
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело.


Не запрещает, просто не рекомендует.

S> Отойти от правил и использовать POST вместо GET?


Глупо. POST неидемпотентен, автоматически лишаешься возможности кеширования. И да, списки в query string вполне передаются.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: WebApi - GET запрос и сложные параметры
От: Shmj Ниоткуда  
Дата: 08.07.20 15:41
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Глупо. POST неидемпотентен, автоматически лишаешься возможности кеширования. И да, списки в query string вполне передаются.


Тут же не так тупо все. Нужна поддержка Swagger, к примеру, и тут начинаются проблемы...
Re[3]: WebApi - GET запрос и сложные параметры
От: Ночной Смотрящий Россия  
Дата: 08.07.20 17:32
Оценка: +1
Здравствуйте, Shmj, Вы писали:

НС>>Глупо. POST неидемпотентен, автоматически лишаешься возможности кеширования. И да, списки в query string вполне передаются.

S>Тут же не так тупо все.

А как у тебя там все нетупо?

S> Нужна поддержка Swagger, к примеру, и тут начинаются проблемы...


Какие проблемы?
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: WebApi - GET запрос и сложные параметры
От: Shmj Ниоткуда  
Дата: 08.07.20 18:04
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>> Нужна поддержка Swagger, к примеру, и тут начинаются проблемы...

НС>Какие проблемы?



Если изменить метод на POST — то все будет работать. А так получаем ошибку:

Re[5]: WebApi - GET запрос и сложные параметры
От: Ночной Смотрящий Россия  
Дата: 08.07.20 19:03
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Если изменить метод на POST — то все будет работать. А так получаем ошибку:


Так поставь атрибут FromQuery.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: WebApi - GET запрос и сложные параметры
От: ksg71 Германия  
Дата: 09.07.20 12:58
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело. Отойти от правил и использовать POST вместо GET?


принято кому как удобней, скажем google analytics использует post
а яндекс в аналогичных случаях get, изобретая мануал с описанием строки запроса
и сколько таких "pure" rest сервисов, столько "мануалов"
Das Reich der Freiheit beginnt da, wo die Arbeit aufhört. (c) Karl Marx
Re[2]: WebApi - GET запрос и сложные параметры
От: Jester Канада  
Дата: 20.10.20 16:19
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>> Отойти от правил и использовать POST вместо GET?


НС>Глупо. POST неидемпотентен, автоматически лишаешься возможности кеширования. И да, списки в query string вполне передаются.


А так ли нужна идемпотентность, если нужно просто получить данные? Не, я понимаю — неправославно, типа, но это ж не религиозный догмат, тебя вебапи-инквизиция не потащит на костёр за злонамеренное использование POST вместо GET?
Re[3]: WebApi - GET запрос и сложные параметры
От: yenik  
Дата: 21.10.20 12:21
Оценка:
НС>>Глупо. POST неидемпотентен, автоматически лишаешься возможности кеширования. И да, списки в query string вполне передаются.

J>А так ли нужна идемпотентность, если нужно просто получить данные? Не, я понимаю — неправославно, типа, но это ж не религиозный догмат, тебя вебапи-инквизиция не потащит на костёр за злонамеренное использование POST вместо GET?


А если нужны строго актуальные данные, то может и фиг с ним, с кэшированием.
Re[4]: WebApi - GET запрос и сложные параметры
От: Ночной Смотрящий Россия  
Дата: 21.10.20 12:37
Оценка:
Здравствуйте, yenik, Вы писали:

J>>А так ли нужна идемпотентность, если нужно просто получить данные? Не, я понимаю — неправославно, типа, но это ж не религиозный догмат, тебя вебапи-инквизиция не потащит на костёр за злонамеренное использование POST вместо GET?

Y>А если нужны строго актуальные данные, то может и фиг с ним, с кэшированием.

Да и вообще, возможность самостоятельно наступить на грабли никто не отменял.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: WebApi - GET запрос и сложные параметры
От: Mystic Artifact  
Дата: 21.10.20 14:26
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Глупо. POST неидемпотентен, автоматически лишаешься возможности кеширования. И да, списки в query string вполне передаются.


Идемпотентность — это свойство реализации, а не способа RPC, коим любой вызов HTTP разумеется является.

Кеширование же полностью управляется хидерами со стороны сервера и "автоматически" никто такой возможности не лишается.
Re[3]: WebApi - GET запрос и сложные параметры
От: Ночной Смотрящий Россия  
Дата: 21.10.20 17:33
Оценка: +1 -1
Здравствуйте, Mystic Artifact, Вы писали:

MA> Идемпотентность — это свойство реализации, а не способа RPC, коим любой вызов HTTP разумеется является.


Читайте спеку HTTP
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: WebApi - GET запрос и сложные параметры
От: Stalker. Австралия  
Дата: 26.10.20 21:48
Оценка: 3 (1) -1
Здравствуйте, Shmj, Вы писали:

S>В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело. Отойти от правил и использовать POST вместо GET?


да, например поиск со сложными параметрами в json запускается именно как POST, в том числе у широкоизвестных сервисов типа elastic search, кошерная чистота GET запросов существует только в учебниках, на практике делается так, как практично и удобно
Re[3]: WebApi - GET запрос и сложные параметры
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.10.20 02:39
Оценка: 15 (1)
Здравствуйте, Mystic Artifact, Вы писали:
MA> Кеширование же полностью управляется хидерами со стороны сервера и "автоматически" никто такой возможности не лишается.
Никакими хидерами кэширование POST включить не выйдет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: WebApi - GET запрос и сложные параметры
От: Vladek Россия Github
Дата: 29.10.20 18:51
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В REST API принято для получения использовать GET-методы. Но что если требуется передать сложные параметры (к примеру, когда есть списки в запросе)? GET запрещает тело. Отойти от правил и использовать POST вместо GET?


Я в заголовки запроса пихаю, при условии что они не особо важны и могут быть проигнорированы.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.