
ショコラ
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)
}
}
}
以上