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

How to query Github GraphQL API from PHP script?

我正在查询 Github API 一些内部监控接口。我在文档中发现了新的 GraphQL implementation,并决定将其用于我的界面。

因此,我准备了这个小 PHP 脚本来测试我粘贴在下面的 Github GraphQL API。每当我 运行 脚本时,我总是会收到“Problems parsing 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;
?>

我自己找到了修复方法。我传递给 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;