用php来查询graphql
时间:2022-07-24
本文章向大家介绍用php来查询graphql,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
什么是GraphQL?
类似于SQL,GraphQL也是一种ql(query language)。不过是用于API查询,可以更加直观的取到所需要查询的数据。普通的RESTful API获取到的数据类型是以服务器确定的,但是GraphQL获取到的数据是以查询语句为准的。所以就不用担心服务器返回的数据结构发生变化而影响业务。
如何使用GraphQL API?
https://graphql.org/code/ 官方这里提供了一些开源工具,我们也可以方便的使用PostMan来调试API。
不过client并没有提供php版本的demo。虽然GraphQL很牛逼,但是我并不想自己搭建一个去看接口传输到底是如何的,于是我用PostMan抓了一下包,就拿到了传入的参数案例。
POST /client/v4/graphql HTTP/1.1
Content-Type: application/json
User-Agent: PostmanRuntime/7.15.0
Accept: */*
Cache-Control: no-cache
Postman-Token: aa6b2a4a-ed11-463f-a186-ce0da2c35c22
Host: api.cloudflare.com
Accept-Encoding: gzip, deflate
Content-Length: 408
Connection: close
{"query":"{ viewer { zones(filter: {zoneTag: "XXXX"}) { httpRequests1mGroups(orderBy: [datetimeHour_ASC], limit: 1000, filter: {datetime_geq: "2020-04-23T18:00:00+08:00"}) { dimensions { datetimeHour } sum { bytes cachedBytes requests cachedRequests countryMap { bytes requests clientCountryName } responseStatusMap { requests edgeResponseStatus } } uniq { uniques } } } } }"}
该请求是一个json格式的post请求,query键值对应了要查询的语句。所以用php实现很简单。
#要查询的GraphQL语句
$content=<<<CONTENT
{
viewer {
zones(filter: {zoneTag: "%s"}) {
httpRequests1mGroups(orderBy: [datetimeHour_ASC], limit: %d, filter: {datetime_geq: "%s"}) {
dimensions {
datetimeHour
}
sum {
bytes
cachedBytes
requests
cachedRequests
countryMap {
bytes
requests
clientCountryName
}
responseStatusMap {
requests
edgeResponseStatus
}
}
uniq {
uniques
}
}
}
}
}
CONTENT;
$content = sprintf($content,"参数1","参数2",'参数3');#上面我的语句中留了几个参数,现在填进去
$url = 'https://api.cloudflare.com/client/v4/graphql';
$ch = curl_init();
$defaultOptions = [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => json_encode(array('query' => $content)), # JSON化我们的POST数据
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",# 必须指定JSON格式
"X-AUTH-EMAIL: ".$mail, #这是我用的API验证部分
"X-AUTH-KEY: ".$key,#这是我用的API验证部分
]
];
curl_setopt_array($ch, $defaultOptions);
$chContents = curl_exec($ch);
$curlInfo = curl_getinfo($ch);
curl_close($ch);
$contents = $chContents;
echo $contents;
基本上就是这样了。抓包就可以搞明白具体的传参情况了。
参考
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC