Ответ 1
POST, PUT, GET - это все HTTP-глаголы и сами по себе не указывают формат для передачи данных, поэтому нет формата POST. Это означает, что вы можете кодировать данные любым способом.
Теперь, в каком формате вы решите пойти, действительно должно быть больше зависит от того, как обычно будет использоваться ваш API. Если это будет в первую очередь подача формы из веб-браузера, то использование кодировки полей формы, скорее всего, наиболее разумно, поскольку это облегчает это взаимодействие для клиента.
С другой стороны, если вы в первую очередь собираетесь получать данные JSON из вызовов AJAX, то получение формата JSON может иметь смысл. Если вы сделаете обоим, нет никаких причин, по которым вы не можете принимать данные в обоих форматах.
Другим аспектом, который следует учитывать, является сложность структур данных, которые вы будете передавать назад и вперед. Кодирование формы (аналогично кодированию строки запроса) также является структурой ключевого значения, тогда как JSON (или XML) допускает гораздо более богатую структуру данных.
В конце концов, идите с тем, что проще всего для вас как на стороне сервера, так и на стороне клиента (поскольку я предполагаю, что вы также будете писать основного клиента-клиента рассматриваемого API). Простота всегда предпочтительна по сравнению со сложностью, пока вы не сможете окончательно показать, что большая сложность дает вам ощутимую выгоду.
Кроме того, последнее, о чем я расскажу, это то, что REST - это не просто чистые URL-адреса или правильные HTTP-глаголы. Эти аспекты на самом деле просто глазури на торте. Основная идея архитектуры REST заключается в том, что Hypertext - это механизм состояния приложения. Просто следуя URL-адресам в ответах сервера, хороший клиент может узнать обо всех доступных действиях и не должен знать ничего больше, чем базовый URL. Из этого можно обнаружить все остальное. Пара, которая имеет четко определенные типы контента, и у вас есть мир, где множество клиентов могут общаться с большим количеством серверов, все говорят на одном и том же "языке", и клиентам не нужно ничего знать о серверах (или наоборот) кроме базового URL-адреса и типов содержимого. Что такое REST.