我稍微试了试GraphQL

2016/11/04晚上,我在Twitter上看到了很多有关GraphQL的讨论,于是我不知道这是什么东西,就发了一条推文。结果,我被官方账号关注了,也加入了一些相关的群组,让我有机会去尝试一下。

GraphQL (图灵使用者界面)

请看这个链接:http://graphql.org/

GraphQL是什么?

从我稍微尝试触摸的直觉来看,这可能是一个能指定结果的RESTful API,可能是因为我用Node.js搭建了服务器的缘故。

样本(Node.js)

{
  "devDependencies": {
    "express": "^4.14.0",
    "express-graphql": "^0.5.4",
    "graphql": "^0.7.2"
  }
}
var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema } = require('graphql');

var schema = buildSchema(`
    type Query {
        character(val: Int): Character!,
        func(val: Int): Int
    },
    type Episode {
        name: String!
    },
    type Character {
        name: String!
        episodes: [Episode]!
    }

`);

var root = {
    character : {
        name: "name1",
        episodes: [
            { name: "child1"},
            { name: "child2"},
            { name: "child3"},
        ]
    },
    func: (val) => {
        console.log(val);
        return val.val * 2;
    },
};

var app = express();
app.use('/graphql', graphqlHTTP({
  schema: schema,
  rootValue: root,
  graphiql: true,
}));
app.listen(4000, () => console.log('Now browse to localhost:4000/graphql'));

使用npm install命令安装包的模块
使用node server.js命令执行

成果

当您在浏览器中访问 http://localhost:4000/graphql 时

image

因此,請來

image

左边是查询内容,右边是结果。从服务器返回的结果(JSON)中,好像可以指定只获取这样的字段吧?哈哈。而且还可以指定函数的参数,看起来可以做很多事情呢?哈哈。

请注意

如果模式中没有类型为查询的节点,它会报错(可能是在根节点的结构定义中给定了名称)。

触动心灵的感受

请求来了,可以将需要的数据存储为KVS(键值存储),然后只返回客户端要求的数据,还可以根据要求进行格式化,这样在测试时也能更容易地发现错误。
另外,可以使用接口来定义模式,或者自己定义特定类型也行,这可能不错。
但是,为什么类型中没有Int64呢,我在想为什么呢。
另外,希望官方网站的文档能够说明使用了什么样的数据,因为现在很难理解……(我在参数这里纠结了大约30分钟,真是太抱歉了。)

bannerAds