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

API統合

ABC User FeedbackはRESTful APIを通じて外部システムと統合できます。プログラムでフィードバックを収集し、イシューを管理し、データを照会できるため、既存のサービスやワークフローに簡単に統合できます。


API基本情報

公式APIドキュメント

ABC User Feedbackの完全なAPIドキュメントは次のリンクで確認できます:

🔗 公式APIドキュメント(Redocly)

このドキュメントでは、すべてのエンドポイントの詳細な仕様、リクエスト/レスポンス例、実際にテスト可能なインターフェースを提供します。

Base URL

https://your-domain.com/api

認証方式

すべてのAPIリクエストはAPIキーベースの認証を使用します。

X-API-KEY: your-api-key-here
Content-Type: application/json
セキュリティ注意事項

APIキーはサーバーサイドでのみ使用し、クライアント(ブラウザ、モバイルアプリ)に公開しないでください。

APIキー発行方法

  1. 管理者ページアクセス: ABC User Feedback管理者ページにログイン
  2. プロジェクト設定: 該当プロジェクトの設定ページに移動
  3. APIキー管理: 「APIキー管理」メニューから新しいAPIキーを生成
  4. キーコピー: 生成されたAPIキーを安全な場所に保存
APIキー権限

APIキーはプロジェクトごとに発行され、該当プロジェクトのデータにのみアクセスできます。


主要APIエンドポイント例

1. フィードバック作成

基本フィードバック作成

const createFeedback = async (
projectId,
channelId,
message,
issueNames = []
) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/feedbacks`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify({
message: message,
issueNames: issueNames,
}),
}
);

return await response.json();
};

// 使用例
const feedback = await createFeedback(1, 1, "決済エラーが発生しました", [
"決済",
"エラー",
]);

2. フィードバック照会

チャネル別フィードバック検索

const searchFeedbacks = async (
projectId,
channelId,
searchText,
limit = 10,
page = 1
) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/feedbacks/search`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify({
limit: limit,
page: page,
query: {
searchText: searchText,
createdAt: {
gte: "2024-01-01",
lt: "2024-12-31",
},
},
sort: {
createdAt: "DESC",
},
}),
}
);

return await response.json();
};

// 使用例
const feedbacks = await searchFeedbacks(1, 1, "決済", 20, 1);
console.log(
`合計${feedbacks.meta.totalItems}件のフィードバック中${feedbacks.items.length}件を照会`
);

単一フィードバック照会

const getFeedbackById = async (projectId, channelId, feedbackId) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/feedbacks/${feedbackId}`,
{
method: "GET",
headers: {
"X-API-KEY": "your-api-key-here",
},
}
);

return await response.json();
};

// 使用例
const feedback = await getFeedbackById(1, 1, 123);
console.log("フィードバック詳細:", feedback);

フィードバック更新

const updateFeedback = async (projectId, channelId, feedbackId, updateData) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/feedbacks/${feedbackId}`,
{
method: "PUT",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify(updateData),
}
);

return await response.json();
};

// 使用例
const updatedFeedback = await updateFeedback(1, 1, 123, {
message: "更新されたフィードバック内容",
issueNames: ["更新されたイシュー"],
});

フィードバック削除

const deleteFeedbacks = async (projectId, channelId, feedbackIds) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/feedbacks`,
{
method: "DELETE",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify({
feedbackIds: feedbackIds,
}),
}
);

return await response.json();
};

// 使用例
const result = await deleteFeedbacks(1, 1, [123, 124, 125]);
console.log("削除完了:", result);

3. イシュー管理

イシュー作成

const createIssue = async (projectId, name, description) => {
const response = await fetch(`/api/projects/${projectId}/issues`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify({
name: name,
description: description,
}),
});

return await response.json();
};

// 使用例
const issue = await createIssue(
1,
"決済エラー",
"ユーザーが決済過程でエラーを経験"
);

イシュー検索

const searchIssues = async (projectId, query = {}) => {
const response = await fetch(`/api/projects/${projectId}/issues/search`, {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify({
limit: 10,
page: 1,
query: query,
sort: {
createdAt: "DESC",
},
}),
});

return await response.json();
};

// 使用例
const issues = await searchIssues(1, { name: "決済" });

イシュー照会

const getIssueById = async (projectId, issueId) => {
const response = await fetch(`/api/projects/${projectId}/issues/${issueId}`, {
method: "GET",
headers: {
"X-API-KEY": "your-api-key-here",
},
});

return await response.json();
};

// 使用例
const issue = await getIssueById(1, 123);
console.log("イシュー詳細:", issue);

イシュー更新

const updateIssue = async (projectId, issueId, updateData) => {
const response = await fetch(`/api/projects/${projectId}/issues/${issueId}`, {
method: "PUT",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify(updateData),
});

return await response.json();
};

// 使用例
const updatedIssue = await updateIssue(1, 123, {
name: "更新されたイシュー名",
description: "更新されたイシュー説明",
});

イシュー削除

const deleteIssues = async (projectId, issueIds) => {
const response = await fetch(`/api/projects/${projectId}/issues`, {
method: "DELETE",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "your-api-key-here",
},
body: JSON.stringify({
issueIds: issueIds,
}),
});

return await response.json();
};

// 使用例
const result = await deleteIssues(1, [123, 124, 125]);
console.log("イシュー削除完了:", result);

フィードバックにイシュー追加

const addIssueToFeedback = async (
projectId,
channelId,
feedbackId,
issueId
) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/feedbacks/${feedbackId}/issues/${issueId}`,
{
method: "POST",
headers: {
"X-API-KEY": "your-api-key-here",
},
}
);

