Pet*_*jci 11 php rest restful-url query-string guzzle
Guzzle客户端默认从此代码创建
$client->get('https://example.com/{?a}', array('a' => array('c','d')));
Run Code Online (Sandbox Code Playgroud)
这个网址
https://example.com/?a=c,d
Run Code Online (Sandbox Code Playgroud)
在RESTful应用程序中在查询字符串中发送数组的最佳做法是什么?问题是,如何在服务器端确定c,d是字符串还是数组?使用方括号发送数组不是更好a[]=c&a[]=d吗?如何设置Guzzle使用方括号?或者最好使用JSON编码变量?在服务器端,我正在使用Tonic.
工作解决方案:
$vars = array('state[]' => array('Assigned','New'), 'per_page' => $perPage, 'page' => $pageNumber);
$query = http_build_query($vars, null, '&');
$string = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $query); // state[]=Assigned&state[]=New
$client = new Client([follow instruction to initialize your client ....]);
$response = $client->request('GET', $uri, ['query' => $string]);
Run Code Online (Sandbox Code Playgroud)
现在,您的请求中具有相同的名称参数。
粪。
Guzzle 有一个您可以使用的辅助函数,称为build_query(). 这使用 PHP 的http_build_query().
以下是如何使用它的示例:
$params = [
'a[]' => [
'c',
'd'
],
'page' => 1
];
$query = \GuzzleHttp\Psr7\build_query($params);
$response = $client->request('GET', 'https://example.com/', [
'query' => $query
]);
Run Code Online (Sandbox Code Playgroud)
看来答案就在这里。
我想做类似的事情?status[]=first&status[]=second
您可以在 Guzzle 中执行此操作,如上面的链接所示:
$client = new Client('http://test.com/api');
$request = $client->get('/resource');
$query = $request->getQuery();
$query->set('status', array('first', 'second'));
Run Code Online (Sandbox Code Playgroud)