これは、「どのような技術が利用可能か」という一般的な質問です。
私の会社では、RESTful API を使用した Web アプリケーションを提供しています。ただし、私のニーズには遅すぎます。結果の一部は扱いにくい形式になっています。
Restful サーバーをプロキシ/アダプター サーバーでラップしたいので、プロキシに接続すると RESTful API を取得できます。
したがって、いくつかのことを行う必要があります。
- ほとんどのリクエストをパススルー
- 一部のリクエストをキャッシュする
- 元のサーバーで追加のリクエストを実行して、リクエストがキャッシュ可能かどうかを検出します
たとえば、レコード内のフィールドに対するリクエストがあります: GET /records/id/field は遅いかもしれませんが、指紋リクエスト GET /records/id/fingerprint は常に高速です。フィンガープリントの GET /records/1/field2 のキャッシュが存在する場合、キャッシュされたバージョンを提供する前に feedbeef
、元のサーバーにまだフィンガープリントがあることを確認する必要があります。feed beef
- 一部の応答のヘッダーを修正 - パスに基づいて content-type など
- たとえば、いくつかの大きなコンテンツでストリーム処理を行う
GET /records/id/attachments/1234
100Mb のログ ファイルをテキスト形式で返します
ファイルからヌル文字を削除 オプションでログを再コード化して無関係な行を除外し、クライアント キャッシュの負荷を後のリクエスト用にフィルタリングされたバージョンに軽減します。
クライアントを変更してこの機能を実現することはできますが、そのようなコードは他のクライアント (異なる言語) では再利用できず、クライアント ロジックが複雑になります。
clojure/ring がそれを実行できるかどうか調べてみたところ、小さなプロキシ ミドルウェアがありますが、私が知る限り、それはストリーミング コンテンツを処理しません。100Mb 全体をダウンロードする必要があります。また、キャッシュロジックはまだ含まれていません。
squid でできるかどうか調べてみましたが、私はその技術に詳しくなく、リクエストをその場で変更するのではなく、リクエストを通過させることに主に関心があるようです。
これを実装するための正しいテクノロジを見つけるヒントを探しています。新しい言語を学ぶことで本当に簡単な方法にアクセスできる場合、私はほとんど言語にとらわれません。