web-dev-qa-db-ja.com

REST APIの設計:APIへの複数の呼び出しと1つの呼び出し

モバイルアプリで使用されるeコマースウェブサイトのRest APIを開発しています。

アプリのホームページで、スライダー、トップブランド、ベストセラー商品、トレンド商品などの複数のリソースを呼び出す必要があります。

API呼び出しを行う2つのオプション:

シングルコール:

www.example.com/api/GetAllInHome

複数の呼び出し:

www.example.com/api/GetSliders

www.example.com/api/GetTopBrands

www.example.com/api/GetBestSellingProducts

www.example.com/api/GetTrendingProducts

レストAPIの設計に最適なアプローチはどれですか-単一または複数の呼び出し、長所と短所を説明しますか?

リクエストへの対応に時間がかかるのはどれですか。

20
shaijut

理論では、複数の同時呼び出しはより柔軟で高速です。

ただし、実際には、ページを読み込んでから、そのページの各部分を読み込んだ場合、結果が返されるまで読み込みスピナーをページ全体に表示すると、結果が遅く、ばらばらになります。

このため、AJAX=データのリクエストは控えめに使用し、ページのセクションの読み込みが遅いか、ページの残りの部分とは異なるサイクルで更新する必要がある場合にのみ使用してください。マスターから詳細を表示し、マスターを再ロードせずに対応する詳細を表示するマスター/詳細表示を言います。

一般的な設計は、コーディングの柔軟性とマイクロサービスの懸念のために個別のAPIを維持することですが、データサーバー側をWebサイトに結合します。そのため、クライアントは自分のWebサイトに1回だけ呼び出す必要があります。適切なキャッシュを使用したAPI呼び出しは、データセンター内で高速である必要があります。

また、クライアントAPI呼び出しがないことを検討してください。 HTMLサーバー側を生成するだけです。 JavaScriptの単一ページアプリフレームワークがAPIルートを押し下げますがこれは通常、大量の電子商取引サイトには最適なアプローチではありません。

enter image description here

16
Ewan

TL; DR:アプリケーションに関するその他すべての考慮事項は別として、単一の呼び出しを実行する方が、複数の呼び出しを実行するよりも高速です。呼び出しを非同期で実行すると、ユーザーの観点から、特定の操作を完了するために必要な全体の時間を短縮できる場合があります(これで十分な場合もあります)が、複数の呼び出しの場合でも、全体でかかる時間は長くなります。

しかし、あなたのケースでは、それがすべての話であるかどうかはわかりません。

REST APIは、アイデアを普及させた論文のさまざまな解釈のため、少しあいまいな用語です。 REST APIを構成するものの最も寛大な解釈でさえ、あなたが持っているものは実際には適合しません。

核となる原則は、アクションを実行したいリソースがあるということです。 URIは、関心のあるリソースを識別します。通常、HTTP動詞を使用して、そのリソースに対して何をしたいかを示します。

特定のケースでは、すべてのメソッドの名前に「get」という単語があります。 HTTPリクエストで使用される動詞を変更して、その場所で利用可能なリソースを「取得」することを示す必要があります。

URIスキームは、APIのユーザーが利用できるようにするリソースの論理階層を表す必要があるため、/api/products?category=slidersのようなものを使用して、製品のコレクションをフィルタリングすることを検討します。これは、クライアントがすべての製品を取得したい場合、クエリ文字列を省略できることを意味します。

5
richzilla