ホームページ > バックエンド開発 > PHPチュートリアル > アプリのAPI消費をスピードアップする方法

アプリのAPI消費をスピードアップする方法

尊渡假赌尊渡假赌尊渡假赌
リリース: 2025-02-21 10:47:13
オリジナル
138 人が閲覧しました

PHPアプリケーションAPI呼び出しの効率を改善するための

戦略

PHPアプリケーションを開発する場合、リモートリソースやサービスと対話する必要がある状況に遭遇する可能性があります。アプリケーションの機能を拡張するには、さまざまなAPIサービスを使用してリモートデータを取得したり、他のWebサイトのユーザーアカウントに接続したり、アプリケーションで共有しているリソースを変換したりできます。 ProgrambableWebのWebサイトは、現在10,000を超えるAPIがWebで利用可能であるため、PHPアプリケーションの機能を拡張するために多くのサービスを見つけることができることを指摘しています。ただし、APIを誤って使用すると、パフォーマンスの問題を迅速に引き起こし、スクリプトの実行時間を延長する可能性があります。これを避けたい場合は、この記事で説明したソリューションのいくつかを実装することを検討してください。

並列で複数のリクエストを処理します

How to Speed Up Your App's API Consumption

典型的なPHPスクリプトは、コードのコマンドを順番に実行します。これは論理的に思えます。なぜなら、スクリプトの次のステップに進むために、以前の操作の結果(データベースクエリや変数操作など)を取得することができるからです。 API呼び出しを行うと同じルールが適用されます。受信したデータでアクションを実行する前に、リモートホストからの応答を待って、リクエストを送信する必要があります。ただし、アプリケーションが複数のAPI呼び出しを行い、実行を継続するために各ソースのデータが必要な場合は、各リクエストを個別に実行する必要はありません。 API呼び出しの処理を担当するサーバーは、一度に複数のクエリを処理する準備ができていることに注意してください。必要なのは、次々と並行してAPI呼び出しを実行するスクリプトを作成することだけです。幸いなことに、PHPはこれを行うように設計された一連の

関数を提供します。 curl_multi

関数を使用すると、Curlライブラリを使用してPHPで典型的なリクエストを行うことに似ています。唯一の違いは、実行するリクエストのセットを準備する必要があること(1つだけでなく)、curl_multi関数を使用してcurl_init関数に渡す必要があることです。次に、呼び出しcurl_multi_add_handle関数はリクエストを同時に実行し、curl_multi_execは各API呼び出しの結果を取得できるようにします。ロジックを実装するコード例を表示するには、こちらをご覧ください。 curl_multi_getcontent

PHPアプリケーションで

関数を使用する場合、注意すべき重要なことがいくつかあります。まず、curl_multi関数の実行時間は、curl_multi_exec関数に渡されたリクエストセットで最も遅いAPI呼び出しが限られている限りです。したがって、各API呼び出しにかかった時間がほぼ同じである場合にのみcurl_multi_add_handleを使用することは理にかなっています。 curl_multiセットに他のセットよりも大幅に遅いリクエストがある場合、スクリプトは、最も遅いリクエストが完了するまで実行を継続できません。 curl_multiまた、一度に実行できる並列リクエストの数を決定する必要があることも重要です。あなたのウェブサイトが多くのトラフィックを処理し、各ユーザーがリモートサーバーへの同時API呼び出しをトリガーすると、一度に実行されたリクエストの総数がすぐに高くなる可能性があることを忘れないでください。 APIドキュメントに記載されている制限を確認し、これらの制限に到達したときにサービスがどのように応答するかを確認してください。制限に達すると、リモートサーバーは特定のHTTP応答コードまたはエラーメッセージを送信する場合があります。アプリケーションは、そのような状況を正しく処理するか、ログに入れて、問題を診断してリクエストの数を減らすことができるようにする必要があります。

メインアプリケーションプロセスから個別のAPI呼び出し

Webアプリケーションを応答し、ゆっくりとロードページの提供を避けたい場合は、リモートサーバーへの多数のAPI呼び出しがこのタスクをより困難にする可能性があります。すべての要求がメインアプリケーションフローで行われた場合、エンドユーザーはPHPスクリプトがAPI応答を受信して​​データを処理するまでレンダリングされたページを表示しません。もちろん、高速サーバーでホストされている多くのAPIサービスがあり、リクエストをすばやく処理できます。ただし、接続の遅延または接続プロセスまたはリモートサーバー自体に影響を与えるランダムファクターによって、アプリケーションが時々減速する場合があります。

