graphql 有 Schema,Object,String,Int,Boolean 等元素组成。其中 Schema 包含 Query,Mutation,Subscription 三个 Object 类型的成员,对应 graphql 的三类操作。

var schema, _ = graphql.NewSchema(graphql.SchemaConfig{
    Query:    rootQuery, // 针对查询
    Mutation: rootMutation, // 针对写操作
    Subscription: rootSubscription, // 暂时没研究过,跟实时通讯相关
})

// 定义根 QueryObject
var rootQuery = graphql.NewObject(graphql.ObjectConfig{
    Name:        "RootQuery", // Object 的类型名,必须符合变量规则,不能包含空格
    Fields: graphql.Fields{ // 该对象所包含的字段列表
        "memos": &graphql.Field{
            Type: MemoType, // 类型是下面的自定义类型
            Args: graphql.FieldConfigArgument{
                "content": &graphql.ArgumentConfig{
                    Type: graphql.String,
                },
            },
            // 每个字段可以提供一个解析函数,用来告知 graphql 如何获取数据
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                return nil, nil
            },
        },
    }
}

// 自定义Object
var MemoType = graphql.NewObject(graphql.ObjectConfig{
    Name:        "MemoType",
    Fields: graphql.Fields{
        "id": &graphql.Field{
            Name: "id",
            Type: graphql.Int,
        },
        "content": &graphql.Field{
            Name: "content",
            Type: graphql.String,
        },
    },
})
javascript调用

axios.post("/graphql", {
    "query": `mutation createMemo($content: String) { 
        createMemo(content: $content) {
            id
            content
        }
    }`,
    "variables": {
        content: "哈哈"
    }
}).then((resp) => {
    if (resp.status == 200 && !resp.data.errors) {
        console.log(resp.data.data)
    }
});

标签: none

添加新评论