Dify API完全ガイド|RESTful API連携・実装例・認証方法を解説
DifyのAPI連携機能を徹底解説。RESTful APIの基本から認証、エンドポイント、実装例まで、開発者向けに詳しく説明します。料金プランによってAPI利用制限が異なりますので、併せてご確認ください。
Dify APIの概要
Difyで作成したAIアプリケーションは、RESTful APIとして公開できます。これにより、既存のWebサイト、モバイルアプリ、業務システムにAI機能を簡単に組み込むことが可能です。
APIの種類
Difyは2種類のAPIを提供しています。
- アプリケーションAPI: 作成したAIアプリを外部から呼び出すためのAPI
- ナレッジベースAPI: ドキュメントの追加・更新・削除を行うためのAPI
API連携のメリット
- 柔軟な統合: 既存システムにAI機能を追加
- スケーラビリティ: 負荷に応じた自動スケーリング
- セキュリティ: トークンベースの認証でアクセス制御
- ログ管理: 利用状況の可視化と分析
認証とAPIキー
Dify APIはBearerトークン認証を採用しています。
APIキーの取得方法
- Difyダッシュボードにログイン
- 対象のアプリケーションを選択
- 左メニューの「APIアクセス」をクリック
- 「APIキーを作成」ボタンをクリック
- 生成されたキーをコピーして安全に保管
注意: APIキーは一度しか表示されません。紛失した場合は新しいキーを作成する必要があります。
認証ヘッダーの設定
リクエスト時は以下のようにAuthorizationヘッダーを設定します。
Authorization: Bearer {your-api-key}
チャットAPI
チャット形式のアプリケーションを呼び出すAPIです。
エンドポイント
POST https://api.dify.ai/v1/chat-messages
リクエスト例
{
"inputs": {},
"query": "こんにちは、今日の天気を教えてください",
"response_mode": "streaming",
"conversation_id": "",
"user": "user-123"
}
パラメータ説明
| パラメータ | 型 | 説明 |
|---|---|---|
| inputs | object | アプリで定義した変数に値を渡す |
| query | string | ユーザーの入力メッセージ |
| response_mode | string | "streaming" または "blocking" |
| conversation_id | string | 会話を継続する場合に指定 |
| user | string | ユーザー識別子 |
レスポンス例
{
"event": "message",
"message_id": "msg-xxx",
"conversation_id": "conv-xxx",
"answer": "東京の今日の天気は晴れです。",
"created_at": 1700000000
}
テキスト生成API
単発のテキスト生成を行うAPIです。
エンドポイント
POST https://api.dify.ai/v1/completion-messages
リクエスト例
{
"inputs": {
"topic": "AIの未来"
},
"response_mode": "blocking",
"user": "user-123"
}
ワークフローAPI
ワークフローアプリを実行するAPIです。n8n連携やMCP連携と組み合わせることで、さらに高度な自動化が実現できます。
エンドポイント
POST https://api.dify.ai/v1/workflows/run
リクエスト例
{
"inputs": {
"input_text": "分析対象のテキスト"
},
"response_mode": "streaming",
"user": "user-123"
}
ナレッジベースAPI
ドキュメントの管理を行うAPIです。
ドキュメントのアップロード
POST https://api.dify.ai/v1/datasets/{dataset_id}/document/create_by_text
{
"name": "製品マニュアル",
"text": "ここにドキュメントの内容を記述...",
"indexing_technique": "high_quality"
}
ドキュメントの更新
POST https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}/update_by_text
{
"name": "製品マニュアル(更新版)",
"text": "更新された内容..."
}
ドキュメントの削除
DELETE https://api.dify.ai/v1/datasets/{dataset_id}/documents/{document_id}
実装例
Python実装例
import requests
API_KEY = "your-api-key"
BASE_URL = "https://api.dify.ai/v1"
def chat(query, conversation_id=""):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"inputs": {},
"query": query,
"response_mode": "blocking",
"conversation_id": conversation_id,
"user": "python-client"
}
response = requests.post(
f"{BASE_URL}/chat-messages",
headers=headers,
json=data
)
return response.json()
# 使用例
result = chat("Difyについて教えてください")
print(result["answer"])
JavaScript実装例
const API_KEY = "your-api-key";
const BASE_URL = "https://api.dify.ai/v1";
async function chat(query, conversationId = "") {
const response = await fetch(`${BASE_URL}/chat-messages`, {
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
inputs: {},
query: query,
response_mode: "blocking",
conversation_id: conversationId,
user: "js-client"
})
});
return response.json();
}
// 使用例
chat("Difyについて教えてください")
.then(result => console.log(result.answer));
ストリーミング対応
// SSE(Server-Sent Events)でストリーミングレスポンスを受信
const eventSource = new EventSource(`${BASE_URL}/chat-messages?...`);
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.event === "message") {
console.log(data.answer);
}
};
eventSource.onerror = (error) => {
console.error("Error:", error);
eventSource.close();
};
レート制限
Dify APIにはレート制限があります。
| プラン | リクエスト/分 | リクエスト/日 |
|---|---|---|
| Sandbox | 10 | 200 |
| Professional | 100 | 制限なし |
| Team | 500 | 制限なし |
| Enterprise | カスタム | カスタム |
エラーハンドリング
APIエラー時のレスポンス形式と対処法です。
エラーコード一覧
| コード | 説明 | 対処法 |
|---|---|---|
| 400 | リクエスト形式エラー | パラメータを確認 |
| 401 | 認証エラー | APIキーを確認 |
| 429 | レート制限超過 | リトライまたはプランアップグレード |
| 500 | サーバーエラー | 時間をおいて再試行 |
ベストプラクティス
セキュリティ
- APIキーは環境変数で管理し、コードに直接記述しない
- 本番環境ではHTTPSを使用
- 不要になったAPIキーは速やかに削除
- アクセスログを定期的に監視
パフォーマンス
- ストリーミングモードで応答速度を改善
- 適切なタイムアウト設定
- リトライロジックの実装
- キャッシュ戦略の検討
モニタリング
- API利用状況をダッシュボードで確認
- エラー率と応答時間を監視
- コスト管理のためのアラート設定
よくある質問
Q: セルフホスト版でもAPIは使えますか?
はい、セルフホスト版でも同じAPIエンドポイント構造で利用できます。ベースURLを自社サーバーのURLに変更してください。詳しい構築方法はGitHubガイドをご参照ください。
Q: APIキーは複数作成できますか?
はい、1つのアプリケーションに対して複数のAPIキーを作成できます。環境ごと(開発・本番)に分けて管理することをおすすめします。
Q: ストリーミングとブロッキングの違いは?
ストリーミング(streaming)はSSEで段階的にレスポンスを返すため、ユーザー体験が向上します。ブロッキング(blocking)は完全なレスポンスを一度に返します。
Q: conversation_idの有効期限は?
デフォルトでは24時間です。設定で変更可能です。期限切れの場合は新しい会話として開始されます。
まとめ
Dify APIを活用することで、既存システムにAI機能を簡単に組み込むことができます。
- ✅ RESTful APIで既存システムと統合
- ✅ チャット・テキスト生成・ワークフロー・ナレッジベースのAPI
- ✅ ストリーミング対応で優れたUX
- ✅ Python・JavaScript等の実装が容易
- ✅ セルフホスト版でも同じAPI構造
Difyとは?の概要ページや、料金プランもあわせてご確認ください。Dify最新ニュースで最新のアップデート情報もチェックできます。
関連トピック
関連ガイド
Dify MCP連携完全ガイド|Claude Desktop × Dify で AIワークフローを自動化
DifyとMCP(Model Context Protocol)を連携させて、Claude DesktopからDifyワークフローを直接操作する方法を解説。設定手順から実践的な活用例まで網羅。
Dify GitHub完全ガイド|セルフホスト構築からコントリビューションまで
DifyのGitHubリポジトリを徹底解説。Docker Composeでのセルフホスト構築、ローカル開発環境のセットアップ、コントリビューション方法まで網羅。
Dify料金プラン完全ガイド|無料・有料・セルフホストを徹底比較
Difyの料金体系を徹底解説。無料プラン(Sandbox)から法人向けEnterpriseまで、4つのプランの違いとセルフホスト版の費用を比較。最適なプランの選び方をご紹介します。