GraphQLの概要
GraphQL(グラフキューエル)とは、API向けに作られたクエリ言語(Query Language)、およびその実装(ランタイム)を指します。クエリ言語とはデータベース等からデーターを問い合わせて取得する「問い合わせ言語」と呼ばれる言語であり、代表的な物としてはSQLがあります。
GraphQLは、2012年にモバイルアプリケーションを作成するにあたり、従来のRESTFulサービスに不満を感じていたFacebook社により開発されました。
2015年にオープンソース化 され、2019年には中立的な非営利組織、GraphQLFoundationが設立され、GraphQLは、GraphQLFoundation により管理されるようになりました。
GraphQLの主な特徴
GraphQLには以下のような特徴があります。
- 1回のリクエストで多くのリソースを取得することができます。
- データ型を定義するので、アプリと取得したデータ間でのデータ型の不一致を防げます。
- GraphiQLなどの強力な開発ツールを使用し、事前にAPIに要求するデータを把握しコードをより良く改善することができます。
GraphQLは、オブジェクトのフィールドを選択してデータを取得します。
例えば下記のようなクエリを投げると、
hero{
name
}
}
以下のようにスターウォーズのメインヒーローの名前を JSON 形式で得ることが出来ました。
"data":{
"hero":{
"name":"R2-D2"
}
}
}
フィールドはサブセレクションを行うことでオブジェクトを参照することもできます。
例えば以下のようなクエリを投げた場合
hero{
name
friends{
name
}
}
}
以下のようにメインヒーローとその友人の名前が得られました。
"data":{
"hero":{
"name":"R2-D2",
"friends":{
{
"name": "Luke Skywalker"
},
{
"name": "Han Solo"
},
{
"name": "Leia Organa"
}
}
}
}
}
このように従来のRESTアーキテクチャーでは、複数回のやり取りをしなければならないようなケースも一回でデータを取得することが可能です。
GraphQLのユースケース
Githubをはじめ、YouTube、Yelp、RedditなどのさまざまなサイトでGraphQL API が公開されています。
GraphQLの動作環境
GraphQLは、以下のように多くのプログラミング言語で実装されています。
プログラミング言語 | サーバ | クライアント | ツール |
---|---|---|---|
JavaScript | GraphQL.js Apollo Server Express GraphQL graphql-yoga GraphQL Helix |
Apollo Client AWS Amplify Relay urql GraphQL Request graphql-hooks graphqurl Lokka nanogql Grafoo qg-loader |
Postgraphile GraphQL Code Generator GraphiQL GraphQL Tools GraphQLShield GraphQL-ESLint GraphQL Inspector GraphQL-WS GraphQL Live Query GraphQL CLI GraphQL Mesh GraphQL Config GraphQL Scalars GraphQL Modules GraphQLMiddleware SOFA GraphQL Language Service GiraphQL |
Go | graphql-go 99designs/gqlgen graph-gophers/graphql-go samsarahq/thunder graphql-relay-go appointy/jaal |
machinebox/graphql graphql go-graphql-client |
graphjin |
PHP | API Platform graphq-php WPGraphQL Lighthouse Siler GraphQLBundle GraphQLite Railt graphql-relay-php GraphQL by PoP GraphQL API for WordPress GraPHPinator serge |
||
C#/.NET | graphql-dotnet Hot Chocolate graphql-net Entity GraphQL NGraphQL |
Strawberry Shake GraphQL.Client graphql-net-client SAHB.GraphQLClient |
|
Python | Graphene Ariadne Strawberry Tartiflette |
GQL sgqlc python-graphql-client |
|
Java / Kotlin | graphql-java graphql-kotlin KGraphQL |
Apollo Android graphql-kotlin Nodes |
GraphQL Java Generator |
Rust | graphql-rust/juniper Async-graphql |
cynic gql_client |
|
Ruby | graphql-ruby Agoo |
||
Elixir | absinthe graphql-elixir |
Neuron common_graphql_client |
|
Swift/Objective-C | Graphiti GraphZahl |
Apollo iOS Graphaello SwiftGraphQL GraphQL iOS |
|
Scala | Sangria Caliban |
Caliban | |
Flutter | graphql Ferry |
||
Clojure | lacinia graphql-clj alumbra |
regraph | |
C/C++ | libgraphqlparser | ||
Haskell | Morpheus GraphQL Mu-Haskell with Mu-GraphQL |
morpheus-graphql-client | |
Elm | dillonkearns/elm-graphql | ||
OCaml/Reason | ocaml-graphql-server | ||
Erlang | graphql-erlang | ||
Groovy | gorm-graphql GQL |
||
R | ghql | ||
Julia | Diana.jl | ||
Perl | graphql-perl | ||
D | graphqld |
GraphQLのライセンス
ご利用のプロダクトにより異なります。
GraphQLの参考情報
GraphQLの公式サイトは下記
https://graphql.org/