そのような問題からエンドユーザーを保護する場合は、要求をメインプロセスから別のスクリプトに処理する責任を負うアプリケーションの部分を分離する必要があります。つまり、API呼び出しは、サイトの表示を担当するコードの部分に干渉しない別のスレッドで実行されることを意味します。

このようなソリューションを実装するには、別のPHPスクリプトを書き込み、コマンドラインアプリケーションと同様に

関数を使用して実行できます。さまざまなPHPフレームワークは、多くの場合、書き込みコマンドラインスクリプトを簡素化し、既存のアプリケーションモデルまたはコンポーネントに簡単に統合できるモジュールを提供します。 Symfony2またはCakePhpコンソールコンポーネントを確認して、いくつかの例を確認してください。さまざまなPHPプラットフォーム(フレームワークだけでなく)は、WP CLI(WordPressのコマンドラインインターフェイス)など、ライティングコマンドラインスクリプトを簡単にするツールを提供する場合があります。

exec()別のプロセスでAPI呼び出しを処理するためのより強力な方法を探している場合は、Gearmanなどのジョブサーバーのセットアップを検討してください。ジョブサーバーは、特定のタスク(ジョブ)を別のプロセスに分離するために必要なすべての操作を実行する完全なソリューションです。 Alireza Rahmani KhaliliがGearmanの記事を始めて、それがどのように機能し、PHPでどのように実装するかを学びましょう。 Zend Serverプラットフォームで作業する場合は、同様の機能を提供するZend Jobキューコンポーネントを使用できます。その機能と使用法の例は、Alex Stetsenkoによって書かれた記事「Zend Job Queueとのスケジューリング」で説明されています。

API呼び出しを分離するために選択したソリューションに関係なく、アプリケーションのさまざまな部分が互いにどのように通信するかを考慮する必要があります。まず、アプリケーションの部分全体(データベーステーブルやファイルなど)にアクセスできるAPI呼び出しから受信したデータを配置する必要があります。また、個々のスクリプト実行のステータスを共有する必要があります。メインアプリケーションは、外部で実行されたAPI呼び出しがずっと前に完了したかどうか、または失敗したかどうかを知る必要があります。ジョブサーバーソリューションの使用を検討している場合、ジョブステータスを監視する機能が提供される場合があります。ただし、単純なPHPコマンドラインスクリプトの作成に固執したい場合は、この種のロジックを自分で実装する必要があります。

複数のHTTP要求または複数のスレッド? したがって、どのソリューションが優れていますか?curl_multi関数を使用して複数のHTTP要求を一度に実行するか、API呼び出しをメインアプリケーションプロセスから分離しますか?リモートサーバーのクエリのコンテキストに依存します。リクエストのためだけでなく、API呼び出し全体がスクリプトを処理するのに長い時間がかかることがあります。また、特に変換されたファイルを処理したり、大量のデータベースを書き込んだりする場合、受信したデータの処理に責任がある大量のコードもあります。この場合、curl_multi関数を使用するだけではアプリケーションをスピードアップするのに十分ではない場合があります。リモートホストから受信した操作と処理データ全体に責任のある個別のスレッドを実行すると、アプリケーションのパフォーマンスが向上する可能性があります。一方、あなたの側で重いデータ処理を伴わない多くの簡単なAPI呼び出しを実行する必要がある場合、curl_multi関数に固執するだけでアプリケーションをより速くするのに十分かもしれません。

もちろん、3番目のソリューションがあります - 上記の2つの方法を混合します。したがって、API呼び出しの処理を担当する個別のスレッドを実行してから、複数のリクエストを一度に実行することで、より速く実行するようにしてください。これは、リクエストごとに個別のスクリプトを実行するよりも効率的かもしれません。ただし、さまざまなスクリプトの実行と実行された異なるAPIコールが互いに干渉せず、互いの作業を繰り返さないように、スクリプトのフローがどのように設計されているかについてのより深い分析が必要になる場合があります。

インテリジェントキャッシュエンジンを構築します

API使用量に大きく依存するアプリケーションをスピードアップする別のソリューションは、スマートキャッシュエンジンを構築することです。さまざまなサーバーにあるコンテンツが変更されていないため、スクリプトが不要な呼び出しを行うことを防ぎます。正しいキャッシュは、単一のAPI呼び出しでサーバー間で転送されるデータの量を減らすこともできます。

ワーキングキャッシュエンジンを作成して有効なデータを返すには、リモートサーバーの応答が変更されていないことを確認する必要があるため、毎回入手する必要はありません。これは特定のAPIサービスによって異なる場合がありますが、全体的なアイデアは、特定の期間に同じ応答を与える一連のパラメーター(リクエストで渡されている)を見つけることです。たとえば、リモートサービスから毎日の通貨為替レートを取得した場合、特定の通貨(これはパラメーター)の為替レートが1日変わらないままであることを判断できます。したがって、この特定のAPIから受信したデータを保存するために使用されるキャッシュキーには、通貨と日付の両方が含まれている必要があります。アプリケーションが次回この特定の為替レートを取得する必要がある場合は、キャッシュ(データベースやファイルなど)に保存されたデータを参照し、HTTPリクエストを避けることができます。

