项目中有功能要调用 API,对方 API 用的是 GraphQL 实现,就简单学了下,感叹技术进步真快,Facebook 发明的这玩意儿咋这么牛逼,使前端开发人员变得主动起来,想要什么接口、返回什么结果,可以自己通过查询构建,而不是以前被动接受 RESTful API 标准,不得不说是 API 的革命,GraphQL 的语法强大且灵活,IDE智能提示也很棒,入门容易、边学边用。

这里用三个实例演示 GraphQL 应用:

用户登录

接收参数:app_key、账户名、密码,参数通过变量赋值,登录成功返回用户基本信息和 Token
mutation 是根类型,UserLogin 是操作名称可省略,后面括号内是参数声明,Login 是字段对象相当于接口方法,后面括号内是参数赋值,大括号内是需要返回的对象结构和字段
在 GraphiQL 中编写查询字符串及调试(下图)

查询字符串

mutation UserLogin(
$app_key: String!,
$account: String!,
$password: String!) {
Login(app_key: $app_key, account: $account, password: $password) {
user_id
token
user_info {
user_account
user_name
user_nickname
user_email
mobile_number
user_balance(product_id: Enum1)
}
}
}

GraphQL Query String

变量

{
"app_key": "pxhd491b991k8q5",
"account": "test001",
"password": ""
}

GraphQL Variables

用户提交

接收各种参数,通过变量赋值,执行成功返回一个字符串,在 GraphiQL 中编写查询字符串及调试(下图)

用户尚未登录?因为接口要求登录成功后,以后的请求都要在 Header 中带上 Token,Edit HTTP Headers 即可

查询字符串

mutation SubmitBetting($game_id: Int!,
$game_type_id: Int!,
$game_cycle_id: Int!,
$bet_info: String!,
$bet_mode: BetModeEnum,
$bet_multiple: Int!,
$bet_percent_type: BetPercentTypeEnum!,
$is_follow: Boolean,
$follow_commission_percent: Int,
$follow_secret_type: Int
) {
AddLotteryOrder(
game_id: $game_id,
game_type_id: $game_type_id,
game_cycle_id: $game_cycle_id,
bet_info: $bet_info,
bet_mode: $bet_mode,
bet_multiple: $bet_multiple,
bet_percent_type: $bet_percent_type,
is_follow: $is_follow,
follow_commission_percent: $follow_commission_percent,
follow_secret_type: $follow_secret_type)
}

GraphQL Query String

变量

{
"game_id":,
"game_type_id":,
"game_cycle_id": ,
"bet_info": "",
"bet_mode": "TwoYuan",
"bet_multiple": ,
"bet_percent_type": "NoPercentType",
"is_follow": false,
"follow_commission_percent": ,
"follow_secret_type":
}

GraphQL Variables

活动列表

接收一个条件对象 input,成功返回记录列表,根类型是 query 可省略,在 GraphiQL 中编写查询字符串及调试(下图)

查询字符串,这个接口只有整形和布尔型查询参数,我就没使用变量(如果是字符串参数最好使用变量,因为参数值中含有引号,会引起查询字符串语法错误,甚至注入风险)。

{
ActivityList(input: {is_show_menu: True, page: , rows_of_page: }) {
record {
id
title
content
web_title_img_url
app_title_img_url
web_menu_img_url
app_menu_img_url
}
}
}

GraphQL Query String

通过 HTTP 提供服务

传递三个参数分别是:

query:查询文档,必填,我们之前在 GraphiQL 中已调试好。
variables:变量,选填,键值对集合。
operationName:操作名称,选填,查询文档有多个操作时必填。

GET的话,放在 URL 参数中,格式:
?query=查询语句&operationName=操作名称&variables=变量集合

POST的话,首先在 Header 中声明 Content-Type: application/json,正文 JSON 片段:
{
  "query": "{viewer{name}}",             //查询字符串
  "operationName": "",                      //操作名称,选填,查询文档有多个操作时必填
  "variables": { "name": "value", ... }  //对象集合,选填
}

下面截图是在 Postman 中调试接口

看上去没问题,可以将HTTP请求封装,放进项目中

我只学了些皮毛,当然一般的项目也不会用太复杂的语法,以后有机会再学学服务端的配置。

