Files
dify-docs/plugin-dev-zh/0432-endpoint.mdx
2025-07-16 16:42:34 +08:00

126 lines
4.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
dimensions:
type:
primary: reference
detail: examples
level: intermediate
standard_title: Endpoint
language: zh
title: 彩虹猫 Endpoint
description: Author YeuolyAllen 本文档详细介绍了Dify插件中Endpoint的结构和实现方式以彩虹猫项目为例。内容包括如何定义Endpoint组、配置接口、实现_invoke方法以及处理请求和响应。文档详细解释了各种YAML配置字段的含义和使用方法。
---
本文将以[彩虹猫](/plugin-dev-zh/9231-extension-plugin)项目为例,说明插件内的 Endpoint 的结构。Endpoint是插件对外暴露的HTTP接口可用于与外部系统集成。完整的插件代码请参考 [GitHub 仓库](https://github.com/langgenius/dify-plugin-sdks/tree/main/python/examples/neko)。
### 组定义
一个 `Endpoint` 组是多个 `Endpoint` 的集合,在 `Dify` 插件内新建 `Endpoint` 时可能需要填写如下配置。
![](https://assets-docs.dify.ai/2024/11/763dbf86e4319591415dc5a1b6948ccb.png)
除了 `Endpoint Name` 外,你可以通过编写组的配置信息来添加新的表单项,点击保存后,你可以看到其中包含的多个接口,它们将使用相同的配置信息。
![](https://assets-docs.dify.ai/2024/11/b778b7093b7df0dc80a476c65ddcbe58.png)
#### **结构**
* `settings`(map\[string] [ProviderConfig](/plugin-dev-zh/0411-general-specifications#providerconfig) )Endpoint 配置定义
* `endpoints`(list\[string], required):指向具体的 `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):从 path 中解析到的路径参数
* `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 回调或提供接口给其他系统连接
如果您正在学习插件开发,建议先阅读[插件开发入门指南](/plugin-dev-zh/0211-getting-started-dify-tool)和[开发者速查表](/plugin-dev-zh/0131-cheatsheet)。
## 相关资源
- [插件开发基本概念](/plugin-dev-zh/0111-getting-started-dify-plugin) - 了解插件开发的整体架构
- [彩虹猫实例](/plugin-dev-zh/9231-extension-plugin) - 扩展插件开发示例
- [通用规范定义](/plugin-dev-zh/0411-general-specifications) - 了解 ProviderConfig 等通用结构
- [Slack 机器人插件开发示例](/plugin-dev-zh/0432-develop-a-slack-bot-plugin) - 另一个插件开发示例
- [插件开发入门指南](/plugin-dev-zh/0211-getting-started-dify-tool) - 从零开始开发插件
- [反向调用 Dify 服务](/plugin-dev-zh/9241-reverse-invocation) - 了解如何使用反向调用功能
{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}
---
[编辑此页面](https://github.com/langgenius/dify-docs/edit/main/plugin-dev-zh/0432-endpoint.mdx) | [提交问题](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml)