コンテンツにスキップ
コンソール

サーバーと Base URL

ExpTech API は、用途ごとにいくつかのサーバーグループに分かれています。多くのグループには、DNS がノードを自動で割り当てる名前(以下では Auto)と、直接指定できるノード名(例:TNN-1)があります。各エンドポイントの上にあるドロップダウンが、ここにある host です。そのエンドポイントを提供する host だけが並びます。

Base URL は https:// と host だけで、エンドポイントのパスは必ず /api/... から続けます。例:https://api.core.exptech.dev/api/v2/eq/report。

  • Auto:https://api.core.exptech.dev
  • TNN-1:https://api.core-tnn1.exptech.dev
  • TYO-1:https://api.core-tyo1.exptech.dev

地震情報、MCP サーバーなどのデータ API を提供します。次の節のルートもこの名前の下にありますが、提供するのは TNN-1 ノードだけです。

  • TNN-1:https://api.core-tnn1.exptech.dev

気象データ、および地図タイルの一覧(レーダー、衛星、風向・風速、QPESUMS の list)です。

  • TNN-1:https://static.core-tnn1.exptech.dev

地図タイルの画像(レーダー、衛星、風向・風速、QPESUMS)と、気象データのうち指定時刻の履歴ファイルです。これらのレスポンスは長時間キャッシュされます。このグループに Auto はありません。DNS がノードを割り当てる名前は、これらのファイルがないノードに向くことがあるため、TNN-1 を直接使ってください。

  • Auto:https://api.lb.exptech.dev
  • TPE-1:https://api.lb-tpe1.exptech.dev
  • KHH-1:https://api.lb-khh1.exptech.dev

SSE のリアルタイム配信と時刻同期です。TPE-1 と KHH-1 は同じルートを提供する 2 つのノードで、どちらを選んでもかまいません。

  • Manager:https://manager.exptech.com.tw

OAuth2 と公開情報 APIです。host は 1 つだけです。

  • Announcement:https://announcement.exptech.com.tw

お知らせです。

  • LB:https://lb.exptech.dev

ベースマップ、地形、GSI タイルです。

  • TNN:https://tnn.exptech.dev

非推奨の旧版気象 API だけを提供します。新しいプログラムは、気象のページにある新しい API を使ってください。

  • Auto は、DNS がいずれかのノードに割り当てます。割り当て方と切り替え時間は保証されません。あるノードが故障しても、DNS がすぐには外さないことがあり、その間 Auto 経由のリクエストは失敗することがあります。
  • ノード指定(TNN-1、TYO-1、TPE-1、KHH-1)は、常に同じマシンへ接続します。そのノードのメンテナンス中や故障中は使えません。
  • データ API の各ノードが提供するルートは、完全には同じではありません。上の「TNN-1 のみが提供するルート」を参照してください。
  • アカウント、API Token、クォータは、すべてのノードで共有されます。ノードを変えても、認証と利用量の計算には影響しません。
  • データ API、静的ファイル、リアルタイム配信、ベースマップのタイルは、ほとんどが任意のオリジンを許可します(Access-Control-Allow-Origin: *)。ブラウザから直接呼べます。例外は各エンドポイントの説明に書いてあります。
  • アカウント、OAuth2、公開情報のグループは、公式サイトだけを許可します。サーバー側から呼んでください。唯一の例外は権限一覧で、任意のオリジンを許可します。

host を 1 つだけ使うと、その host が故障したときにサービスも止まります。クライアント側で host のリストを持ち、失敗したら切り替えることを推奨します。

  1. グループごとにリストを用意し、優先順に並べます。例:データ API は Auto → TNN-1 → TYO-1 です。TNN-1 のみのルートと静的ファイルは TNN-1 だけで、切り替えられる host はありません(アーキテクチャと地理冗長化を参照)。
  2. リクエストごとにタイムアウトを設定します(例:5 秒)。
  3. 接続エラー、タイムアウト、5xx のときだけ、次の host に切り替えます。
  4. 400、401、403、429 はパラメータまたはアカウントの問題です。どのノードでも結果は同じなので、host を変えて再試行しないでください。404 は、ルートがノードによって違うとき(上の「TNN-1 のみが提供するルート」)だけ、host を変える価値があります。
  5. 最後に成功した host を覚えておき、次のリクエストではそれを先に使います。しばらくしてから(例:10 分)、先頭に戻して試してもかまいません。
  6. 同じリクエストをすべての host に同時に送らないでください。負荷が増えるだけです。
const CORE_HOSTS = [
"https://api.core.exptech.dev",
"https://api.core-tnn1.exptech.dev",
"https://api.core-tyo1.exptech.dev",
];
let preferred = 0;
export async function fetchWithFailover(path, init = {}, hosts = CORE_HOSTS) {
let lastError;
for (let i = 0; i < hosts.length; i++) {
const index = (preferred + i) % hosts.length;
try {
const res = await fetch(hosts[index] + path, {
...init,
signal: AbortSignal.timeout(5000),
});
if (res.status >= 500) {
lastError = new Error(`HTTP ${res.status} from ${hosts[index]}`);
continue; // サーバーエラー:次の host に切り替え
}
preferred = index;
return res; // 2xx、3xx、4xx は呼び出し側に任せる
} catch (err) {
lastError = err; // 接続エラーまたはタイムアウト:次の host に切り替え
}
}
throw lastError;
}
const res = await fetchWithFailover("/api/v2/eq/report?limit=5");
const reports = await res.json();
  • 接続が切れたら、サーバーが送る retry: 3000 に従い 3 秒待って再接続します。連続して数回(例:3 回)失敗したら、リストの次の host に切り替えます。
  • event: close(例:quota exceeded、token revoked)は、アカウントまたはクォータの問題であり、サーバー故障ではありません。host を変えても解決しません。エラーコードを参照してください。
  • ハートビートの間隔と再接続の詳細は、リアルタイム配信を参照してください。