Php cURL с вызовом API с помощью GRAPHQL

Я пытаюсь вызвать 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);
}

Любая помощь будет полезна.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
7
0
6 982
5

Ответы 5

Я могу порекомендовать использовать https://github.com/softonic/graphql-клиент, он отлично сработал для нас.

Он работает хорошо, но я использую токен доступа, и он не требует OAuth2. Не уверен, что у вас есть процесс sem?

Brian Nowlan 01.03.2019 11:35

С аутентификацией пока не разобрались, так как наш API только внутренний.

spawnia 01.03.2019 13:10

В этой библиотеке есть вспомогательный конструктор, использующий промежуточное ПО OAuth2 guzzle. Тем не менее, вы можете использовать свое собственное промежуточное ПО таким же образом: github.com/softonic/graphql-client/blob/master/src/…

milo5b 10.05.2019 10:04

Вы можете создать свой собственный клиент, используя любое промежуточное ПО, которое вам нужно:

$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

Для тех, кто хочет запрашивать службу GraphQL БЕЗ сторонней библиотеки, я в основном взял код Брайана и протестировал службу GraphCMS, для которой я уже написал код Node.js. Итак, я знал, что URL-адрес, токен авторизации и запрос работают.

<?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);
}

?>

Все работало нормально. Токен аутентификации представляет собой большую длинную строку символов, предоставляемую GraphCMS, и ее нужно передать только в заголовке. Так что никакого сложного процесса аутентификации — пока у вас есть токен.

Если нет аутентификации

Вы можете использовать file_get_contents вместо curl

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

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

использовать json в параметре запроса для graphql;

Более простой способ сделать это — использовать платформу API. Я часто использую Postman, платформа имеет функциональные возможности, чтобы предоставить вам код PHP cURL для запроса GraphQL в части инструментов GraphQl приложения.

Другие вопросы по теме