質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

1537閲覧

GraphQLでエンドポイントを集約する利点とは?

takubdm

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1グッド

4クリップ

投稿2019/07/17 22:11

GraphQLの利点として挙げられる「エンドポイントを集約できる」という点について質問です。これはRESTfulのAPIでは扱うデータの構造ごとにエンドポイントが必要だったが、GraphQLでは1つのエンドポイントで全てのデータを返せるようにしておき、実際に必要なデータ構造はクエリで指定するものと理解しています。

それでも、ユーザーからのリクエストに応じて構造の異なるデータを取得しようとする場合、サーバーサイドで分岐処理が必要になるはずです。そうなると、分岐がクライアント側にあるか、サーバー側にあるかの違いに思えます。

javascript

1// データ構造ごとにエンドポイントが異なるRESTful APIの実装 2// クライアント側のコード 3function getData() { 4 switch(ユーザー指定のデータ) { 5 case "name": 6 get("http://hoge/get_name"); // { name: "Fuga" } 7 break; 8 case "age": 9 get("http://hoge/get_age"); // { age: 40 } 10 break; 11 case "name_and_age": 12 get("http://hoge/get_name_and_age"); // { name: "Fuga", age: 40 } 13 break; 14 } 15 return 16}

node

1// データ構造に関わらずエンドポイントが単一のGraphQLの実装 2// サーバー側のコード 3var { graphql, buildSchema } = require('graphql'); 4var schema = buildSchema(` 5 type Query { 6 name: String 7 age: Number 8 } 9`); 10var root = { 11 name: () => { 12 return 'Fuga'; 13 }, 14 age: () => { 15 return 40; 16 }, 17}; 18 19var query; 20switch (ユーザー指定のデータ) { 21 case "name": 22 query = '{ name }' 23 break; 24 case "age": 25 query = '{ age }' 26 break; 27 case "name_and_age": 28 query = '{ name, age }' 29 break; 30} 31 32graphql(schema, query, root).then((response) => { 33 console.log(response); 34});

エンドポイントを集約できると、具体的にどのようなメリットがあるのでしょうか?
クエリの直感的な分かりやすさからGraphQLに興味を持っているのですが、エンドポイントの件がどうしても分からず、教えて頂きたいです。

euledge👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

勉強し始めたばかりの人間の回答で恐縮ですが・・・笑

一度のクエリーで、必要なデータを、必要なもののみ全て取得できる、というのが大きなメリットだと思います。

RESTの場合、一度のリクエストで足りないデータは再度問い合わせする必要があります。
また、レスポンスの中には、実際に利用しないデータが含まれるという事もありえます。

GraphQLは、RESTに比べて、ネットワークの負担を軽減することができそうです。

具体的な実装として、フロントエンドにReactを利用しているのであれば、Relayというライブラリを利用することで、レスポンスのデータをコンポーネントのPropsに結びつけることができるようです。非同期でデータを取得する部分も<QueryRenderer>というコンポーネント定義に押し込めるので、ロジックもすっきりするようです。
(すいません・・・勉強中なので、詳細解説はできないですが・・・)

これも、1クエリーで必要データを全て取得できるという仕掛けならではのメリットだと思います。

投稿2020/01/16 00:29

Meganezaru

総合スコア715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問