2016-07-19 1 views
0

私は(おそらくpeej/Tonicを使用して)PHP RESTful APIによって駆動されるPHPアプリケーションの開発に取り組んでいます(初めて)。ページの読み込み中に20種類のデータベース呼び出しを行う可能性のある直接アクセスのアプリケーションから来て、20回のAPIコール= 20xハンドシェーク(Guzzの永続的な接続で改善することができる)と20倍の接続を調整しようとしていますデータベースに転送します。PHPのRESTful API - 連続したリクエストを最適化しますか?

優れたプログラミングとプランニングでは、必要なAPI呼び出しを1ページあたり4〜5個まで減らすことができます。この時点で:

a)利用可能な他のすべての最適化のために、5xデータベース接続のレイテンシと1ページあたりの5xハンドシェイクを考慮する価値はありませんか?

b)私が今までに見つけられなかったことを緩和できる既存の方法はありますか?

c)RESTfulプログラミングの原則に違反していると思われますが、他のAPIエンドポイントから情報を収集したAPIメソッドが1つあれば(たとえば、GETサプライヤx = y、サプライヤ向けGET製品)内部APIの相互作用(特にpeej/Tonicや他のフレームワーク内)のための文書化されたメソッド

あなたの知恵をお寄せいただきありがとうございます。

+0

Facebookのようにバッチリクエストエンドポイントを実装できます。 https://developers.facebook.com/docs/graph-api/making-multiple-requests、またはFractal does(http://fractal.thephpleague)のような関連データを含めることができます。com/transformers/- 「データを含める」を参照) – ceejayoz

+0

バックエンドのDBMSでサポートされている場合は、クエリキャッシュが有効であることを確認してください。私のスタックでは、Qcacheヒットは、クエリ応答時間を改善するために追加できる他の複雑なコンポーネントより速く戻ります。 – YvesLeBorg

答えて

1

クライアントクライアントは、「その要求を実行する」ことを義務付けられていることを覚えておいてください。サーバは、応答を準備するために「20種類の異なるデータベースクエリを実行する」可能性があり、クライアントは気づくことも気にする必要もありません。

クライアントのポイント・オブ・ビューは、「私はあなたがそれをやったか、私にない教えて何を気に。」となり、

あなたはは、サーバーが多くのをしたように、あなたはまだあなたのサーバ要求を設計することができ、これらのデータを「汚い仕事を行う」ためのクライアントのために、クライアントに直接クエリ応答を送信したいなかった場合クエリーを一度にまとめて返信し、結果セットをすべてに戻しました。

あなたの最優先事項は、発生する交換の数を効果的に最小限に抑えることです。返されるデータの量は(理由の範囲内)です。

また、「サーバを実行すると、作業は自然に同期されているとも考えられます。クライアントが複数の非同期要求を発行すると、これらの要求は "非同期"となります。 デバッグするのが簡単な戦略を検討してください。

サーバーが指定されている場合は、「実行する要求を、」それは(したがって、クライアントのバグをチェックする)要求を検証し、データベース操作の任意の数を実行し、おそらくTRANSACTIONですることができます。サーバーを非常に積極的な役割を果たすこの戦略は、しばしばは、サーバーが受動的な役割を果たすクライアントによって駆動される対話よりも複雑ではありません。

関連する問題