Ограничения GET и POST - Restful API

Постановка проблемы:

Мне нужно передать много параметров (скажем, около 10) в API, который выполняет некоторую обработку и возвращает какой-то ответ. Этот конкретный API не изменяет состояние системы и гарантирует, что он все время будет предоставлять один и тот же ответ.

Таким образом, в основном GET будет методом перехода к созданию этого API. Существует несколько технических и практических проблем при использовании метода GET для этого API. Один раз существует ограничение на количество параметров, которые могут быть переданы в URI, а другой — для клиента API было бы сложно или запутанно создать запрос.

Если бы я использовал POST для создания этого API, мы могли бы создать запрос клиента в форме JSON/XML и отправить его в полезной нагрузке, и таким образом было бы легко поддерживать и понимать код на стороне клиента. Но технически в этом случае нецелесообразно выбирать POST, поскольку API не изменяет состояние системы и не является идемпотентным.

Пожалуйста, предложите мне свои взгляды. Спасибо.


person Raj    schedule 28.08.2016    source источник
comment
Если вы уже знаете, что GET не удовлетворит ваши потребности, не используйте его. Вам также не нужно использовать REST. Вы можете использовать другой стандарт, например. json-rpc (через POST) или создайте свой собственный API.   -  person freakish    schedule 28.08.2016
comment
Тот факт, что POST не является идемпотентным, не означает, что он ДОЛЖЕН изменить состояние сервера.   -  person Adrien    schedule 29.08.2016
comment
@Adrien Согласен, но в потоке/состоянии исключения. В общем, POST следует использовать для API, которые не являются безопасными или не идемпотентными, а API в контексте является безопасным и идемпотентным.   -  person Raj    schedule 29.08.2016
comment
лично я считаю, что идемпотентность в любом случае является чем-то вроде мифа. Всегда некоторое состояние сервера изменяется при выполнении любого запроса (даже если изменяется только файл журнала). достаточно веб-дизайнеров не знают об этой концепции, поэтому они меняют состояние при GET (особенно когда вы используете его как API с аргументами строки запроса). Так что для меня это просто удобство, POST может передавать большие объемы данных аргументов более надежно, чем строка запроса (которая может быть ограничена посредниками), а также имеет другое взаимодействие с кешем, поскольку строка запроса является частью ключа кеша.   -  person Adrien    schedule 31.08.2016