GraphQLはAPI向けに作られたクエリ言語(SQLと同じジャンル)、実行環境である。
従来のRESTでは事前に決められたリソースをURLを指定して取得するのに対し、GraphQLでは必要なものを指定できる。 複数のリソースを取得するとき、RESTではそれぞれAPIを呼び出す必要があるが、GraphQLでは1回のAPI呼び出しで完了する。 Reactなどと組み合わせて使用される。
データを変更する。 アプリケーションの状態を変更するために作成する。 ミューテーションはアプリケーションで使われる動詞と対応するのが望ましい。 サービスに対してできることがミューテーションとして定義される。
type Mutation {
postPhoto(
name: String!
description: String
category: PhotoCategory=PORTRAIT
): Photo!
}
schema {
query: Query
mutation: Mutation
}
mutation {
postPhoto(name: "Sending the Palisades") {
id
url
created
postedBy {
name
}
}
}
フラグメントは複数の場所で使いまわすことができる選択セット。
query {
allTrails {
...trailStatus
...trailDetails
}
}
クエリ内の静的な値を置き換えて動的な値を渡せる。
サーバを更新するたびにクライアントで情報をリアルタイムに受け取る。
subscription {
liftStatusChange {
name
capacity
status
}
}
mutation closeLift {
setLiftStatus(id: "astra-express" status: HOLD) {
name
status
}
}
変更内容がサブスクリプションしているクライアントに向けてプッシュされる。
APIスキーマの詳細を取得できる機能。
query {
__schema {
types {
name
description
}
}
}
query liftDetails {
__type(name: "Lift") {
name
fields {
name
description
type {
name
}
}
}
}
GraphQLによって、APIは型の集合としてとらえられるようになる。 データ型の集合をスキーマという。
異なる型が混在するフィールドを表現するのに使う。 含まれている複数の型がまったく異なるものであればユニオン型を、共通のフィールドがある場合はインターフェースを利用するのが一般的。
"""
最低一度は認可されたユーザ
"""
type User {
"""
ユーザの一意のGitHubログインID
"""
githubLogin: ID!
"""
ユーザの姓名
"""
name: String
"""
このユーザが投稿した全写真
"""
postedPhotos: [Photo!]!
"""
このユーザが含まれる全写真
"""
inPhotos: [Photo!]!
}
type Mutation {
"""
GitHubユーザで認可
"""
githubAuth(
"ユーザの認可のために送信されるGitHubの一意のコード"
code: String!
): AuthPayload!
}
Emacsでコード、クエリアクセス、結果出力をプレーンテキストで残す設定。
graphql-modeを追加する。 davazp/graphql-mode: An Emacs mode for GraphQL
ob-graphqlを追加する。 jdormit/ob-graphql: GraphQL execution backend for org-babel
取得元を入力#+BEGIN_SRCに入れることで、org-babelでクエリを実行できる。
query GetContinents {
continent(code: "AF") {
name
code
}
}
Rubyを使っての解説。
導入。
RubyでGraphQLを使う方法。
graphqlの記事。
ドキュメント。
graphql/graphql-playground: 🎮 GraphQL IDE for better development workflows (GraphQL Subscriptions, interactive docs & collaboration)
graphqlのサンプル。
graphqlのサンプル。
GitHubのGraphQL API。
ノードとエッジについてのブログ記事。
サンプルでどんな感じかテストできるサイト。 スターウォーズの情報にアクセスできる。
query {
person(personID: 5){
name
birthYear
created
filmConnection {
films {
title
}
}
}
}
- 86, 100, 124, 147, 185, 190, 197, 229
実際にコードとして書いていくのにはあまり評判がよくない。概要を知るためには役立つよう。 コードサンプルはJavaScript, node.js, expressなので、元からこれらについて知らないとあまりピンとこない感じがする。
メモ。 グラフ理論。グラフは概念同士の関係性を図示するための優れた考え方。 SQLはデータベースのための問い合わせ言語で、GraphQLはインターネットのための問い合わせ言語。