我可以使用Guzzle来使用GraphQL API吗?

时间:2019-06-07 12:39:14

标签: php graphql guzzle

在google-verse中,关于在PHP中使用GraphQL API的信息并不多。从我的角度来看,有几个软件包主要与创建自己的GraphQL API有关,而与使用无关。我可能使事情变得过于复杂,或者问题的解决方案显而易见。我已经解决了我的问题,并将发布答案。

3 个答案:

答案 0 :(得分:3)

只需从枪口发出正常的发帖请求即可。添加表单参数作为查询和变量。将查询置于查询形式参数中,并将变量作为键值数组。

useFirebase.js

答案 1 :(得分:0)

当我几乎不了解它们提供的功能时,我不想将其引入,而只是想使用与REST世界中相同的工具进行轻量级转换。答案是肯定的,您可以使用Guzzle来使用GraphQL API。

可能有一些方法可以使这种外观更漂亮,但是目前,这是有效的。您通过Authorization标头传递授权,并且Content-Type必须设置为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
]);

答案 2 :(得分:0)

除了 Vim Diesel 在其帖子中提到的答案之外,我还想补充一些内容。

截至 2021 年,当我遵循代码的格式时,我最终得到了格式错误的有效负载作为错误消息。为了纠正这个问题,我删除了查询正文 query { } 并使用了 '"query": "query queryName{ }"'

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

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

您可以在 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
]);