---
title: Endpoint
description: 'Author: Yeuoly，Allen'
---


{/* 
  贡献者注意:
  ----------------
  本文档为旧版文档，即将弃用。
  请勿对此版本进行更改。
  所有更新应指向新版本：
  /plugin-dev-zh/0432-endpoint
*/}

<Card title="本文档即将弃用" icon="circle-exclamation" href="/plugin-dev-zh/0432-endpoint">
  <p>作为我们文档重组的一部分，此页面正在逐步淘汰。</p>
  
  <p><u><b>点击此卡片</b></u>跳转到包含最新信息的更新版本。</p>
  
  <p>如果您在新的文档中发现任何差异或需要改进的地方，请使用页面底部的“报告问题”按钮。</p>
</Card>

本文将以[彩虹猫](../quick-start/develop-plugins/extension-plugin)项目为例，说明插件内的 Endpoint 的结构。完整的插件代码请参考 [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](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")
```

{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}

---

[编辑此页面](https://github.com/langgenius/dify-docs/edit/main/zh-hans/plugins/schema-definition/endpoint.mdx) | [提交问题](https://github.com/langgenius/dify-docs/issues/new?title=文档问题%3A%20&body=%23%23%20问题描述%0A%3C%21--%20请简要描述您发现的问题%20--%3E%0A%0A%23%23%20页面链接%0Ahttps%3A%2F%2Fgithub.com%2Flanggenius%2Fdify-docs%2Fblob%2Fmain%2Fzh-hans/plugins/schema-definition%2Fendpoint.mdx%0A%0A%23%23%20建议修改%0A%3C%21--%20如果有具体的修改建议，请在此说明%20--%3E%0A%0A%3C%21--%20感谢您对文档质量的关注！%20--%3E)