边学边做,简单的 GraphQL 实例的更多相关文章

  1. 从零开始单排学设计模式「简单工厂设计模式」黑铁 III

    阅读本文大概需要 2 分钟. 本篇是设计模式系列的第二篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统.所以现在打算重写,加上距离现在也有一段时间了,也算 ...

  2. 最简单的struts实例介绍

    struts2环境配置   struts2框架,大多数框架都在使用.由于工作需要,开始做Java项目.先学个struts2. 一.下载struts2 有好多版本,我下载的是struts-2.2.1.1 ...

  3. 1101: 零起点学算法08——简单的输入和计算(a+b)

    1101: 零起点学算法08--简单的输入和计算(a+b) Time Limit: 1 Sec  Memory Limit: 128 MB   64bit IO Format: %lldSubmitt ...

  4. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  5. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  6. Qt5.9一个简单的多线程实例(类QThread)(第一种方法)

    Qt开启多线程,主要用到类QThread.有两种方法,第一种用一个类继承QThread,然后重新改写虚函数run().当要开启新线程时,只需要实例该类,然后调用函数start(),就可以开启一条多线程 ...

  7. Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util

    Java用户输入数值,做简单的猜数字游戏,导入基础的工具包util,导入包的方法为,import java.util.*: 完整的实例代码: /* 导入基础工具包 */ import java.uti ...

  8. 简单是Jedis实例(相对连接池而言)

    在引入相关jar包后,只要new一个Jedis对象,就能做redis相关操作了.以下是一个简单的jedis实例: package com.pptv.redis; import java.util.Ar ...

  9. grpc使用记录(三)简单异步服务实例

    目录 grpc使用记录(三)简单异步服务实例 1.编写proto文件,定义服务 2.编译proto文件,生成代码 3.编写服务端代码 async_service.cpp async_service2. ...

随机推荐

  1. MAC使用超级终端

    其实很简单. 先用ls看看/dev/tty.*哪个是具体的串口,我这里使用的edison的板子,所以插到macos上后可以看到的设备节点为: 只需要使用screen 命令即可,具体的命令格式如下: s ...

  2. 第一次面试经历(hr面)

    经过介绍,我有幸去到一家国际背景的广告公司面试前端开发实习生.收到的邮件是复试通知,看来我已经跳过了第一轮面试. 来到hr请我进了一个小间坐下里填求职书,里面有各种个人信息,有兴趣爱好,有工作经历,以 ...

  3. 洛谷P3916||图的遍历||反向建图||链式前向星||dfs

    题目描述 给出 NN 个点, MM 条边的有向图,对于每个点 vv ,求 A(v)A(v) 表示从点 vv 出发,能到达的编号最大的点. 解题思路 看起来很简单的一道题, 但我依然调了一天,我还是太菜 ...

  4. es6数组

    将两类对象转为真正的数组 Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和 ...

  5. kali自定义分辨率(1920*1080)

    运行一下两行代码: xrandr --newmode -hsync +vsync xrandr --addmode Virtual1 "1920x1080_60.00"

  6. 82、iOS 基本算法

    “冒泡排序.选择排序.快速排序.归并排序.逆序.二分查找.求两个整数的最大公约数和最小公倍数.” 一.冒泡排序 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作同样的 ...

  7. orm单表查询和模糊查询

    一.单表查询 1. 返回queryset对象的查询 all() 以列表形式返回全部queryset对象 filter(**kwargs) 筛选 exclude(**kwargs) 排除 reverse ...

  8. 阿里云远程连接CentOS

    1.购买一个CentOS的ECS服务器: 2.修改安全组,开放SSH/22的端口号: 这里是22/22为SSH连接的端口号:3389为远程桌面的默认端口号 3.利用xshell或者SecureCRT连 ...

  9. POI导入和导出Excel总结

    POI导入和导出Excel总结   POI使用总结 1.POI读取Excel 打开工作簿的方式有以下两种简单的应用,POI读取和输出工作簿文件都可以通过以下两种方式来声明: //通过输入流的方式打开本 ...

  10. 一个简单的TensorFlow可视化MNIST数据集识别程序

    下面是TensorFlow可视化MNIST数据集识别程序,可视化内容是,TensorFlow计算图,表(loss, 直方图, 标准差(stddev)) # -*- coding: utf-8 -*- ...