RSCやAppRouterはGraphQLの正統進化で、resolverがJSXを返すようなもの
#React_Server_Components #App_Router #GraphQL #Resolver(GraphQL)
from: 宣言的UIのデータアーキテクチャはコンポーネントを中心に考える#63e199ea866030000007c6f9
@koushisa: Next.jsのfetch拡張はGraphQLのresolverを、GraphQLに依存しない形で作れる未来を目指している気がする
スレッドに続く
概念スキーマを外部スキーマに変換する層
ベストプラクティスのひとつであるコロケーションでGraphQLを実装すると、
レスポンスの階層とコンポーネントは1:1に近い形になる
UIの構築で複数のデータソースを使う通信でnetwork waterfallを起こさず(理想的には)一発で取れる
一方、GraphQLのレスポンスがコンポーネントの求める構造と完全に一致することは稀で、どのみちUIの視点でデータ構造を変換する処理は必要となる
React Server Componentsはクライアントと近い位置で概念データをコンポーネント向けに整形できる
APIを介さずDBファーストな選択も可能で、実装詳細の範囲の捉え方次第ではあるが適合可能性が高まる場合もある
blitzに近い感じkoushisa.icon
Component の描画に必要なデータは Component 自身が要求する
GraphQLとの対比
GraphQL自体REST APIの弱点を解決するためのもの
クライアント向けGraphQL入門
Resolver(GraphQL)をクラサバのクッションにしてる
RSCもREST APIの弱点は大体カバーしてる
概念スキーマ→外部スキーマの変換をGraphQL内で行うか、RSCへCompositionさせるかが異なる
中間状態を廃することで高凝集になる #Fullstack_Components
GraphQLでエンドポイント作るの、普通にAPI生やすより考えることが増えるけど本当に生産性に寄与するのかは組織構造に依存する
RSCにデータ構造の知識をもたせすぎると、クラサバが密結合となってしまう
見た目の設計に引きずられてサーバの実装を毎回修正するのも嫌だし、サーバのデータ構造変化にフロントが巻き込まれるのも嫌
2023/05/20
@adwd118: GraphQLの有用性ってNext.js App Routerで結構変わるかも?fetchがdedupやcacheをやるしRSCでバックエンドとの複数の通信がクライアントから見ると1回になるんでそれってGraphQLサーバーのresolverがやってることと大体同じというか
2023/06
Server-Driven UI
React Server Componentsをアーキテクチャとしてどう捉えるか
2023/11/06
https://twitter.com/koichik/status/1720600218910048329
REST, RPC, GraphQLからのApp Routerの流れに対する技術の螺旋の見解がほぼ同じだkoushisa.icon
GraphQL + RelayなプロジェクトでもApp Routerに移行するそう
リソースとユースケースの分離
Resource-based APIとUsecase-based APIの勘所
GraphQL + Relayの精神的後継がReact Server Components
RSCでコンポーネントという概念はクライアントサイドに加えサーバー側処理までカプセル化するに至った
2023/12/25
React Server Components と GraphQL のアナロジー