melezhik / swat

Simple Web Application Test
49 stars 12 forks source link

Неуказанные параметры при вызове модуля. #20

Open ivanych opened 8 years ago

ivanych commented 8 years ago

Допустим, некий метод в моём API принимает два параметра. Параметры необязательные и независимые.

Я делаю сват-модуль, описывающий этот метод:

curl_params=" \
--data-urlencode 'param_1=%param_1%' \
--data-urlencode 'param_2=%param_2%' \
}

Если я вызову модуль так:

run_swat_module(
    GET => '/method',
    {   
      param_1 => 'value_1',
    },
);

то сгенерируется такой запрос:

GET /method?param_1=value_1&param2=%param_2%

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

Можно при вызове модуля задать второй параметр равным пустой строке, но это неудобно делать, потому что придется зря указывать кучу пустых параметров, в тех вызовах, в которых эти параметры не нужны.

Можно ли сделать так, чтобы неуказанные в вызове параметры вообще не вставлялись в генерируемый запрос? Ну, или, по крайней мере, пусть вставляются с пустым значением.

melezhik commented 8 years ago

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

Подобного рода настройки можно вынести в swat.ini, например:

swat_skip_module_empty_parameter=1

ну или как-то придумать более подходящее название ...

ivanych commented 8 years ago

Я даже не знаю, зачем может понадобиться другое поведение... Вроде же логично: задал параметры - они передались, не задал - не передались. Зачем может понадобиться отправка параметра в виде %param%?

melezhik commented 8 years ago

А если не задал, а просто забыл, или ошибно передано пусток значение? как различить этой кейс от намеренно не переданного значения ?

ivanych commented 8 years ago

А в чем разница?

ivanych commented 8 years ago

В CGI же нету какого-то NULL, который "осмысленно не передан". Параметр либо передан, либо нет.

melezhik commented 8 years ago

Coppи, перечитал твой изначальный коммент, видимо неправильно тебя понял ... т.е. ты предлагаешь обнулять плейсхолдеры %foo% если значение для конрутного плейсхолдеоа foo не передано как переменная модуля?

ivanych commented 8 years ago

Ты, наверное, предполагаешь, что кому-то может понадобиться передать имя параметра без указания значения? Не знаю, зачем это может быть нужно, но пусть. Значит, нужно просто отправлять пустое значение. Это ничего не должно сломать.

А уж если включен параметр wat_skip_module_empty_parameter=1, то тогда вообще имя параметра не включать в запрос.

ivanych commented 8 years ago

Ну т.е. да, обнулять плейсхолдеры - это однозначно, а убирать параметры совсем - можно опционально.

melezhik commented 8 years ago

Ну т.е. да, обнулять плейсхолдеры

ок

убирать параметры совсем

предлагаю все же оставлять как есть - пустым, т.е. в твое случае в curl_params будет

param1=value1&param2=

незаданный параметр - значит пустой

ivanych commented 8 years ago

незаданный параметр - значит пустой

Это по умолчанию надо сделать.

Но еще можно опционально сделать убирание незаданных параметров вообще.

melezhik commented 8 years ago

Ok, понял тебя, буду думать