首先,我有两个API网址: http://example.com/api/list输出版本列表并将哈希作为ID输出。
[
{
"versions": [
{
"version": "1.0",
"hash": "15ac8f7dfcef3f3b9b3b5a48a7bee327",
},
{
"version": "1.1",
"hash": "5990bf1b3f11225d970c5d266e77e641",
}
]
}
]
然后通过POST请求http://example.com/api/version使用哈希来提取版本细节。换句话说,当在GET中请求时:/ api / version / 15ac8f7dfcef3f3b9b3b5a48a7bee327这是输出:
[
{
"id": "1",
"name": "Example",
"type": "version",
"version": "1.0",
"file_name": "testfile.txt",
"hash": "15ac8f7dfcef3f3b9b3b5a48a7bee327",
}
]
我尝试做的是创建一个foreach循环来读取api / list URL中的哈希值并获取所有版本的详细信息,并将它们全部组合成一个数组,当编码回json输出时会显示:
[
{
"id": "1",
"name": "Example1",
"type": "version",
"version": "1.0",
"file_name": "testfile1.txt",
"hash": "15ac8f7dfcef3f3b9b3b5a48a7bee327",
},
{
"id": "2",
"name": "Example2",
"type": "version",
"version": "1.1",
"file_name": "testfile2.txt",
"hash": "5990bf1b3f11225d970c5d266e77e641",
}
]
我不完全确定如何使用foreach循环执行此操作,因为我使用来自一个json请求的值来调用API并获取另一个。
答案 0 :(得分:0)
我会使用Guzzle HTTP client库来获取列表,然后解码响应主体,迭代哈希值,为每个哈希值发出新请求并附加其结果。
class ApiHashGet
{
public function fetchAll(string $api) : string
{
$client = new \GuzzleHttp\Client;
$response = $client->request('GET', "$api/list");
$list = json_decode($response->getBody(), $array = true)[0]['versions'];
foreach ($list as $item) {
$response = $client->request('GET', "$api/version/$item[hash]");
$result []= json_decode($response->getBody(), $array = true)[0];
}
return json_encode($result ?? []);
}
}
然后您将通过传递API基本URL来调用它。
echo (new ApiHashGet)->fetchAll('https://example.com/api');
我继续为你创建一个demo Github repository,并在travis-ci上构建单元测试:
https://travis-ci.org/scratchers/apihashget/builds/243475865