通过id获取并组合多个json请求

时间:2017-06-15 19:20:48

标签: php json

首先,我有两个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并获取另一个。

1 个答案:

答案 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