REST API JSONレスポンスをSQL INSERT文に変換する
ページネーション付きREST API JSONレスポンスをSQL INSERT文に変換する方法を学びます。エンベロープのアンラップ、ページネーション処理、データ抽出、増分インポートパターンを解説します。
Real-World Scenarios
詳細な説明
REST APIレスポンスからSQLへ
実際のAPIレスポンスはフラットな配列であることは稀です。通常、メタデータエンベロープ、ページネーション、ネストされたデータが含まれており、SQL変換の前にアンラップする必要があります。
典型的なAPIレスポンス
{
"status": "success",
"data": {
"users": [
{ "id": 1, "name": "Alice", "created_at": "2024-06-15T09:30:00Z" },
{ "id": 2, "name": "Bob", "created_at": "2024-06-14T14:22:00Z" }
]
},
"pagination": {
"page": 1,
"per_page": 20,
"total": 152
}
}
ステップ1:データ配列の抽出
コンバーターはエンベロープから実際のデータを識別して抽出する必要があります。一般的なパターン:
response.data-- 標準エンベロープresponse.data.users-- 名前付きキーの下にネストresponse.results-- 代替の命名response.items-- もう一つの一般的なパターン
ステップ2:SQL生成
INSERT INTO users (id, name, created_at) VALUES
(1, 'Alice', '2024-06-15T09:30:00Z'),
(2, 'Bob', '2024-06-14T14:22:00Z');
ページネーションの処理
ページネーション付きAPIの場合、コンバーターは各ページのSQLを生成して結合できます:
-- ページ1
INSERT INTO users (id, name, created_at) VALUES
(1, 'Alice', '2024-06-15T09:30:00Z'),
(2, 'Bob', '2024-06-14T14:22:00Z');
-- ページ2(別リクエスト)
INSERT INTO users (id, name, created_at) VALUES
(3, 'Charlie', '2024-06-13T11:00:00Z'),
(4, 'Diana', '2024-06-12T08:15:00Z');
APIレスポンス内のネストされたオブジェクト
APIレスポンスにはネストされた関連オブジェクトが含まれることが多いです:
{
"id": 1,
"name": "Alice",
"department": { "id": 10, "name": "Engineering" }
}
コンバーターはフラット化(department_id、department_name)するか、別テーブルに正規化できます。
増分インポートパターン
定期的な同期では、タイムスタンプを使用して新しいデータのみを取得します:
-- UPSERTを使用して再取得されたレコードを処理
INSERT INTO users (id, name, created_at) VALUES (...)
ON CONFLICT (id) DO UPDATE SET
name = EXCLUDED.name,
created_at = EXCLUDED.created_at;
一般的なAPIプロバイダー
コンバーターはGitHub、Stripe、Shopify、Slack、Twilioなどの人気APIからのレスポンス形式を処理します。それぞれ独自のエンベロープ構造とページネーションスタイルを持っています。
ユースケース
複数のREST APIからデータを集約して中央のSQLデータベースに格納するレポーティングダッシュボードを構築する際、各APIレスポンスをアンラップし、正規化し、INSERT文に変換する必要があります。このパターンはAPIからデータベースへのETLパイプラインの基盤です。