イントロダクション
REST APIとGraphQLそれぞれのメリット・デメリットについて調べてみました。
REST APIとは
昔からあるアーキテクチャです。
HTTPメソッド(GET、POST、PUT、DELETEなど)を使用してAPIがどういう振る舞いをするか定義します。
一つのURLに対してHTTPメソッドを指定することで「GET」なら取得、「POST」なら作成、「PUT」なら更新、「DELETE」なら削除のように処理を定義する考え方です。
GraphQLとは
Facebook社(現在はMeta社)がREST APIが抱える問題を解決するために、開発したクエリ言語です。
APIのためのクエリ言語であり、必要なデータの構造を定義することで、必要なデータのみが返されます。
したがって、必要以上に大きなデータが返されるのを防ぐことができるのが特徴です。
GraphQL 公式サンプル
https://graphql.org/learn/queries/
メリット
REST API
- HTTPメソッドにGET、POST、PUT、DELETEなどを指定し、振る舞いを定義するので、理解しやすく、開発しやすい。
- HTTPのキャッシング使える。これにより、クライアントは同じリソースに対してキャッシュを使用することで、ネットワークトラフィックを削減することができる。
- リクエストに対してエンドポイントが分かれているので、複雑なリクエストも管理しやすい。
GraphQL
- クライアントが必要なデータのみを取得できる。
例えば、クエリによってデータのフィールドやリレーションシップを指定することができるため、余計なデータを取得することを回避できる。 - 1つのエンドポイントを通じてデータにアクセスするので、複数のリクエストを送る必要がない。
デメリット
REST API
- エンドポイントで定義してるレスポンスは全て取得する。
それによってオーバーフェッチ(過剰取得)が発生したり、逆にレスポンスに定義の少なすぎてアンダーフェッチ(過小取得)が発生する。 - REST APIは思想なのでGETなのに実はinsertしてたり、POSTなのに取得していたり、実装者によってばらつきが生まれやすい。
GraphQL
- 比較的新しい技術なので学習コストが生まれる。
- クエリ言語なのでクエリが複雑になる可能性がある。
- そのため、小規模なシステムには向かない。
- REST APIのようなWEBのキャッシングが効かないので、その辺を考慮する必要がある。