PHP5.2 から GraphQL を使うには?

ショコラ
ショコラ

PHP5.2 から GraphQL を使うには?

GraphQL のクライアントは POST で送って JSON で受け取るだけだから、PHP5.2(且つ EUC-JP・・・)という化石のシステムでも動くはず。と思ったのでチャレンジしてみました。

もっさん先輩
もっさん先輩

GraphQL で問い合わせる基本形です。
squid のプロクシ経由で送信することを想定しています。

<?php
$endpoint = 'http://192.168.0.180:4000';
$host = '192.168.0.180:4000';
$access_token = '';

$query ='
query {
  getPerson(id:2) {
    id
    name
    age
  }
}
';
$variables = array();

mb_convert_variables('UTF-8','EUC-JP',$variables);
$post = json_encode(array('query'=> $query,'variables'=> $variables));

$header = array(
  'Host: '.$host,
  'Authorization Bearer '.$access_token,
  'Content-Type: application/json',
  'Content-Length: '.strlen($post),
);

$options = array(
  CURLOPT_POST           => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_URL            => $endpoint,
  CURLOPT_HTTPHEADER     => $header,
  CURLOPT_POSTFIELDS     => $post
  // PROXY
  //CURLOPT_HTTPPROXYTUNNEL => true,
  //CURLOPT_PROXY           => 'squid',
  //CURLOPT_PROXYPORT       => '3128',
);

$curl = curl_init();
curl_setopt_array($curl,$options);
$result = curl_exec($curl);
$result = json_decode($result,true);
mb_convert_variables('EUC-JP','UTF-8',$result);

var_dump($result);

↓実行結果です。化石システムでも動きました。

# php a.php
array(1) {
  ["data"]=>
  array(1) {
    ["getPerson"]=>
    array(3) {
      ["id"]=>
      string(1) "2"
      ["name"]=>
      string(8) "ショコラ"
      ["age"]=>
      int(10)
    }
  }
}

以上

Scroll to Top