1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Basic Study LogAdvent Calendar 2024

Day 21

GraphQLを1から勉強しなおしてみた ~ サブスクリプション ~

Posted at

はじめに

先日に引き続きGraphQLを一から勉強し直していきます。

前回はこちら。

サブスクリプション

リアルタイムでデータの変更をクライアントに通知する。

クライアントはサーバーにサブスクリプションを登録し、データが変更されるとサーバーから自動的に更新情報が送られる。これにより、クライアントは最新のデータを常に受け取ることが可能となる。

サブスクリプションはpub/subシステムをサーバーに持ち、データの更新があるとメッセージが発行され、それをクライアントに通知する。

サーバー
type Subscription {
  reviewCreated: Review
}
クライアント
subscription NewReviewCreated {
  reviewCreated {
    rating
    commentary
  }
}

サブスクリプションは1つの操作に対して1つのルートフィールドを持つことしかできない。それぞれの操作に名前をつける必要がある。

# NG
subscription {
  reviewCreated {
    rating
    commentary
  }
  humanFriendsUpdated {
    name
    friends {
      name
    }
  }
}

# OK
subscription NewReviewCreated {
  reviewCreated {
    rating
    commentary
  }
}
subscription FriendListUpdated($id: ID!) {
  humanFriendsUpdated(id: $id) {
    name
    friends {
      name
    }
  }
}

サブスクリプションはクエリやミューテーションよりも複雑で、特にサーバーを水平スケーリングする場合、各クライアントが特定のサーバーインスタンスにバインドされる必要がある。例えばWebSocketを使用する場合、接続が切れたときに再接続するロジックが必要となる。

更新頻度がそれほど高くないデータについては、定期的なポーリング(クライアントが一定の間隔でサーバーにリクエストを送信する)、モバイル・プッシュ通知、またはクエリの再取得が必要。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?