首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用php来查询graphql

用php来查询graphql

作者头像
yumusb
发布2020-08-28 15:11:34
2.6K0
发布2020-08-28 15:11:34
举报
文章被收录于专栏:坏男孩坏男孩

什么是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;

基本上就是这样了。抓包就可以搞明白具体的传参情况了。

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是GraphQL?
  • 如何使用GraphQL API?
  • 参考
相关产品与服务
Serverless HTTP 服务
Serverless HTTP 服务基于腾讯云 API 网关 和 Web Cloud Function(以下简称“Web Function”)建站云函数(云函数的一种类型)的产品能力,可以支持各种类型的 HTTP 服务开发,实现了 Serverless 与 Web 服务最优雅的结合。用户可以快速构建 Web 原生框架,把本地的 Express、Koa、Nextjs、Nuxtjs 等框架项目快速迁移到云端,同时也支持 Wordpress、Discuz Q 等现有应用模版一键快速创建。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档