如果用户没有输入值,如何从HTTP GET请求中排除查询变量?

时间:2016-05-12 22:53:55

标签: php json api http http-get

我正在向外部API发送GET请求,如果用户在所有适用的字段中输入值,该API将正常工作。我希望所有这些字段都是可选的,当然除了第一个确保我们得到回复之外。

我可以使用一种简单的方法来忽略请求中的这些吗?

这些是我将传递给请求的变量

$query = $request->input('query');
    $include = $request->input('include');
    $include2 = $request->input('include2');
    $include3 = $request->input('include3');
    $exclude = $request->input('exclude');
    $exclude2 = $request->input('exclude2');

这个请求可能看起来很混乱,但很简单。用户可以输入基本成分作为查询,并通过输入要包括或排除的特定成分来进一步细化其配方搜索。我想知道如何通过这个请求,例如用户只输入了两个包含的成分和一个被排除的成分

$res = $client->get('http://api.yummly.com/v1/api/recipes?_app_id='MY_ID'&_app_key='MY_KEY'&q='.$query.'&allowedIngredient[]='.$include.'&allowedIngredient[]='.$include2.'&allowedIngredient[]='.$include3.'&excludedIngredient[]='.$exclude.'&excludedIngredient[]='.$exclude2.'&maxResult=50', ['auth' =>  ['user', 'pass']]);
        $body = json_decode($res->getBody(), TRUE);

非常感谢您提供任何帮助。

UPDATE应答

$res = 'http://api.yummly.com/v1/api/recipes?_app_id=MY_ID&_app_key=MY_KEY&q='.$query;

        if($include) {
        $res .= '&allowedIngredient[]='.$include;
        }

        if($include2) {
         $res .= '&allowedIngredient[]='.$include2;
        }

        if($include3) {
         $res .= '&allowedIngredient[]='.$include3;
        }

        if($exclude) {
         $res .= '&excludedIngredient[]='.$exclude;
        }

        if($exclude2) {
         $res .= '&excludedIngredient[]='.$exclude2;
        }

        $res .='&requirePictures=true&maxResult=50';
        $result = $client->get($res , ['auth' =>  ['user', 'pass']]);
        $body = json_decode($result->getBody(), TRUE);

1 个答案:

答案 0 :(得分:1)

最简单的方法是检查有效值。

$apiUrl = 'http://api.yummly.com/v1/api/recipes?_app_id='MY_ID'&_app_key='MY_KEY'&q='.$query;

if($include) {
    $apiUrl .= '&allowedIngredient[]='.$include;
}

if($include2) {
    $apiUrl .= '&allowedIngredient[]='.$include2;
}

// Etc for all vars

你也可以通过构建一个数组然后进行内爆,但这会非常混乱,因为键需要'$ allowedIngredient []'所以你会调查那条路线。