メインコンテンツまでスキップ

GET APIの利用ガイド

CAFE24 APIではデータを取得するためのさまざまな方法を提供しています。 このガイドでは、GETリクエストで利用できる7種類のパラメータの使い方を解説します。


1️⃣ 検索条件の追加

エンドポイントにパラメータを付与することで検索条件を追加できます。 複数の条件は & で連結します。

使用例

# 特定ブランドかつ価格が1000以上の商品を照会
GET https://yourmall.cafe24api.com/api/v2/products?brand_code=B000000A&price_min=1000

# 日付範囲で照会(YYYY-MM-DD)
GET https://yourmall.cafe24api.com/api/v2/products?created_start_date=2024-01-03&created_end_date=2024-02-03

# 日付+時刻範囲で照会(ISO 8601)
GET https://yourmall.cafe24api.com/api/v2/products?updated_start_date=2024-01-03T14:01:26+09:00&updated_end_date=2024-02-03T14:01:26+09:00

コード例

// Node.js
const response = await axios.get('/api/v2/admin/products', {
params: {
brand_code: 'B000000A',
price_min: 1000,
price_max: 50000,
status: 'active'
}
});
# Python
params = {
'brand_code': 'B000000A',
'price_min': 1000,
'created_start_date': '2024-01-03'
}
response = requests.get(url, params=params)

2️⃣ カンマによる複数値検索

カンマ(,)を使うと最大100件まで同時に検索できます。 カンマ区切りの検索条件は OR条件 として動作します。

使用例

# 指定した商品番号で照会(11 OR 12 OR 13)
GET https://yourmall.cafe24api.com/api/v2/products?product_no=11,12,13

# 複数条件を組み合わせる
GET https://yourmall.cafe24api.com/api/v2/products?product_no=11,12,13&product_code=P000000X,P000000W

コード例

// Node.js
const productNos = [11, 12, 13];
const response = await axios.get('/api/v2/admin/products', {
params: {
product_no: productNos.join(',')
}
});
# Python
product_nos = [11, 12, 13]
params = {'product_no': ','.join(map(str, product_nos))}
response = requests.get(url, params=params)

⚠️ 注意: 最大100件、OR条件、空白を含めない


3️⃣ マルチショップ情報の取得

shop_no パラメータで特定のマルチショップの情報を取得できます。 省略した場合はデフォルト(1番目)のショッピングモール情報が返されます。

使用例

# 2番ショップの商品を照会
GET https://yourmall.cafe24api.com/api/v2/products?shop_no=2

# デフォルトショッピングモール(shop_no省略)
GET https://yourmall.cafe24api.com/api/v2/products

コード例

// Node.js - すべてのショップを巡回
async function getAllShopsProducts() {
const allProducts = [];
for (let shopNo = 1; shopNo <= 5; shopNo++) {
try {
const response = await axios.get('/api/v2/admin/products', {
params: { shop_no: shopNo }
});
allProducts.push({ shop_no: shopNo, products: response.data });
} catch (error) {
break; // ショップが存在しない
}
}
return allProducts;
}

4️⃣ 詳細照会 vs 単件照会

リソースIDを指定することで詳細情報を取得できます。

方式URL取得データ
詳細照会GET /products/128より多くの情報
単件照会GET /products?product_no=128基本情報

使用例

# 詳細照会 - より多くの情報を含む
GET https://yourmall.cafe24api.com/api/v2/admin/products/128

# 単件照会 - 基本情報のみ
GET https://yourmall.cafe24api.com/api/v2/admin/products?product_no=128

コード例

// Node.js
// 詳細照会
const detail = await axios.get(`/api/v2/admin/products/${productNo}`);

// 単件照会
const info = await axios.get('/api/v2/admin/products', {
params: { product_no: productNo }
});

5️⃣ ページネーション

limitoffset パラメータを使ってページ単位でデータを取得できます。

パラメータ説明
limit一度に取得する件数100
offsetスキップする件数(0始まり)200

計算式

ページ番号 = P(1始まり)
limit = L
offset = (P - 1) * L

例)3ページ目を取得(limit=100)
offset = (3 - 1) * 100 = 200

使用例

# 最初の100件
GET https://yourmall.cafe24api.com/api/v2/admin/products?limit=100

# 201〜300件目(3ページ目)
GET https://yourmall.cafe24api.com/api/v2/admin/products?limit=100&offset=200

コード例

// Node.js - 全データ取得
async function getAllProducts() {
const allProducts = [];
let offset = 0;
const limit = 100;

while (true) {
const response = await axios.get('/api/v2/admin/products', {
params: { limit, offset }
});

const products = response.data.resource;
if (products.length === 0) break;

allProducts.push(...products);
offset += limit;
}

return allProducts;
}
# Python - ページ単位での取得
def get_products_page(page, limit=100):
offset = (page - 1) * limit
response = requests.get(url, params={'limit': limit, 'offset': offset})
return response.json()['resource']

