如何从 PHP 脚本中查询 Github GraphQL API?

4
我正在查询Github API以获取一些内部监控接口。在文档中,我发现了新的GraphQL实现,并决定在我的接口中使用它。
因此,我准备了这个小的PHP脚本来测试Github GraphQL API,我已将其粘贴在下面。每当我运行脚本时,我总是会得到“解析JSON时出现问题”的错误。我在这里做错了什么吗?有人能帮我指出我犯了什么错误吗?
<?php
    //GRAPHQL request
    $postData =<<<‘JSON’
    {
    “query”: query{
    user(login:“tojochacko”) {
    name
    }
    }
    }
    JSON;

    $json = json_encode($postData);

    $chObj = curl_init();
    curl_setopt($chObj, CURLOPT_URL, ‘https://api.github.com/graphql’);
    curl_setopt($chObj, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($chObj, CURLOPT_CUSTOMREQUEST, ‘POST’);
    curl_setopt($chObj, CURLOPT_POSTFIELDS, $json);
    curl_setopt($chObj, CURLOPT_HEADER, true);
    curl_setopt($chObj, CURLOPT_VERBOSE, true);
    curl_setopt($chObj, CURLOPT_HTTPHEADER,
    array(
    ‘User-Agent: PHP Script’,
    ‘Content-Type: application/json’,
    'Authorization: bearer '.GITHUB_TOKEN
    )
    );

    $response = curl_exec($chObj);
    echo $response;
?>
1个回答

15

我自己找到了解决方法。 我传递给Github API的JSON格式不是正确的预期格式。 Github不幸没有正确的关于预期格式的文档。我不得不阅读GraphQL规范并查看一些php客户端库代码以了解格式。下面是正确的代码来查询Github GraphQL API。希望这可以帮助任何经历同样问题的人。

//GRAPHQL request
$query = <<<'JSON'
query{
   user(login:"tojochacko") {
       name
   }
}
JSON;
$variables = '';

$json = json_encode(['query' => $query, 'variables' => $variables]);

$chObj = curl_init();
curl_setopt($chObj, CURLOPT_URL, ‘https://api.github.com/graphql’);
curl_setopt($chObj, CURLOPT_RETURNTRANSFER, true);    
curl_setopt($chObj, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($chObj, CURLOPT_HEADER, true);
curl_setopt($chObj, CURLOPT_VERBOSE, true);
curl_setopt($chObj, CURLOPT_POSTFIELDS, $json);
curl_setopt($chObj, CURLOPT_HTTPHEADER,
     array(
            'User-Agent: PHP Script',
            'Content-Type: application/json;charset=utf-8',
            'Authorization: bearer '.GITHUB_TOKEN 
        )
    ); 

$response = curl_exec($chObj);
echo $response;

2
你可以省略 curl_setopt($chObj, CURLOPT_HEADER, true); 这一行,因为它会将头信息包含在响应中,而有些人可能只想要 json_decode 它。 - mavrosxristoforos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接