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

Endpoint

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

分组定义

Endpoint 分组是多个 Endpoint 的集合。在 Dify 插件中创建新的 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