たとえば article の公開という操作があるとき、rest であれば `publish` という意味付けられた操作を定義して、 /article/{id}/publish みたいなエンポイントに引数なしで put するけど(非公開の場合は close とか unpublish とか)、GraphQLでは article の mutation に published フラグを true で渡すとか、そういうのをよくみる気がする(いやこれはrest でもやる人はいるけど)。ただ、`articlePublish` という mutation をつくって article の id を渡す、とすれば上記と似ているけど、GraphQL ではほぼ article id をURLに埋めこむことができなくて、それは決定的に REST とは違う。
mutation が結局「データを操作する」になりがちで、それに直接対応したUIを想定すると、脳内でデータの意味を構築して操作の手順を組み合わせる必要があるようなUIになる。それで、では mutation の基本的な構造とUIは別だということになるのであれば、プログラマの立場からはUIとデータモデルを別な仕様として定義する必要があることになり、不当に仕事量が多く見える。
自分の感じていることとしては、GraphQLは操作の単位で切りだすことが困難だということ(できないわけではない)。
自分の感じていることとしては、GraphQLは操作の単位で切りだすことが困難だということ(できないわけではない)。
UIを作るのって結果的にはつねに操作を定義することになるけど、GraphQLがもたらしたのって操作とデータの分離で、このギャップをどこかで埋める必要がでてくるわけだが、そのギャップをユーザーにおしつけるか、プログラマーが頑張ってデータと意味の変換層をつくるか
やっぱりフロントからみるとGraphQLってどうしてもデータベースになってしまうわけで、操作の体系的な意味もフロント側にあることになるけど、そうするとバリデーションとかみんなどうしてんの?サーバーサイドでコントロールしないと厳しくない?
デザインにせよプログラムにせよ、課題はつねに秩序が形成できるかどうかであって、RESTはこの秩序を形成するための規約だけど、GraphQLにはそういうものがない。RESTを前提にした場合にはいくつか有益なパターンが明確にあり、Rails などはあきらかにそれを取り入れている。
- replies
- 1
- announces
- 0
- likes
- 0