return await response.json();
};

// 使用例
const result = await addIssueToFeedback(1, 1, 123, 456);
console.log("イシュー追加完了:", result);

フィードバックからイシュー削除

const removeIssueFromFeedback = async (
projectId,
channelId,
feedbackId,
issueId
) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/feedbacks/${feedbackId}/issues/${issueId}`,
{
method: "DELETE",
headers: {
"X-API-KEY": "your-api-key-here",
},
}
);

return await response.json();
};

// 使用例
const result = await removeIssueFromFeedback(1, 1, 123, 456);
console.log("イシュー削除完了:", result);

4. プロジェクトとチャネル情報

プロジェクト情報照会

const getProjectInfo = async (projectId) => {
const response = await fetch(`/api/projects/${projectId}`, {
method: "GET",
headers: {
"X-API-KEY": "your-api-key-here",
},
});

return await response.json();
};

// 使用例
const project = await getProjectInfo(1);
console.log("プロジェクト情報:", project);

チャネルフィールド照会

const getChannelFields = async (projectId, channelId) => {
const response = await fetch(
`/api/projects/${projectId}/channels/${channelId}/fields`,
{
method: "GET",
headers: {
"X-API-KEY": "your-api-key-here",
},
}
);

return await response.json();
};

// 使用例
const fields = await getChannelFields(1, 1);
console.log("チャネルフィールド:", fields);

SwaggerによるAPIテスト

ABC User FeedbackはSwagger UIを提供して、APIを簡単にテストし理解できます。

Swaggerアクセス方法

**APIサーバーアドレス + /docs**でアクセスします:

https://your-domain.com/api/docs

またはReDoc形式で:

https://your-domain.com/api/docs/redoc

SwaggerでのAPIキー設定

  1. Swagger UI上部の**"Authorize"**ボタンをクリック
  2. X-API-KEYフィールドに発行されたAPIキーを入力
  3. **"Authorize"**をクリックして認証完了

これ以降、すべてのAPIリクエストで自動的にAPIキーが含まれ、テストできます。

Swagger活用のヒント

  • **"Try it out"**ボタンで実際のAPI呼び出しテスト
  • Response bodyセクションで実際のレスポンスデータ構造を確認
  • Schemaタブでリクエスト/レスポンスデータ形式の詳細を確認
  • cURLコマンドを自動生成してCLIテスト可能

エラー処理と再試行ロジック

HTTPステータスコード

ステータスコード意味処理方法
200成功正常処理
400不正なリクエストリクエストデータ検証
401認証失敗APIキー確認
403権限なしプロジェクトアクセス権限確認
404リソースなしID値確認
429リクエスト制限超過しばらくしてから再試行
500サーバーエラー再試行またはサポートチームに問い合わせ

レスポンスデータ解析方法

ページネーションレスポンス構造

{
"meta": {
"itemCount": 10,
"totalItems": 100,
"itemsPerPage": 10,
"totalPages": 10,
"currentPage": 1
},
"items": [
{
"id": 1,
"message": "フィードバック内容",
"createdAt": "2024-01-01T00:00:00.000Z",
"issues": [
{
"id": 1,
"name": "イシュー名"
}
]
}
]
}

セキュリティとパフォーマンス最適化

APIキーセキュリティ

  • 環境変数使用: APIキーを環境変数で管理
  • サーバーサイドのみ: クライアントにAPIキーを公開しない
  • キーローテーション: 定期的なAPIキー交換
  • IPホワイトリスト: 可能な場合は特定IPからのみアクセス許可

パフォーマンス最適化

  • ページネーション活用: 大量データ照会時に適切なlimit設定
  • 必要なフィールドのみリクエスト: クエリ最適化でレスポンス速度改善
  • キャッシング戦略: 頻繁に照会するデータはクライアントサイドキャッシング
  • バッチ処理: 複数のリクエストをまとめて処理

関連ドキュメント

  • APIキー管理 - UIからAPIキーを発行する方法
  • 画像設定 - 画像アップロードAPI使用のための設定
  • Webhook統合 - APIと一緒に活用できるリアルタイム通知設定