Closed2
[flutter][ferry]OptimisticResponse のメモ
Optimistic Responseとは
mutation(書き込み)処理をした時に、サーバーからレスポンスを受け取る前にクライアント側で成功したレスポンスを作成しUIに反映させること。
cf. https://kaminashi-developer.hatenablog.jp/entry/optimistic-update-in-spa
ferry
https://ferrygraphql.com/docs/mutations#optimistic-updates にドキュメントあり
実装する上で気になった点を調査、考察した
OptimisticResponseのIDをどうするか
例えば「Book」というデータを作成した場合、OptimisticResponseのBookに含まれるはずのIDをどうするかという問題。解決策として以下を考えた。
- a. BookのIDをnullableにする
- 型安全性が壊れる、変な分岐処理が入りそうなのでやりたくない
- b. Bookのidをクライアント側で生成する
- 一番良い方法だと思う。
- データベースのIDがauto incrementだと対応できない。
- UUIDのようなクライアント側からIDが生成できるフォーマットにする必要がある。
- c Bookのidをサーバー側では生成できないような値を定数で持っておく
- auto incrementなDBならクライアント側は -1 を持つとか
- UUIDなら、何か一つ定数にしておくとか
- その定数の場合は更新処理をストップするとかは書きやすいかもしれない
- Bookを作成 → Optimisitc Response → 正規のResponseが来る前にBookを更新 → サーバー側が持ってないIDなのでエラー みたいな事故を防げる
個人的にはbの方法が良い。bを実現するためにもDBのIDはクライアント側で指定できる形式が望ましい。
このスクラップは2022/01/30にクローズされました