> ## Documentation index
> Fetch the complete documentation index at: https://dify-docs.docs7.io/llms.txt
> Ask it with GET https://dify-docs.docs7.io/ask?q=<keywords or question>. Short keywords rank best.
> Use these to discover all available pages before exploring further.

# Endpoint プラグイン

> Neko Cat プロジェクトを例に、Dify プラグインで HTTP Endpoint を定義、設定、実装します

> このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/develop-plugin/dev-guides-and-walkthroughs/endpoint) を参照してください。

Endpoint はプラグインが公開する HTTP インターフェースで、外部システムとの統合に使用します。このドキュメントでは、[Neko Cat](https://github.com/langgenius/dify-plugin-sdks/tree/739b16ebd300e0b0c5e8c977f70d9c43094b1af7/python/examples/neko) プロジェクトを例にその構造を説明します。

<Info>
このサンプルは SDK リポジトリから削除されているため、リンクは最後に収録されていたリビジョンを指しています。継続的にメンテナンスされているプラグインサンプルについては、[公式プラグイン例](https://github.com/langgenius/dify-official-plugins) を参照してください。
</Info>

## グループ定義

Endpoint グループは、複数の Endpoint の集合です。Dify プラグイン内で新しい Endpoint を作成する際、以下の設定を入力する必要がある場合があります。

<Frame>
  ![Endpoint グループの設定フォーム](https://assets-docs.dify.ai/2024/11/763dbf86e4319591415dc5a1b6948ccb.png)
</Frame>

**Endpoint Name** のほか、グループの設定を記述することでフォーム項目を追加できます。保存すると、このグループに含まれる複数のインターフェースが表示され、それらはすべて同じ設定を共有します。

<Frame>
  ![Endpoint グループのインターフェース一覧](https://assets-docs.dify.ai/2024/11/b778b7093b7df0dc80a476c65ddcbe58.png)
</Frame>

### 構造

- **`settings`** (map[string] [ProviderConfig](/ja/develop-plugin/features-and-specs/plugin-types/general-specifications#providerconfig)): Endpoint 設定の定義。
- **`endpoints`** (list[string]、必須): 具体的な `endpoint` インターフェース定義を指します。

```yaml
settings:
  api_key:
    type: secret-input
    required: true
    label:
      en_US: API key
      zh_Hans: API key
      ja_Jp: API key
      pt_BR: API key
    placeholder:
      en_US: Please input your API key
      zh_Hans: 请输入你的 API key
      ja_Jp: あなたの API key を入れてください
      pt_BR: Por favor, insira sua chave API
endpoints:
  - endpoints/duck.yaml
  - endpoints/neko.yaml
```

## インターフェース定義

- **`path`** (string): Werkzeug インターフェース標準に従います。
- **`method`** (string): インターフェースメソッド。`HEAD`、`GET`、`POST`、`PUT`、`DELETE`、`OPTIONS` のみをサポートします。
- **`extra`** (object): 基本情報以外の設定情報。
  - **`python`** (object)
    - **`source`** (string): このインターフェースを実装するソースコード。

```yaml
path: "/duck/<app_id>"
method: "GET"
extra:
  python:
    source: "endpoints/duck.py"
```

## インターフェース実装

`dify_plugin.Endpoint` を継承するサブクラスと、その `_invoke` メソッドを実装します。

- **入力パラメータ**
  - **`r`** (Request): `werkzeug` の `Request` オブジェクト。
  - **`values`** (Mapping): パスから解析されたパスパラメータ。
  - **`settings`** (Mapping): この Endpoint の設定情報。
- **戻り値**
  - `werkzeug` の `Response` オブジェクト。ストリーミングレスポンスをサポートします。
  - 文字列を直接返すことはサポートされていません。

サンプルコード：

```python
import json
from typing import Mapping
from werkzeug import Request, Response
from dify_plugin import Endpoint

class Duck(Endpoint):
    def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
        """
        Invokes the endpoint with the given request.
        """
        app_id = values["app_id"]

        def generator():
            yield f"{app_id} <br>"

        return Response(generator(), status=200, content_type="text/html")
```

## 注意事項

- Endpoint はプラグインが呼び出されたときにのみインスタンス化されます。常時稼働するサービスではありません。
- Endpoint を開発する際はセキュリティに注意し、危険な操作の実行を避けてください。
- Endpoint は Webhook コールバックの処理や、他のシステムが接続するためのインターフェースの提供に使用できます。

プラグイン開発を始めたばかりの場合は、まず [プラグイン開発入門](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin) と [開発者チートシート](/ja/develop-plugin/dev-guides-and-walkthroughs/cheatsheet) を読むことをお勧めします。

## 関連リソース

- [プラグイン開発の基本概念](/ja/develop-plugin/getting-started/getting-started-dify-plugin)：プラグイン開発の全体的なアーキテクチャ。
- [Neko Cat サンプル](/ja/develop-plugin/dev-guides-and-walkthroughs/endpoint)：拡張プラグイン開発のサンプル。
- [汎用仕様定義](/ja/develop-plugin/features-and-specs/plugin-types/general-specifications)：ProviderConfig などの共通構造。
- [Slack Bot プラグイン開発サンプル](/ja/develop-plugin/dev-guides-and-walkthroughs/develop-a-slack-bot-plugin)：別のプラグイン開発サンプル。
- [プラグイン開発入門](/ja/develop-plugin/dev-guides-and-walkthroughs/tool-plugin)：ゼロからプラグインを開発する。
- [Dify サービスの逆呼び出し](/ja/develop-plugin/features-and-specs/advanced-development/reverse-invocation-app)：逆呼び出し機能を使用する。
