Php 我可以使用Guzzle进行GraphQL API消费吗?

Php 我可以使用Guzzle进行GraphQL API消费吗?,php,graphql,guzzle,Php,Graphql,Guzzle,在google的文章中没有很多关于使用PHP中的GraphQLAPI的信息。在我看来,有几个包主要是关于创建您自己的GraphQLAPI的,但没有特定于消费的。有可能是我把事情复杂化了,或者我的问题的解决方案是显而易见的。我已经解决了我的问题,并将发布答案。当我几乎不了解这些软件包提供的内容时,我不想使用这些软件包,我只想使用在REST世界中使用的相同工具进行轻量级转换。答案是肯定的,您可以使用Guzzle来使用GraphQLAPI 也许有办法让它更漂亮,但就目前而言,这是可行的。您通过授权头传

在google的文章中没有很多关于使用PHP中的GraphQLAPI的信息。在我看来,有几个包主要是关于创建您自己的GraphQLAPI的,但没有特定于消费的。有可能是我把事情复杂化了,或者我的问题的解决方案是显而易见的。我已经解决了我的问题,并将发布答案。

当我几乎不了解这些软件包提供的内容时,我不想使用这些软件包,我只想使用在REST世界中使用的相同工具进行轻量级转换。答案是肯定的,您可以使用Guzzle来使用GraphQLAPI

也许有办法让它更漂亮,但就目前而言,这是可行的。您通过授权头传递授权,并且内容类型必须设置为application/json

构造查询时,请注意引号、间距和换行符。我还没有找到一种方法使代码更漂亮,并且仍然保持一个有效的查询。第一部分
{“query”:“query{
是每个查询的要求。对象名称必须用双引号括起来,查询体
“query{}”
也必须用双引号括起来

$graphQLquery = '{"query": "query { viewer { repositories(last: 100) { nodes { name id isPrivate nameWithOwner } } } } "}';

use GuzzleHttp\Client;

$response = (new Client)->request('post', '{graphql-endpoint}', [
    'headers' => [
        'Authorization' => 'bearer ' . $token,
        'Content-Type' => 'application/json'
    ],
    'body' => $graphQLquery
]);

只需从guzzle发出正常的post请求。添加表单参数作为查询和变量。将查询放入查询表单参数中,并将表单参数和变量作为键值数组

  $response = $this->client->post('https://grapqlEndPoint', [
        'form_params' => [
            'query' => '
                query($username: String!) {
                    users(username: $username) {
                        username               
                    }
                }',
            'variables' => [
                'username' => $username
            ]
        ]
    ]);

    echo $response->getBody()->getContents();

我想在Vim Diesel提到的关于他的帖子的答案的基础上补充几点

从2021年开始,当我按照代码的格式进行操作时,我确实会得到一个格式错误的负载作为错误消息。为了纠正这一点,我删除了查询主体
query{}
,并使用
“query”:“queryqueryname{}”

如果确实需要为GraphQL查询包含变量,可以执行以下操作(从):

在PHP中,您可以使用单引号
和句点
分隔查询,以避免硬编码变量和格式化

下面的完整示例代码说明了我的工作原理

use GuzzleHttp\Client;

$name = 'JohnDoe';
$graphQLquery = '{'.
    '"query": "query viewer {'.
                  'repositories(last: 100) {'.
                      'nodes {'.
                         'name'. 
                         'id'. 
                         'isPrivate'. 
                         'nameWithOwner'. 
                      '}'.
                  '}'. 
             '}",'.
    '"variables": { "name": "'.$name.'", "id": "1", "isPrivate ": "True", "nameWithOwner": "VimDiesel"}'.
 '}';'



$response = (new Client)->request('post', '{graphql-endpoint}', [
    'headers' => [
        'Authorization' => $token,
        'Content-Type' => 'application/json'
    ],
    'body' => $graphQLquery
]);

我不这么认为……json编码(GraphQLAPI所需)在哪里?有什么神奇之处?
use GuzzleHttp\Client;

$name = 'JohnDoe';
$graphQLquery = '{'.
    '"query": "query viewer {'.
                  'repositories(last: 100) {'.
                      'nodes {'.
                         'name'. 
                         'id'. 
                         'isPrivate'. 
                         'nameWithOwner'. 
                      '}'.
                  '}'. 
             '}",'.
    '"variables": { "name": "'.$name.'", "id": "1", "isPrivate ": "True", "nameWithOwner": "VimDiesel"}'.
 '}';'



$response = (new Client)->request('post', '{graphql-endpoint}', [
    'headers' => [
        'Authorization' => $token,
        'Content-Type' => 'application/json'
    ],
    'body' => $graphQLquery
]);