Использую Catalyst::Action::Deserialize который должен обрабатывать каждый HTTP запрос (из POST, PUT, OPTIONS и DELETE) и десериализовать его данные в $c->req->data
.
А еще есть хеш $c->req->params
в который попадают GET параметры. Например если запрос был на URL вида http://myapp.org/method?foo=bar
то $c->req->params
будет выглядеть вот так:
{ foo => 'bar' }
Если при этом еще засунуть некие данные в тело HTTP запроса и поставить тип содержимого JSON, т.е.:
POST http://myapp.org/method?foo=bar
Content-Type: application/json
{ "baz": true }
$c->req->data
(десериализованные данные) примет вид:
{ baz => 1 }
Однако если послать запрос вида
POST http://myapp.org/method?foo=bar
Content-Type: application/x-www-form-urlencoded
baz=1
$c->req->params
примет вид:
{ foo => 'bar', baz => 1, }
$c->req->data
будет пуст.Я так понимаю, что это сделано для совместимости отправки форм методами POST и GET. Это так?
Как уже было отмечено — моё приложение использует десериализацию данных запроса. И у меня чисто архитектурный вопрос:
Будет ли разумным соединять $c->req->params
и $c->req->data
и один хеш (params) если тело запроса JSON? Если да, то в каком порядке соединять эти хеши (как решать конфликты)?