Difyトップに戻る

Dify API完全ガイド|RESTful API連携・実装例・認証方法を解説

2025年12月4日
12分で読了
中級
dify apidify api連携dify rest apidify 開発

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キーの取得方法

  1. Difyダッシュボードにログイン
  2. 対象のアプリケーションを選択
  3. 左メニューの「APIアクセス」をクリック
  4. 「APIキーを作成」ボタンをクリック
  5. 生成されたキーをコピーして安全に保管

注意: 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連携のご相談

貴社システムとDifyのAPI連携を支援します。
設計から実装まで、お気軽にご相談ください。

無料相談を申し込む

まとめ

Dify APIを活用することで、既存システムにAI機能を簡単に組み込むことができます。

  • ✅ RESTful APIで既存システムと統合
  • ✅ チャット・テキスト生成・ワークフロー・ナレッジベースのAPI
  • ✅ ストリーミング対応で優れたUX
  • ✅ Python・JavaScript等の実装が容易
  • ✅ セルフホスト版でも同じAPI構造

Difyとは?の概要ページや、料金プランもあわせてご確認ください。Dify最新ニュースで最新のアップデート情報もチェックできます。