6️⃣ 特定フィールドの取得

fields パラメータで必要なフィールドだけを選択的に取得できます。

使用例

# 商品名と商品番号のみ取得
GET https://yourmall.cafe24api.com/api/v2/admin/products?fields=product_name,product_no

# 複数フィールドを取得
GET https://yourmall.cafe24api.com/api/v2/admin/products?fields=product_no,product_name,price,inventory_qty

レスポンス例

{
"resource": [
{
"product_no": 128,
"product_name": "サンプル商品"
}
]
}

コード例

// Node.js
const fields = ['product_no', 'product_name', 'price'];
const response = await axios.get('/api/v2/admin/products', {
params: { fields: fields.join(',') }
});

メリット

  • ネットワーク帯域の節約
  • 処理速度の向上
  • メモリ効率の改善
  • センシティブデータのフィルタリング

7️⃣ サブリソースの取得

embed パラメータで関連するサブリソースを一緒に取得できます。

使用例

# 商品照会時にバリアントと在庫を含める
GET https://yourmall.cafe24api.com/api/v2/admin/products/570?embed=variants,inventories

# 注文照会時に商品情報を含める
GET https://yourmall.cafe24api.com/api/v2/admin/orders/123?embed=products,shipping

レスポンス例

{
"resource": {
"product_no": 570,
"product_name": "サンプル商品",
"variants": [
{"variant_no": 1, "option_name": "カラー", "option_value": "レッド"}
],
"inventories": [
{"warehouse_name": "本倉庫", "quantity": 100}
]
}
}

コード例

// Node.js
const response = await axios.get(`/api/v2/admin/products/${productNo}`, {
params: { embed: 'variants,inventories,categories' }
});

const product = response.data.resource;
console.log('Variants:', product.variants);
console.log('Inventories:', product.inventories);

embed vs 個別照会の比較

項目embedを使う個別照会
API呼び出し回数1回N+1回
パフォーマンス高速低速
レスポンスサイズ大きい小さい

🎯 ベストプラクティス

1. 条件の組み合わせを最適化する

# ✅ 良い例 - 1回のリクエストで必要なデータのみ取得
GET /products?status=active&fields=product_no,product_name,price&limit=100

# ❌ 悪い例 - 全件取得してからフィルタリング
GET /products

2. エラーハンドリング

async function safeGetData(endpoint, params) {
try {
const response = await axios.get(endpoint, { params });
return response.data.resource;
} catch (error) {
if (error.response?.status === 404) {
return null; // リソースが見つからない
} else if (error.response?.status === 422) {
console.error('不正なパラメータ:', error.response.data);
}
throw error;
}
}

3. URLエンコーディング

// ✅ 自動エンコーディング(推奨)
const params = {
product_name: '商品名',
category: 'カテゴリ'
};
axios.get(url, { params }); // axiosが自動でエンコードする

// ❌ 手動エンコーディング(非推奨)
const url = `/products?name=${encodeURIComponent('商品名')}`;

4. パフォーマンス最適化

// ✅ 必要なフィールドのみ取得
const params = {
fields: 'product_no,product_name,price',
limit: 100
};

// ✅ embedでN+1問題を解消
const params = {
embed: 'variants,inventories',
fields: 'product_no,product_name,variants,inventories'
};

// ✅ 条件を可能な限り活用
const params = {
status: 'active',
price_min: 10000,
created_start_date: '2024-01-01',
limit: 50
};

📊 パラメータ組み合わせ例

複合検索の例

# 価格帯内のactive商品から特定フィールドだけページ取得
GET /api/v2/admin/products?status=active&price_min=10000&price_max=50000&fields=product_no,product_name,price&limit=100&offset=0
// Node.jsでの複合検索
const response = await axios.get('/api/v2/admin/products', {
params: {
status: 'active',
price_min: 10000,
price_max: 50000,
created_start_date: '2024-01-01',
fields: 'product_no,product_name,price,created_date',
limit: 100,
offset: 0,
shop_no: 1
},
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json'
}
});

⚠️ 注意事項

  1. URLエンコーディング: 日本語や特殊文字は必ずエンコードしてください
  2. 日付フォーマット: ISO 8601形式を推奨(YYYY-MM-DDTHH:MM:SS+09:00
  3. カンマ件数制限: 最大100件
  4. オフセットのパフォーマンス: offset値が大きいとパフォーマンス低下を招くことがあります
  5. APIドキュメントの確認: APIごとに利用できるパラメータが異なります

📚 関連ドキュメント


💡 まとめ

機能パラメータ
検索条件param=valuestatus=active
複数値param=v1,v2,v3product_no=11,12,13
マルチショップshop_no=Nshop_no=2
詳細照会/resource/{id}/products/128
ページネーションlimit=N&offset=Mlimit=100&offset=200
特定フィールドfields=f1,f2fields=product_no,name
サブリソースembed=r1,r2embed=variants,inventories