ハイライト
リクエスト側の不備によるエラーは、当社の503ではなく、お客様側の400として返されるようになりました。Single、Proxy Finder、Browserは原因となった各フィールドを特定し、クレジットを消費せず、成功する見込みのないリトライを促すこともなくなります。また、Budgetビューでは購入したクレジットとリクエストで消費された全クレジットが分けて表示されるようになり、パスワードを変更すると他のすべてのDashboardセッションからサインアウトされるようになりました。最初の2点についてはchangelogで確認できます。
新機能
不正なリクエストのエラー内容を明示
Single、Proxy Finder、Browserに実行不可能なbody(urlの不足、数値ではないtimeout_msなど)を送信すると、HTTP 400が返されます。errorはInvalid request:で始まり、原因となった各フィールドとその理由が最大5件まで一覧表示されます。これはclient_errorの結果となり、消費クレジットは0です。
今週までは、これらのリクエストは汎用的な503として返されていました。これは当社側の障害のように見え、リトライループを再実行させてしまいます。クライアントが400を回復不能なエラーとして処理する場合(当社のエラーリファレンスのサンプルコードなど)、タイポがあっても最初の呼び出しで処理が停止するようになります。
import requests
r = requests.post(
"https://api.foura.ai/api/single",
headers={"X-API-Key": "pk_live_..."},
json={"url": "https://example.com/data", "timeout_ms": "fast"},
)
if r.status_code == 400:
# "Invalid request: timeout_ms: ..." means fix the call, don't retry it
raise ValueError(r.json()["error"])
Autoはこれまで通り動作します。受け入れられないフィールドは、試行前かつコストなしで、status: 400とerrorに理由を含めたHTTP 200を返します。
請求対象と消費済みクレジットの並列表示
Metrics配下のBudgetビューでは、成功したリクエストのみが消費する請求対象クレジットを先頭に表示し、その直下に全消費量を「of N spent」として表示するようになりました。リクエストあたりのコストも請求対象クレジットで表記されます。また、キー、ドメイン、クライアントIP別の内訳には、各数値に対応するソート可能なカラムが追加されました。
失敗したリクエストでも失敗を検知するためにイグジットやブラウザを使用するため、消費済みクレジットはすべての結果をカウントします。したがって、2つのカラムの差分を見ることで、成功しなかったリクエストにどれだけの処理負荷がかかったかをドメインごとに把握できます。
サインアウト時の完全なセッション切断
Settingsでパスワードを変更する、サインインページからリセットする、または「Sign Out Others」を押すと、アカウントにサインインしている他のすべてのブラウザからサインアウトされます。変更を行ったブラウザはそのまま維持されます。サインアウト処理により、ブラウザ内だけでなくサーバー側でもそのセッションが終了するようになりました。
パスワードリセットページでも、サインインやサインアップと同じ検証ステップが要求されるようになりました。必要な場合を除き、画面に表示されることはありません。
Proxy Finderとゲートウェイリダイレクト
一部のイグジットは企業ネットワークのゲートウェイ配下にあります。前回のダイジェストでは専用のログインページを返すケースを取り上げました。Proxy Finderは、サインインサービスへのリダイレクトを返すパターンも検知できるようになりました。そのリダイレクトをサイトのレスポンスとして返すのではなく、失敗した試行としてカウントし、別のイグジットへ切り替えます。
Dashboardの細かな修正
- 選択したオーナー(Everything、Personal、または組織)にAPIキーがまだ存在しない場合、OverviewとMetricsの期間表示の下にその旨が表示され、キー作成へ誘導するようになりました。
- Overviewの各数値はラベルの直下に統一されたサイズで配置され、どのような画面幅でもパネルの行を横一列に確認しやすくなりました。Auto attemptsパネルは常に表示され、Autoの呼び出しがない期間はゼロと表示されます。
- 単一の請求形態のみで提供されるプランでは、Subscribe時のMonthly/Annual切り替えスイッチを非表示にしました。
- 弊社が手動設定したトライアルにおいて、アップグレードページで別のプランを選択するとカード情報の入力が求められ、その日から正規期間が開始されるようになりました。支払いが完了した時点でトライアルは終了します。
内部構造の改善
api.foura.aiおよびeu.api.foura.aiへの呼び出しは、単一サーバーではなく複数のサーバーで同時に応答するようになりました。1台が応答を停止した場合でも、数分以内に新しい呼び出しが他のサーバーへルーティングされます。
Autoが軽量化されました。呼び出し用の保存済みセッションの選択にかかる内部ルックアップが、従来の数十回から4回に削減されました。また、各サーバーで稼働するAutoの処理能力が向上したため、混雑時におけるAuto呼び出しのキュー待機時間が短縮されました。
10月のセキュリティリリースに伴い、すべてのエンジンを最新の長期サポート(LTS)ランタイムへ移行し、API、Dashboard、ドキュメント、ブログ全体のライブラリにパッチを適用しました。SingleおよびProxy Finderでは、新しいランタイムにより、リクエストの途中で読み込みが停止した1つの出口が同一サーバー上の他のリクエストを遅延させるのを防ぎます。新バージョンのためにサーバーが再起動する前には、新規の呼び出し受信を停止し、ヘルスチェックを通過した時点で復帰します。
リトライは応答を待たせるサイトのためのものであり、自身のリクエスト内のタイポに適用すべきではありません。