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

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

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

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

2065閲覧

WebAPIの設計について。APIは1つの画面内で複数リクエストするのは普通ですか?

退会済みユーザー

退会済みユーザー

総合スコア0

GraphQL

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1グッド

2クリップ

投稿2022/07/03 11:10

リレーション関係にある複数のテーブルの情報をバックエンドから取得したいとき、
さらには複数ネストしたリレーション関係の情報を取得したい時、考えられる設計は、

①取得したい全てのテーブル情報を返すエンドポイントを1つ作る

②それぞれのリソースを取得する複数のエンドポイントにリクエスト送って欲しい情報を全て取得する。

RESTだと②のような設計になると思うのですが
フロントの非同期処理が複雑になるのと、そもそもHTTPリクエストが複数回送られるのは
サーバ側の負荷が増え、かつ速度が落ちるはずなのでユーザビリティ的にも良くないと考えます。

かといって①の方法だと仕様変更がおきたとき、複数のエンドポイントのソースの修正が必要になりうると思います。

自分はRESTを使わないWebAPIの開発しかしたことがないのでよくわからないのですが
RESTの思想で設計してる案件では、フロント側はPromisやasync/awaitを駆使して複数のAPIエンドポイントにfetchするような設計なのでしょうか?
やはりHTTPリクエストは1度で済ませるのが望ましいように思うのですが
このような設計は普通なのでしょうか?

なお、GrahpQL使えばこれらは解決するものでしょうか?

hoshi-takanori👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/07/03 12:18 編集

> APIは1つの画面内で複数リクエストするのは普通ですか? 質問の意味が分からないのですが・・・ 自分が Web API から想像することですが、まず「画面」というのはありません。複数のリクエストというのもありません。 ブラウザなりデスクトップアプリなりから、API の仕様に従って要求を送れば、仕様通りに応答が返ってくるということで、「複数リクエスト」という話が分かりません。 Web API の仕様を満たすために、Web API の中で(あくまで中で)複数のテーブルに複数の SQL 文を投げるなど複雑な操作をしているかもしれませんが、クライアント側からは単純に一回の要求一回の応答ということになると思ってますけど?
退会済みユーザー

退会済みユーザー

2022/07/03 13:10

あるページを開いた時 表示する情報の取得のためフロント側でAPIフェッチを行い、その時 複数のエンドポイントへのリクエストを送るのはどうなのかという問いです >Web API の仕様を満たすために バック、フロント両方の設計に関する質問なので仕様というは開発側の自由ですが・・・
退会済みユーザー

退会済みユーザー

2022/07/03 13:22

依然として意味不明です。Web API 側の話ではなくてフロントエンドの話ですか? だとすると表題にあった「WebAPIの設計について」というのはどういうこと? ゴッチャになってませんか?
guest

回答1

0

RESTの思想で設計してる案件では、フロント側はPromisやasync/awaitを駆使して複数のAPIエンドポイントにfetchするような設計なのでしょうか?

1つの画面で複数のAPIエンドポイントにリクエストを投げることはよくあることだと思いますよ。

サーバ側の負荷が増え、かつ速度が落ちるはずなのでユーザビリティ的にも良くないと考えます。

一概にそうとは言えないのではないでしょうか。リクエストが分散されていることで、リクエストが複数のサーバーに分散されますし、逆に1つのリクエストで画面に必要なデータを取得するような場合、ペイロードが大きい時でも1つのサーバーでリクエストとレスポンスを処理する必要が生じます。

ユーザービリティーに関しても、リクエストがリソースごとに分散されてることで、例えば、ユーザー一覧のUI部分はレスポンスが先に返ってきたから先に表示し、そのほかのレスポンスがまだ返ってきていないUI部分ではローディングのUI表示をして、ユーザーの画面表示への体感速度をあげることができると思います。

GrahpQL使えばこれらは解決するものでしょうか?

複数のAPIサーバーをマイクロサービス化してGraphQLだったり、BFFという設計パターンを導入すれば、解決出来るのだと思います。

投稿2022/07/03 13:23

編集2022/07/03 13:37
murabito

総合スコア108

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問