GraphQLに関するすべての記事で、それがどれほど素晴らしいかがわかりますが、それに不利な点や欠点はありますか?ありがとうございました。
短所:
しかし、それらはこれらによって対抗される以上のものです。
私はいくつかの重要なものを見つけました GraphQLの使用を検討している人にとっての懸念 、そしてこれまでの主なポイントは次のとおりです。
不定の深さでクエリ:GraphQLは不定の深さでクエリを実行できないため、ツリーがあり、深さを知らずにブランチを返す場合は、改ページを行う必要があります。
特定の応答構造:GraphQLでは、応答はクエリの形状と一致するため、非常に特定の構造で応答する必要がある場合は、変換レイヤーを追加して、応答の形状を変更します。
ネットワークレベルでのキャッシュ:GraphQLがHTTPで使用される一般的な方法(単一エンドポイントのPOST)のため、ネットワークレベルが難しくなります。これを解決する方法は、永続クエリを使用することです。
ファイルアップロードの処理:GraphQL仕様にはファイルのアップロードに関するものは何もありません。また、ミューテーションは引数にファイルを受け入れません。それを解決するには、他の種類のAPI(RESTなど)を使用してファイルをアップロードし、アップロードされたファイルのURLをGraphQLミューテーションに渡すか、実行コンテキストにファイルを挿入して、リゾルバー関数内にファイルを配置します。
予測不可能な実行:GraphQLの性質は、必要なフィールドを組み合わせてクエリを実行できることですが、この柔軟性は無料ではありません。パフォーマンスやN + 1クエリなど、知っておくと便利な懸念事項がいくつかあります。
超シンプルなAPI:本当にシンプルなAPIを公開するサービスがある場合、GraphQLは余分な複雑さを追加するだけなので、シンプルなREST APIは改善される可能性があります。
GraphQLで見られるこの最大の問題、つまり、リレーショナルデータベースで使用している場合、joinsを使用しています。
いくつかのフィールドを許可/禁止できるという事実により、結合は簡単ではありません(単純ではありません)。これは余分なクエリにつながります。
また、graphqlのネストされたクエリは循環クエリにつながり、サーバーをクラッシュさせるになります。特別な注意が必要です。
レート制限の呼び出しは困難になりました。ユーザーは1回の呼び出しで複数のクエリを実行できるようになりました。
TIP:facebookのデータローダーを使用して、javascript/nodeの場合にクエリの数を減らします
毎年改善されており、現在のところ、GraphQLの community は成長しています。その結果、以前の他の回答で強調された多くの問題に対する多くの解決策があります。しかし、企業がすべてのリソースをGraphQLに投入するのを未だに妨げていることを認めるために、いくつかの問題と解決策を示し、その後に未解決の問題を列挙したいと思います。
ただし、デメリットとしてカウントできるケースがさらに2つあります。
要約すると、GraphQLは特定の目標のための単なるツールであり、すべての問題に対する特効薬ではなく、もちろんRESTの代替品でもないことは確かです。
単一のエンドポイントを持ち、すべてのデータを公開することは本当に素晴らしいことです。 GraphQLで考慮すべき点は以下のとおりです。
また、実装後に長所を検討する必要があります。
実装された引数とカスタム順序を使用して条件を簡単に追加できます
多くのカスタムフィルターを使用し、作成する必要があるすべてのアクションを取り除きます。ユーザーは引数としてid、nameなどを持ち、フィルター処理を実行できます。さらに、ユーザー内のグループにもフィルターを適用できます。
現時点ではgraphqlはバックエンドアーキテクチャの一部である必要があると思います。ファイルのアップロードには通常のAPIを使用します