API入門ガイド
SURP MDM APIを使用して、プログラムからマスターデータにアクセスする方法を説明します。
📋 概要
SURP MDM APIは、マスターデータ管理システムへのプログラマティックアクセスを提供します。RESTful APIを採用しており、JSON形式でデータをやり取りします。
基本情報
- ベースURL:
https://mdm.surp.tech/api/v1 - プロトコル: HTTPS
- 認証方式: APIキーベース認証(Bearer Token)
- データ形式: JSON
- 文字エンコーディング: UTF-8
🎯 前提条件
必要なプラン
すべてのプランでAPIを利用できますが、レート制限が異なります:
| プラン | レート制限(分) | レート制限(日) |
|---|---|---|
| Free | 10リクエスト | 100リクエスト |
| Starter | 30リクエスト | 1,000リクエスト |
| Professional | 60リクエスト | 10,000リクエスト |
| Enterprise | 無制限 | 無制限 |
必要な権限
- APIキーを作成するには Admin ロールが必要です
🔑 APIキーの取得
ステップ1: APIキー作成画面を開く
- SURP MDM管理画面にログイン(Admin ロール)
- 設定 > APIキー を開く
- 「新規APIキー作成」 をクリック
ステップ2: APIキー情報を入力
-
以下を入力:
- キー名: APIキーの用途(例:
データ同期用,レポート生成用) - 説明: 詳細な説明(任意)
- スコープ: 必要な権限を選択
- ✅ read: データの読み取り
- ✅ write: データの作成・更新
- ✅ delete: データの削除
- 有効期限: キーの有効期限(推奨: 1年)
- キー名: APIキーの用途(例:
-
「作成」をクリック
ステップ3: APIキーを保存
⚠️ 重要: APIキーは作成時に一度だけ表示されます。必ず安全な場所に保存してください。
例:
surp_live_a1b2c3d4e5f6...your_api_key_here
紛失した場合は、新しいAPIキーを作成する必要があります。
🚀 最初のAPIリクエスト
マスター定義の取得
システムに登録されているマスター定義を取得します。
cURLの例
curl -X GET "https://mdm.surp.tech/api/v1/definitions" \
-H "Authorization: Bearer surp_live_your_api_key_here" \
-H "Accept: application/json"
レスポンス例
{
"items": [
{
"id": "69ae4965-0ffe-4835-a9bd-b873f5473bd7",
"tenant_id": "acme-corp",
"master_type": "department",
"master_type_label": "部署マスター",
"schema": {
"fields": [
{
"name": "departmentCode",
"type": "string",
"label": "部署コード",
"required": true,
"unique": true
},
{
"name": "departmentName",
"type": "string",
"label": "部署名",
"required": true
}
]
},
"version": 1,
"created_at": "2025-10-30T02:30:32.984186Z"
}
],
"total": 1
}
🔐 認証方法
すべてのAPIリクエストには、AuthorizationヘッダーにAPIキーを含める必要があります。
ヘッダー形式
Authorization: Bearer YOUR_API_KEY
注意: Bearer の後にスペースが必要です。
プログラミング言語別の例
JavaScript (fetch)
const response = await fetch('https://mdm.surp.tech/api/v1/definitions', {
headers: {
'Authorization': 'Bearer surp_live_your_api_key_here',
'Accept': 'application/json'
}
});
const data = await response.json();
Python (requests)
import requests
headers = {
'Authorization': 'Bearer surp_live_your_api_key_here',
'Accept': 'application/json'
}
response = requests.get('https://mdm.surp.tech/api/v1/definitions', headers=headers)
data = response.json()
PHP
<?php
$ch = curl_init('https://mdm.surp.tech/api/v1/definitions');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer surp_live_your_api_key_here',
'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
📊 スコープと権限
APIキーには、以下のスコープを設定できます:
スコープ一覧
| スコープ | 説明 | 対応するアクション |
|---|---|---|
| read | データの読み取り | GETリクエスト、データエクスポート |
| write | データの作成・更新 | POST, PUT, PATCH、インポート、承認/却下 |
| delete | データの削除 | DELETEリクエスト |
HTTPメソッドとスコープの対応
| HTTPメソッド | アクション | 必要なスコープ |
|---|---|---|
GET | read | read |
POST | create | write |
PUT | update | write |
PATCH | update | write |
DELETE | delete | delete |
権限エラー
スコープが不足している場合のエラー:
{
"detail": "API key missing required scope: write"
}
HTTPステータス: 403 Forbidden
🔄 ページネーション
大量のデータを取得する場合は、ページネーションを使用します。
パラメータ
- skip: スキップする件数(デフォルト: 0)
- limit: 取得する件数(デフォルト: 100、最大: 1000)
例
# 最初の100件
curl "https://mdm.surp.tech/api/v1/masters/department?skip=0&limit=100"
# 次の100件
curl "https://mdm.surp.tech/api/v1/masters/department?skip=100&limit=100"
⚠️ エラーハンドリング
エラーレスポンスの形式
{
"detail": "エラーメッセージ"
}
HTTPステータスコード
| ステータス | 説明 |
|---|---|
200 OK | 成功 |
201 Created | 作成成功 |
202 Accepted | 承認リクエスト作成(承認が必要な場合) |
400 Bad Request | リクエストが不正 |
401 Unauthorized | 認証エラー |
403 Forbidden | 権限エラー |
404 Not Found | リソースが見つからない |
429 Too Many Requests | レート制限超過 |
500 Internal Server Error | サーバーエラー |
🛡️ レート制限
レート制限の確認
レスポンスヘッダーでレート制限の状況を確認できます:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
X-RateLimit-Reset: 1635724800
レート制限エラー
{
"detail": "Rate limit exceeded. Try again in 60 seconds."
}
HTTPステータス: 429 Too Many Requests
💡 ベストプラクティス
1. APIキーの管理
- 環境変数に保存: コードに直接埋め込まない
- 読み取り専用スコープ: データ参照のみの場合は
readのみ付与 - 定期的なローテーション: 3〜6ヶ月ごとにAPIキーを再作成
2. エラーハンドリング
すべてのAPIリクエストでエラーハンドリングを実装します:
try {
const response = await fetch(url, options);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
} catch (error) {
console.error('API error:', error);
}
3. リトライロジック
レート制限やネットワークエラーの場合、自動的にリトライします:
async function fetchWithRetry(url, options, retries = 3) {
for (let i = 0; i < retries; i++) {
try {
const response = await fetch(url, options);
if (response.status === 429) {
await new Promise(resolve => setTimeout(resolve, 60000)); // 1分待つ
continue;
}
return response;
} catch (error) {
if (i === retries - 1) throw error;
}
}
}
🔗 関連ガイド
- APIサンプルコード - 言語別の実装例
- APIエンドポイント一覧 - すべてのエンドポイント
- Excel統合 - ExcelからAPIを利用
- Power Query - Power QueryからAPIを利用
📞 サポート
API利用に関する質問は、よくある質問をご覧いただくか、システム管理者にお問い合わせください。