上記のシナリオでは、アプリケーションがリモートサービスで受け取ったデータをキャッシュできる状況をチェックするすべての責任を想定しているため、正しいキャッシュロジックを自分で実装する必要があります。ただし、APIサービスが共有データに変更され、特定のリソースにリンクされたメタデータを含む追加のフィールドを返す場合もあります。メタデータは、最後の変更された日付、改訂番号、またはリソースコンテンツに基づいて計算されたハッシュ値などの値で構成されている場合があります。この種のデータを使用することは、特に大量のデータを扱う場合、PHPアプリケーションのパフォーマンスを改善するための優れた方法です。 APIに接続するたびにリソース全体を取得する代わりに、タイムスタンプまたはハッシュ値を最後の受信値と比較するだけです。それらが等しい場合、リモートコンテンツが変更されていないため、以前に取得したデータを使用できることを意味します。このようなソリューションは、アプリケーションでキャッシュエンジンを使用していると仮定しますが、キャッシュに保存されているデータが有効かどうかを心配する必要はありません。 APIサービスによって返されるメタデータに依存しているため、リモートサーバーが提供するメタデータ値を比較するだけです。

リモートリソースメタデータを使用することは、ファイルホスティングサービスAPIを使用する場合に特に有益です。多くの場合、リモートフォルダーとファイルを処理することは、大量のデータを転送することを意味し、パフォーマンスの問題を引き起こす可能性があります。これを回避する方法の例を示すために、Dropbox APIで使用されているソリューションを説明しましょう。 Dropbox APIサービスは、リモートファイルが変更されたかどうかを確認するために適用される特定のデータを返します。まず、メタデータメソッド(名前、サイズ、またはパスなどのフォルダーとファイル情報を返す)には、返されたリソースのハッシュ値を表すハッシュフィールドが含まれています。新しい要求のパラメーターとして以前の要求からハッシュ値を提供し、リモートデータがリクエスト間で変更されていない場合、APIはHTTP 304(変更されていない)応答のみを返します。 Drobox APIは、特定のフォルダーまたはファイルの変更を通知するために特別に使用されるDeltaメソッドも提供します。 Hash値とDeltaメソッドは、アプリケーションのパフォーマンスを大幅に改善できるため、APIドキュメントで推奨されます。

最後になりましたが、APIドキュメントのマスタリング

これは明らかなように聞こえるかもしれませんが、場合によっては、APIドキュメントを注意深く読むと、API呼び出しをより効率的にする方法に関する具体的なソリューションが得られる場合があります。上記のDropbox APIの使用は、非常に明確な例です。ただし、応答で送信されたデータの量を減らす他の方法がある場合があります(たとえば、データセット全体を受信するのではなく、APIによって返されるいくつかの特定のフィールドを選択します)。別のリクエストで実行したアクションを一度に実行できるかどうかを確認することもできます。たとえば、Google Translate APIの翻訳方法(異なる言語でテキスト翻訳を取得するために使用)は、1つのリクエストで複数の翻訳を返すことができます。 1つのAPI呼び出しで処理するためにテキスト文字列を渡すことにより、複数のリクエストを行うことを避けることができます。これにより、アプリケーションの実行時間を節約できます。

要約

ご覧のとおり、リモートAPIの使用に大きく依存するPHPアプリケーションのパフォーマンスを改善する方法はたくさんあります。一度に複数のリクエストを実行することができます。curl_multi関数を使用するか、別のアプリケーションスレッドを実行します。別のソリューションは、不必要なAPI呼び出しを行うことを妨げるキャッシュエンジンを実装したり、サーバー間で転送されるデータの量を減らすことです。最後に、APIサービスが提供するアプローチは、1つのリクエストで複数の操作を実行するなど、パフォーマンスを改善するためのいくつかのすぐに使用できるソリューションを提供できます。

この投稿が、APIリクエストを効果的に処理する方法についての洞察を提供することを願っています。記事で提起されたキーポイントや、APIの使用をスピードアップする方法に関する他のヒントについてコメントがある場合は、以下に投稿してください。 Google Plusを介して直接私に連絡することもできます。

加速アプリケーションおよびAPI使用に関するFAQ

APIパフォーマンスに影響を与える重要な要因は何ですか?

