Веб-API Asp.net — публикация сложного типа для получения данных или использования строки запроса

Я просто хочу уточнить, можно ли использовать метод POST для получения некоторых данных из веб-API. Сценарий заключается в том, что пользователь должен передать сложный тип, например, UserInfo, который имеет идентификатор, отдел, ETC, в функцию веб-API, чтобы получить дополнительные сведения о пользователе.

Я могу сделать это, передав данные в URI, например http://apiuri/User?ID=1&Department=ABC& XXX и используя метод GET, или я могу использовать метод POST и передать ему UserInfo.

Я предпочитаю метод Post, однако в команде есть аргументы в пользу того, что Post следует использовать только для создания или изменения ресурсов.

Это верно? Должен ли Post использоваться только для создания/изменения ресурса?

огромное спасибо


person user1829319    schedule 30.01.2015    source источник
comment
Хороший вопрос - именно то, что я ищу прямо сейчас. Ответ ниже правильный, но все же оставляет открытым — что делать в этом случае? Что лучше всего делать, когда у вас есть сложный запрос — длинная сложная строка GET или POST для метода, который не изменяет данные? Ни одно из них не является хорошим решением, у обоих есть свои плюсы и минусы.   -  person cyberspy    schedule 02.03.2015
comment
Взгляните на ответ на этот вопрос: заголовок stackoverflow.com/questions/19302078/   -  person cyberspy    schedule 02.03.2015


Ответы (1)


Обычно методы Post не гарантируют идемпотентность, т. е. они могут давать разные результаты в разное время. Теперь это не относится к вашему сценарию. Но без wsdl люди действительно обращаются к стандартам, чтобы понять, как будет работать служба. Если вы не следуете стандартам, вам может быть сложнее объяснить свой API своим клиентам.

person Yasir    schedule 30.01.2015
comment
Привет Ясир, спасибо за ответ. Но я не думаю, что вы ответили на мой вопрос. Можем ли мы использовать Post в любом другом сценарии, который не требует модификации/добавления ресурсов? ... Как насчет ситуации, когда вы хотите проверить пользователя, а затем отобразить некоторую конфиденциальную информацию. Например, пользователь передает имя пользователя и пароль для аутентификации, после чего мы показываем пользователю некоторую конфиденциальную информацию. Здесь нет изменений ресурсов, но я не думаю, что Get здесь подходит. - person user1829319; 31.01.2015