ここ最近とてもGraphQLが盛り上がってますね! イベントも続々と開催されていたりするので、勢いを感じています。
そんなGraphQLを遅まきながら勉強してみました。
GraphQLとは?
既に様々な記事で論じられている内容なので割愛します。
この記事が個人的に一番分かりやすかったです。
実装してみよう!
それでは早速実装してみます。
今回はGolangを使い、サーバサイド側の実装を行います。
ライブラリ
ライブラリとしては以下を使いました。
こちらとも迷ったのですが、今回はStar数の多い方を使いました。
あとは、簡単にDBを使いたかったためSQLXを使用しました。
コード
実装してみたものは以下になります。
慌てて作ったものになるので、汚いですが一応動きます!
コード内でキモとなる部分は以下です。
- schemaの定義
var queryType = graphql.NewObject( graphql.ObjectConfig { Name: "Query", Fields: graphql.Fields { "user": &graphql.Field { Type: userType, Args: graphql.FieldConfigArgument { "id": &graphql.ArgumentConfig { Type: graphql.String, }, }, Resolve: func(p graphql.ResolveParams) (interface{}, error) { idQuery, isOK := p.Args["id"].(string) if isOK { var u = user{} err := DB.Get(&u, "SELECT * FROM user WHERE id=$1", idQuery) if err != nil { return nil, nil } return &u, nil } return nil, nil }, }, }, }, )
ちょっと波動拳なコードになってしまっていますが、ここでschemaを定義しています。
今回は簡単な user
のデータを返すschemaになります。
Queryとして user
の id
を指定してもらい、それに対して resolve
、何を返すか?というのを指定してます。
そこで、実際にDBを照らし合わせてみて結果を返しています。
やってみて
結構記述量が多くなるので、実際にRESTfulなAPIからの書き換えになると大変だなーという小並感。
ただ、やるメリットは多大だと思うので積極的に使ってみたいですね!
goaのGraphQLバージョンとかあれば面白いな、とふと思ってみたり。
という感じで中身の薄い記事ですが、やってみた現場からは以上です!