APIパフォーマンスは、さまざまな要因の影響を受けます。まず、サーバーの処理速度は、サーバーがリクエストを処理して応答を返す速度を決定します。ネットワークレイテンシ(つまり、データがクライアントからサーバーに戻るのに時間がかかる時間)も重要な役割を果たします。その他の要因には、APIコードの効率、サーバーの負荷、API使用量の数が含まれます 形式に応じて。これらの要因を最適化すると、APIパフォーマンスが大幅に向上する可能性があります。

パフォーマンスを向上させるためにAPIを最適化するにはどうすればよいですか?

パフォーマンスを向上させるためにAPIを最適化するためのいくつかの戦略があります。まず、効率的なコーディングプラクティスを使用して、サーバーの処理時間を短縮できます。次に、コンテンツ配信ネットワーク(CDN)を使用して、ネットワークの遅延を減らすことができます。第三に、キャッシュを使用して頻繁にアクセスしたデータを保存し、サーバーの負荷を減らすことができます。最後に、データ圧縮を使用して送信されたデータのサイズを縮小して、データの送信と受信にかかる時間を短縮できます。

APIを使用するとはどういう意味ですか?

APIを使用すると、アプリケーションでサードパーティが提供するAPIを使用することが意味されます。これには、APIへのリクエストの送信と処理応答が含まれます。 APIは、アプリケーションがAPIで表されるシステムまたはサービスと対話するために使用できる一連の関数を提供します。

アプリケーションのAPI使用量をスピードアップする方法は?

アプリケーションのAPI使用量をスピードアップする方法はいくつかあります。まず、非同期コールを使用して、メインスレッドのブロックを防ぐことができます。次に、ページングを使用して、APIによって返されるデータの量を制限できます。第三に、キャッシュを使用して頻繁にアクセスされるデータを保存し、APIへのリクエストの数を減らすことができます。最後に、データ圧縮を使用して送信されたデータのサイズを縮小して、データの送信と受信にかかる時間を短縮できます。

APIパフォーマンスにおけるコンテンツ配信ネットワーク(CDN)の役割は何ですか?

コンテンツ配信ネットワーク(CDN)は、APIパフォーマンスの向上に重要な役割を果たします。さまざまな地理的位置にある複数のサーバーにコンテンツを配布することにより、ネットワークの遅延を削減します。クライアントがリクエストを送信すると、CDNはそれを最寄りのサーバーに向け、クライアントからサーバーにデータを返すのにかかる時間を短縮します。

キャッシュはAPIパフォーマンスをどのように改善しますか?

キャッシュは、キャッシュに頻繁にアクセスされるデータを保存することにより、APIパフォーマンスを向上させます。クライアントがデータ要求を送信すると、サーバーは最初にキャッシュをチェックします。データがキャッシュにある場合、サーバーはすぐにそれを返し、サーバーの処理時間とロードを短縮します。データがキャッシュにない場合、サーバーはデータベースからそれを取得し、処理し、将来のリクエストのためにキャッシュに保存します。

データ圧縮によってAPIパフォーマンスを改善する方法は?

データ圧縮により、送信されたデータサイズが縮小することによりAPIパフォーマンスが向上します。これにより、データの送信と受信にかかる時間が短縮され、APIの速度が向上します。データの圧縮は、大量のデータを処理する場合に特に有利です。

APIを使用するためのベストプラクティスは何ですか?

APIを使用するためのベストプラクティスには、非同期コールを使用してメインスレッドのブロックを防ぐために、ページングを使用してAPIで返されるデータの量を制限し、キャッシュを使用して頻繁にアクセスされるデータを保存し、データ圧縮を使用して送信されたデータサイズを縮小することが含まれます。 。

私のAPIのパフォーマンスを測定する方法は?

さまざまなメトリックを使用して、応答時間、エラー率、スループットなど、APIのパフォーマンスを測定できます。応答時間は、APIが応答を返すのにかかる時間です。エラー率は、エラーをもたらすリクエストの割合です。スループットとは、APIが単位時間ごとに処理できるリクエストの数です。これらのメトリックは、API監視ツールを使用して測定できます。

ユーザーエクスペリエンスに対するAPIパフォーマンスの影響は何ですか?

APIパフォーマンスは、ユーザーエクスペリエンスに大きな影響を与えます。 APIが遅い場合、読み込み時間が遅くなり、ユーザーがアプリケーションを放棄し、ユーザーが放棄される可能性があります。一方、高速で応答性の高いAPIは、スムーズで心地よいユーザーエクスペリエンスを提供できます。したがって、ユーザーエクスペリエンスの向上には、APIパフォーマンスの最適化が重要です。

以上がアプリのAPI消費をスピードアップする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート