ここ最近とてもGraphQLが盛り上がってますね!
イベントも続々と開催されていたりするので、勢いを感じています。
そんなGraphQLを遅まきながら勉強してみました。
GraphQLとは?
既に様々な記事で論じられている内容なので割愛します。
この記事が個人的に一番分かりやすかったです。
qiita.com
実装してみよう!
それでは早速実装してみます。
今回はGolangを使い、サーバサイド側の実装を行います。
ライブラリ
ライブラリとしては以下を使いました。
github.com
こちらとも迷ったのですが、今回はStar数の多い方を使いました。
github.com
あとは、簡単にDBを使いたかったためSQLXを使用しました。
github.com
コード
実装してみたものは以下になります。
github.com
慌てて作ったものになるので、汚いですが一応動きます!
コード内でキモとなる部分は以下です。
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バージョンとかあれば面白いな、とふと思ってみたり。
という感じで中身の薄い記事ですが、やってみた現場からは以上です!