Restful APIとGraphQLの違いは何ですか?!

2694 ワード

Restful APIとGraphQLの違い

  • まずはRESTを知りましょうか?REST(REST)は、Web上に存在するすべてのリソース(間欠性、ex.画像、ビデオ、データ)に一意のURIを付与することによってリソースをアドレスする方法またはルールである.現在最も広く使われている.
  • 1.GraphQL APIでは必要な情報のみ選択できます。

  • 使用するQuery文によって応答の仕組みが異なる
  • トラブルシューティング
  • データ転送量を減らす
  • 2.複数階層の情報を一度に受信することができる。

  • UnderFetchingトラブルシューティング
  • 請求回数を減らす
  • 3.GraphQLは主に1つのendpointですべての要求を処理する。

  • 1つのURLからPOSTまでの全てのリクエスト
  • GraphQLには欠点がありますか?

  • N+1問題はorm使用時によくある問題です.N+1とは何か、ORMごとにどのように解決するか
  • graphsqlを使用しているユーザーとして、graphsqlの特徴がN+1の問題を引き起こしているのか、どのように解決しているのかを調べてみましょう
  • n+1問題は?

  • N+1 문제性能に関する問題の一つであり、主にリレーショナル・データベースにおける一対のマルチリレーショナル・テーブルによる問題である
  • query {
    	posts {
    		id
    		title
        contents
        author {...}
    	}
    }
  • postsデータをクエリーするクエリーがある場合は、postsデータを取得するクエリーが1つ、postsごとに「作成者」データを取得するクエリーがnつ必要です.N + 1 문제
  • つまり、内部オブジェクトを得るために外部オブジェクトにN個のクエリを作成する場合.
  • 従って、N+1問題を解決するには、通常、3つのコンポーネントが必要である。


  • データソース:一括導入対応
  • データLoader:一括要求
  • データFetcher:コンテキスト転送
  • DataLoaderとは?

  • DataLoaderはFacebook上で開発されており、バッチ処理やキャッシュによりデータベースやWebサービスなどの各種リモートデータソース要求のコストを削減できる.これがパフォーマンスを最適化するツールです.
  • DataLoaderには2つの特徴があります。


    1. batch


    解決
  • n+1の問題がbatchです.
    DataLoaderは、特定のデータを取得した各リクエストをbatchに送信します.すなわち、1回のリクエストを収集し、1回のリクエスト(クエリー)を手配し、リクエストの結果値を各リクエストに送信します.
  • const postsLoader = new DataLoader((author_ids) => getPostsByAuthorIds(author_ids));
    postsLoader(1).then((posts) => console.log(posts);) // authorId 1에 해당하는 post들
    postsLoader(2).then((posts) => console.log(posts);) // authorId 2에 해당하는 post들
    postsLoader(3).then((posts) => console.log(posts);) // authorId 3에 해당하는 post들
    // 위 작업이 한 번의 쿼리로 이루어진다.
  • 以上利用可能getPostsByAuthorIdsでは、where~inやjoinなどのクエリーでデータベースにリクエストすることで、N+1の問題を解決できます.authorをインポートするクエリーでは、authorをインポートするpostのクエリーごとにdataloaderでマージされ、1つのクエリーでauthor idのpostをインポートできます.
  • 2. cache

  • すべての要求をキャッシュするのではなく、ユーザの個々の要求に基づいて生成される.
  • cacheの内容は設定に変更可能であり、DataLoaderのinstance自体にcacheMapがあり、同一キーに対して要求を出すとcache値が使用される.
  • ただし、Webアプリケーションではメモリが増加し続ける可能性があるので、要求ごとに新しいDataLoaderオブジェクトを作成して使用することを推奨します.
  • キャッシュ?

  • キャッシュとは、より高速なメモリ領域にデータをインポートしてアクセスする方法です.