Php cURL,使用GRAPHQL调用API

k2fxgqgv  于 2022-11-13  发布在  PHP
关注(0)|答案(6)|浏览(310)

我正在尝试调用一个名为Wave的API,我以前用过cURL,但从来没有用过GRAPHQL查询。我想知道在使用cURL时下面的代码有什么问题。我得到一个错误错误请求下面是我的代码示例。
这就是API cURL

curl -X POST "https://reef.waveapps.com/graphql/public" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{ "query": "query { user { id defaultEmail } }" }'

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://reef.waveapps.com/graphql/public');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{ "query": "query { user { id defaultEmail } }');
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer 1212121';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
var_dump($result);

if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

任何帮助都是有帮助的。

xu3bshqb

xu3bshqb1#

对于那些希望在没有第三方库的情况下查询GraphQL服务的人,我基本上采用了Brian的代码,并针对我已经为之编写了Node.js代码的GraphCMS服务进行了测试。

<?php
$endpoint = "https://api-euwest.graphcms.com/v1/[[your id number here]]/master";//this is provided by graphcms
$authToken = "[[your auth token]]";//this is provided by graphcms
$qry = '{"query":"query {products(where:{status:PUBLISHED}){title,img,description,costPrice,sellPrice,quantity,sku,categories {name},brand {name}}}"}';

$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer '.$authToken;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $qry);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
var_dump($result);

if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}

?>

所有的工作都很好。auth令牌是GraphCMS提供的一个很长的字符串,只需要在头部传递。所以没有真实的棘手的身份验证过程-只要你有令牌。

f45qwnt8

f45qwnt82#

我可以推荐使用https://github.com/softonic/graphql-client,它对我们来说效果很好。

kwvwclae

kwvwclae3#

一种更简单的方法是使用API平台。我经常使用Postman,该平台具有在应用程序的GraphQl工具部分中为GraphQL请求给予PHP cURL代码的功能。

ffx8fchx

ffx8fchx4#

您可以创建自己的客户端,传递您想要的任何中间件:

$clientWithMiddleware = \MyGuzzleClientWithMiddlware::build();
$graphQLClient = new \Softonic\GraphQL\Client(
    $clientWithMiddleware,
    new \Softonic\GraphQL\ResponseBuilder()
);

关于如何使用中间件构建Guzzle客户端的示例,您可以查看以下内容:https://github.com/softonic/guzzle-oauth2-middleware/blob/master/src/ClientBuilder.php

qlvxas9a

qlvxas9a5#

如果没有身份验证
您可以使用file_get_contents代替curl

$url = http://myapi/graphql?query={me{name}}

$html =file_get_contents($url);
echo $html;

在graphql查询参数中使用json;

vc9ivgsu

vc9ivgsu6#

有点晚了,但我做了这个代码

$endpoint = "https://gql.waveapps.com/graphql/public";
$authToken = ""; //Your Bearer code
$qry = '{"query": "query {user {id firstName lastName defaultEmail createdAt modifiedAt}}"}';
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Authorization: Bearer '.$authToken;

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $qry);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
var_dump($result);

if (curl_errno($ch)) {
  echo 'Error:' . curl_error($ch);
}

相关问题