Skip to main content
⚠️ 本文档由 AI 自动翻译。如有任何不准确之处,请参考英文原版

Endpoint

本文档以 Neko Cat 项目为例,介绍插件中 Endpoint 的结构。Endpoint 是插件暴露的 HTTP 接口,可用于与外部系统集成。完整的插件代码请参考 GitHub 仓库

分组定义

Endpoint 分组是多个 Endpoint 的集合。在 Dify 插件中创建新的 Endpoint 时,你可能需要填写以下配置。
Endpoint 分组是多个 Endpoint 的集合
除了 Endpoint Name 之外,你可以通过编写分组的配置信息来添加新的表单项。点击保存后,你可以看到它包含的多个接口,这些接口将使用相同的配置信息。

结构

  • settings (map[string] ProviderConfig):Endpoint 配置定义。
  • endpoints (list[string],必填):指向具体的 endpoint 接口定义。
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):接口方法,仅支持 HEADGETPOSTPUTDELETEOPTIONS
  • extra (object):基本详情之外的配置信息。
    • python (object)
      • source (string):实现此接口的源代码。
path: "/duck/<app_id>"
method: "GET"
extra:
  python:
    source: "endpoints/duck.py"

接口实现

你需要实现一个继承自 dify_plugin.Endpoint 的子类,并实现 _invoke 方法。
  • 输入参数
    • r (Request):来自 werkzeugRequest 对象。
    • values (Mapping):从路径解析的路径参数。
    • settings (Mapping):此 Endpoint 的配置信息。
  • 返回
    • 来自 werkzeugResponse 对象,支持流式响应。
    • 不支持直接返回字符串。
示例代码:
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 回调或为其他系统提供连接接口。
如果你正在学习插件开发,建议先阅读插件开发入门开发者速查表

相关资源


Edit this page | Report an issue