集成第三方 API
通过 API,可以读取外部系统的数据或调用它的业务能力。在 Zion 中配置好一个 API 之后,它的入参和响应结构会成为可绑定的数据,同一个 API 可以在页面、行为流和 AI Agent 中反复使用。
API 的组成
配置一个 API 之前,先了解它由哪几部分组成。这几个概念贯穿整个配置流程:
| 概念 | 说明 |
|---|---|
| 集合 | API 的分组。每个项目至少有一个「默认」集合,同一集合内的 API 共享集合变量 |
| 集合变量 | 集合级别的公共取值,例如接口的基础地址、版本号。集合内所有 API 都能绑定它 |
| 输入 | 这个 API 要求传入的参数。在页面、行为流或 Agent 里调用它时,只需要填输入,不接触请求细节 |
| 请求 | 实际发出的 HTTP 请求:方法、URL、路径参数、查询参数、请求头、请求体 |
| 响应 | 按状态码分组的响应结构。每个「响应状态」有自己的状态码范围和响应体类型 |
| 设置 | 目前只有分页设置 |
输入和请求是两层:先在 输入 里声明调用这个 API 要传哪些数据,再在 请求 里把它们绑定到具体的查询参数、请求头或请求体字段上。之后在页面、行为流或 Agent 里调用时,只需要填这些输入——接口地址怎么拼、每个值放在哪里,都留在 API 内部。
开始前
准备第三方服务提供的接口文档,并确认以下信息:
- 请求方法和完整地址
- 路径参数、查询参数、请求头和请求体
- 必填参数、数据类型和示例值
- 成功与失败的响应示例
- 身份验证方式
如果请求需要不能暴露给客户端的 API Key、Token 或私钥,请从行为流调用该 API,并通过 Secret 绑定凭证。不要把敏感凭证绑定到页面或前端行为——这些取值会随前端代码下发。
集合配置
在 API 列表点击 集合管理 打开集合弹窗。

集合用来给 API 分组,并承载一组公共变量:
- 创建集合、重命名、填写描述。名为「默认」的集合是内置的,不能改名也不能删除。
- 变量 表里定义集合变量,每个变量有名称、类型和取值。集合内的任意 API 都可以在数据绑定里通过 当前 API → 集合变量 引用它。
最常见的用法是把接口的基础地址定义成集合变量,让同一批 API 共用;换环境时只改一处。
删除集合时,如果集合内还有 API,需要选择:
- 删除集合和其中的 API:需要输入集合名称确认。
- 仅删除集合:把其中的 API 转移到另一个集合。如果目标集合已存在同名的集合变量,转移会失败并提示冲突的变量名。
在 API 详情页标题旁的 ⋯ 菜单里,可以复制 API 的 ID、把 API 移动到集合,或创建副本。
配置 API
新建 API
打开顶部的 行为,进入 API,点击 新建。

填写三项内容:
- 名称:便于识别的名称,后续在数据源、行为流节点和 Agent 工具中都用它来选择。
- 集合:把 API 放进哪个集合。可以在下拉框底部直接新建集合。
- 可作为数据源使用:开启后,这个 API 才能被页面、列表等位置选为数据源。只用于提交数据、不需要在页面上展示结果的 API 可以关闭。这个开关随时可以在 API 详情页右上角改。
创建后进入 API 详情页,顶部是 输入 | 请求、响应、设置 四个标签页,标题旁的圆点标明当前是否已发布。
填写请求
在 请求 标签页选择请求方法(GET、POST、PUT、PATCH、DELETE),并在地址栏填写完整的 URL。

地址栏是一个整体输入框,填完后系统会自动把它拆成三部分,显示在下方的 参数 里:
| 拆分结果 | 来源 | 说明 |
|---|---|---|
| 基础 URL | 协议和域名 | 可以绑定集合变量,让同一集合的 API 共用一个地址 |
| 路径参数 | 用花括号写的路径片段,如 /tool/{project_id}/WEB | 只有花括号包起来的片段会成为可绑定的参数;固定的路径片段不出现在表里 |
| 查询参数 | ? 之后的键值对 | 每个参数一行,可以单独设置类型、是否必填和取值 |
除了 参数,还有两个位置:
- 请求头:添加请求头字段,配置方式与查询参数相同。
- 请求体:仅在 POST、PUT、PATCH 下出现。
请求体先选内容类型,再配置字段:
| 内容类型 | 用途 |
|---|---|
| none | 不发送请求体 |
| form-data | 表单,字段可以是文本,也可以是图片、文件等媒体类型 |
| x-www-form-urlencoded | URL 编码表单,字段只能是文本 |
| raw - JSON | JSON 对象,可以嵌套对象和列表 |
在 form-data / x-www-form-urlencoded 与 raw - JSON 之间切换会清空已配置的请求体,编辑器会先弹窗确认。在两种表单类型之间切换不会清空。
选择 raw - JSON 后可以逐个添加字段,也可以点 从 JSON 生成,把一段示例 JSON 直接转成请求体结构:

粘贴 JSON 后点击 合并,会先显示合并结果(绿色是新增的字段,红色是将被删除的字段),确认后才写入配置。JSON 里的取值会成为对应字段的默认值。

定义输入
切换到 输入 标签页,定义调用这个 API 时需要传入的数据。

每个输入有名称、类型、是否必填和默认值。只把每次调用会变化的数据定义为输入;固定不变的取值(例如接口版本号)直接写在请求里,或者放进集合变量。
输入的名称、类型一旦被页面、行为流或 Agent 引用,修改后需要同步检查所有调用方。
把输入绑定到请求参数
回到 请求 标签页,在参数的 值 一列点击,输入 / 打开数据绑定选择器,依次选择 当前 API → 输入,再选中要绑定的输入。

除了输入,同一个选择器里还可以选 当前 API → 集合变量(当前集合定义的变量)和 当前时间,以及全局数据、枚举和公式。基础 URL、路径参数、查询参数、请求头和请求体字段都支持这种绑定。
绑定成功后,地址栏里对应的位置会显示成一个变量标签,而不是字面量。
测试
点击右上角的 测试 打开测试面板。

面板分 输入 和 响应 两页:
- 在 输入 页为每个输入填写调试用的取值。填充上次数据 会把上一次测试填过的值填回来(同名且类型未变的才会填回)。
- 预览请求 显示这次请求最终会发出的方法、完整 URL、请求头和请求体,用来确认参数拼接是否符合预期。
- 点击 发送请求 真正发出请求。
如果这个 API 没有定义任何输入,打开面板时会直接发起请求。

响应 页显示状态码、耗时、内容类型和响应体。请求由服务端发出,因此这里能测通的接口,运行时也能调通。
把响应结果写入响应结构
测试拿到结果后,点击 应用到响应,把这段真实响应转成 API 的响应体结构。

左侧是这次返回的 JSON,右侧是解析出的对象。选择 目标响应状态,然后:
- 合并:在现有结构上追加新字段,保留已有字段和已经被引用的绑定。合并前会显示新增和删除的字段供确认。
- 覆盖:用解析出的结构完全替换目标状态的响应体。
如果目标响应状态当前返回的是文本、数字这类基础类型,没有可合并的字段,合并 会不可用,只能使用 覆盖。
也可以不测试,直接在 响应 标签页手工添加字段。
管理响应状态
一个 API 可以有多个响应状态,每个状态按 HTTP 状态码匹配,并各自拥有一套响应体结构。

点击 状态 旁的齿轮打开管理弹窗:

- 添加 一个新状态,名称只能包含字母、数字和下划线。
- 为状态添加状态码。状态码是三位数,首位为 1–5,可以用
X作通配符,例如2XX匹配所有 2 开头的状态码。同一个 API 内的状态码不能重复或互相覆盖。 - 一个状态可以有多个状态码;没有配置状态码的状态永远不会被匹配到。
- Fallback 是内置状态,不能删除也不需要配置状态码:所有状态码都没匹配上时,返回它。
响应体目前只支持 application/json。
读取结果时要先选响应状态再取数据,因此状态的划分应该和业务分支对应,例如把 2XX 和 4XX 分成两个状态,而不是把所有情况都塞进 Fallback。
发布
API 修改会自动保存,但需要发布后才会在运行环境生效。详情页标题旁显示 未发布 时,说明当前配置与线上不一致。
更新预览 和 同步变更 都会发布最新的 API、行为流和 AI Agent 等后端配置;更新预览还会同时更新前端预览内容。
修改已经被页面、行为流或 AI Agent 使用的输入和响应结构时,应同步检查所有调用方。
处理特殊字段(可选)
当字段的实际内容与 Zion 的数据类型不一致时,可以在字段上设置编码或解码方式。请求方向叫编码,响应方向叫解码。
| 方向 | 可选项 | 适用情况 |
|---|---|---|
| 请求(编码) | 媒体转 URL | 把 Zion 的媒体数据转成 URL 后发出 |
| 请求(编码) | 媒体转 Base64 | 把 Zion 的媒体数据转成 Base64 内容后发出 |
| 响应(解码) | URL 转媒体 | 响应字段是图片等媒体文件的 URL,需要转成 Zion 媒体数据 |
| 响应(解码) | Base64 转媒体 | 响应字段是 Base64 媒体内容,需要解析成 Zion 媒体数据 |
| 响应(解码) | 字符串转 JSON | 响应字段是被转义的 JSON 字符串,需要解析成对象或列表 |
媒体相关的选项只在字段类型是媒体类型时出现;字符串转 JSON 只在响应侧的对象字段上出现。
例如接口返回:
{
"profile": "{\"name\":\"Ada\",\"level\":3}"
}把 profile 设为对象类型并打开 字符串转 JSON 后,就可以继续绑定其中的 name 和 level。
配置分页(可选)
如果这个 API 返回的是分页列表,切换到 设置 标签页开启 分页。

开启后会自动生成两个系统输入:
| 系统输入 | 用途 |
|---|---|
| 系统页码 | 起始页码。绑定到列表组件后,翻页时由系统自动计算并传入 |
| 系统每页条数 | 单页数据条数。翻页时由系统自动传入 |
把这两个输入绑定到接口自己的分页参数上(例如 page 和 pageSize),前端列表就可以直接使用「加载更多」实现自动翻页。
系统输入不能改名、改类型或删除,关闭分页开关即可移除。如果已有输入与系统输入重名,开关无法打开,需要先重命名。
分页配置同样属于 API 配置,改完后需要重新发布一次才会在运行环境生效。
导入 API
如果第三方服务提供了 OpenAPI 文档,或者你手上已经有一条现成的 cURL 命令,可以在 API 列表中点击 导入,由平台自动生成 API 配置,不必逐个字段手工填写。
| 导入方式 | 适用情况 | 一次导入的结果 |
|---|---|---|
| OpenAPI | 第三方提供了 .json 或 .yaml 格式的接口文档 | 一批 API,可以只勾选需要的接口 |
| cURL | 只有一条 cURL 命令,例如在浏览器开发者工具里用 Copy as cURL 复制出来的那一串 | 一个 API |
两种导入器都只支持各自格式的一个子集,而且不受支持的写法有两种截然不同的下场:不合法的写法会让导入直接失败,且提示信息中不会指出具体位置;合法但不受支持的写法不会报错,其中一部分会退化——相关内容在导入结果中被静默丢弃或降级。下面按这两类分别列出它们的规则,你也可以直接跳到用 AI 检查,让 AI 替你走查一遍。
导入只生成请求和(OpenAPI 情况下的)响应结构,不会自动定义输入。导入完成后,请按上文的步骤逐个测试接口,确认请求和响应结构与第三方接口文档一致,把需要动态传值的参数改绑到输入上,再发布。
导入 OpenAPI 文档
在 API 列表中点击 导入,选择 OpenAPI,上传 .json 或 .yaml 文件。

解析完成后进入确认页:
- 选择导入到哪个 集合(见集合配置)。
- 如果文档里的服务器地址被解析成了 集合变量,确认页会列出这些变量,可以在这里修改取值。如果目标集合已经存在同名的集合变量,导入 按钮不可点击,需要换一个集合或先处理重名。
- 勾选要导入的接口,逐个确认名称,并决定每个 API 是否 可作为数据源使用。名称为空的接口会阻止导入。
导入前请先确认:文件是 .json 或 .yaml(暂不支持 .yml),文档是 OpenAPI 3.x(暂不支持 Swagger 2.0),并且包含 info.title。
会导致导入失败的写法
以下写法只要出现一处,整份文档会导入失败,不会创建任何 API:
| 写法 | 说明 |
|---|---|
head、options、trace 操作 | 导入器不支持这三种请求方法 |
参数缺少 schema | 常见于用 content: 描述的参数,以及参数整体引用 #/components/parameters/... 的写法 |
| 参数是数组或对象 | Path、Query、Headers 参数的 schema.type 只能是 string、integer、number 或 boolean |
参数没有写 type | 只写 $ref、allOf、enum 或 example 而没有 type 的参数无法识别 |
缺少 info 或 info.title | 导入器用文档标题命名生成的 API 集合 |
| 文档是 Swagger 2.0 | 包含 swagger: "2.0"、definitions、in: body 或 host 的文档需要先转换为 OpenAPI 3 |
in: cookie 的参数会被忽略,不影响导入。
不会报错,但内容会丢失的情况
以下情况不会导致导入失败,但相关内容不会出现在导入结果中,需要导入后手动补齐:
| 情况 | 导入后的问题 |
|---|---|
Content-Type 不是 application/json、application/x-www-form-urlencoded 或 multipart/form-data | 该响应将没有结构;如果是 POST、PUT、PATCH 接口,整个接口会被跳过 |
| 一个接口声明了多个受支持的 Content-Type | 会按类型拆成多个重复的 API |
$ref 指向外部文件、#/definitions/ 或 #/components/responses 等位置 | 无法解析,对应字段或响应会丢失。导入器只支持 #/components/schemas/XXX 这种写法 |
字段没有写 type,或 type: array 没有 items | 该字段会被丢弃 |
allOf、oneOf、anyOf 包含两个或更多子结构 | 如果只有一个子结构时正常导入;否则整体退化为 JSON 数据,对象结构丢失。 |
| 公共参数写在 path 层级 | 不会合并到接口中,需要写进每个操作内部 |
additionalProperties | 不会展开,只识别显式声明的 properties |
securitySchemes、security | 不会生成鉴权参数,需要导入后自行添加 API Key、Token 等 |
servers 中的变量没有 default | 地址会保留花括号,导入后需要手动修改 |
导入结果中的 API 名称取自 summary,不使用 operationId。summary 为空时会自动拼接方法和路径,建议导入前补全 summary,或导入后重命名。
导入 cURL 命令
cURL 命令是在终端里发起一次 HTTP 请求的写法,以 curl 开头,后面跟请求地址和一串以短横线开头的选项。最常见的来源是浏览器开发者工具:在 Network 面板里右键某个请求,选择 Copy as cURL,复制出来的那一整段就是。
在 API 列表中点击 导入,选择 cURL,把这段命令粘贴进来后点击 继续。一次导入生成一个 API 配置。

解析成功后进入确认页,显示解析出的请求方法和地址。cURL 命令里没有接口名称,因此必须先填一个 名称,导入 按钮才可点击;同时可以选择目标集合,并决定这个 API 是否 可作为数据源使用(默认关闭)。

命令为空时 继续 按钮不可点击,除此之外编辑器不做本地校验,命令是否可用由服务端解析时给出结果。解析失败时,错误页上的 用 AI 分析错误原因 会跳转到下面的用 AI 检查。
命令为空时 继续 按钮不可点击,除此之外编辑器不做本地校验,命令是否可用由服务端解析时给出结果。
会被读取的选项
导入器只读取下面这些选项,其余一律忽略:
| 选项 | 作用 |
|---|---|
-X、--request | 请求方法。省略时,带 Body 的命令按 POST 处理,否则按 GET |
-H、--header | 请求头,可以重复出现 |
-d、--data、--data-raw、--data-binary、--data-ascii | 请求 Body |
--data-urlencode | 表单 Body,可以重复出现,多个值用 & 连接,并强制按 application/x-www-form-urlencoded 处理 |
-F、--form | multipart 表单字段,可以重复出现 |
--url | 请求地址,用于命令里没有直接写出地址的情况 |
-F 和 --data-urlencode 会把紧随其后的参数当成自己的取值,因此请求地址不能紧跟在它们后面,否则地址会被吞掉,导入报 url cannot be null 失败。把地址写在这些选项之前,或者用 --url 显式指定(curl -F 'a=1' --url https://api.example.com/x),都可以避免。其余选项写在地址前后都可以。
上表以外的选项一律被静默丢弃,不影响导入,例如 -u、--user、-b、--cookie、-L、--location、--compressed、-k、-o、--max-time、--retry。取值本身是地址的选项会连同取值一起丢弃,不会被误当成请求地址,例如 -x http://127.0.0.1:8080 和 --referer、--resolve、--connect-to、-T。
因此命令里的基本认证和 Cookie 不会变成 API 配置,需要这两者时请在导入后手动补上对应的请求头。
会导致导入失败的 cURL 写法
| 情况 | 说明 |
|---|---|
| 完全没有写请求地址 | 例如地址被 -F 吞掉,或者命令里只有选项。导入报 url cannot be null |
请求方法是 HEAD 或 OPTIONS | 导入器不支持这两种方法 |
-X 的值不是标准方法名 | 只识别 GET、POST、PUT、PATCH、DELETE,大小写不限;自定义动词会失败 |
带 -d Body 时声明了其他 Content-Type | content-type 请求头只支持 application/json、application/x-www-form-urlencoded 和 multipart/form-data,其他值一律失败。带 -F 时该请求头不参与判断,不会失败 |
| Body 不是合法 JSON | 没有写 content-type 请求头时按 application/json 处理,所以 -d 'grant_type=client_credentials' 这种表单写法会在这里失败,需要补上 -H 'content-type: application/x-www-form-urlencoded'。-d @payload.json 这种从文件读取的写法同样失败,文件名会被当成 Body 本身 |
表单 Body 里有孤立的 % | 表单 Body 的每个键和值都会做一次 URL 解码,-d 'discount=50%' 会报 Incomplete trailing escape (%) pattern。请写成 discount=50%25 |
不会报错,但会丢失内容的 cURL 写法
| 情况 | 导入后的问题 |
|---|---|
| 同时写了多个 Body 选项 | 按 -d、--data-raw、--data-binary、--data-ascii 的顺序取第一个出现的,与书写顺序无关;都用 -d 时取第一个。curl 本身会把它们用 & 拼接 |
-d 和 --data-urlencode 同时出现 | --data-urlencode 会整体覆盖 -d 的 Body |
-d 和 -F 同时出现 | 只要有 -F,-d 的 Body 就会被完全丢弃 |
| URL 中的路径 | 路径固定在地址里,不会变成可绑定的 Path 参数,需要导入后手动改 |
地址不是 http:// 或 https:// | ftp://a.com/f 会导入成地址 ftp://a.com;省略协议的 api.example.com 会导入成 null://null。都不报错,但配置不可用 |
| 同名的 Query 参数 | 只保留最后一个,并且 Query 参数的顺序可能与 cURL 命令中不同 |
GET、DELETE 上的 -d | 这两种方法不携带 Body,数据会被丢弃 |
同名的 -F 字段 | 只保留最后一个。URL 编码 Body 中的同名字段则会各自保留 |
值是 JSON 的 -F 字段 | 表单字段只能是文本或文件,JSON 内容会作为字符串保留,不会展开成对象 |
表单 Body 里的 + | URL 解码会把 + 变成空格,需要写成 %2B 才能保留 |
| 响应结构 | cURL 命令里没有响应信息,导入只生成请求配置 |
导入得到的 Query 参数、Headers 参数和文本表单字段都是可选的字符串类型,cURL 命令里的取值会成为它们的默认值,请按第三方接口文档调整类型和必填项。-F 'file=@/tmp/pic.png' 这类上传字段是例外,它会按文件扩展名识别为图片、视频或通用文件,且是必填且未绑定的,导入后必须手动绑定取值。
cURL 命令中的 Authorization、Cookie 等请求头会连同取值一起写进 API 配置。如果其中包含真实凭证,请在导入后改为通过 Secret 绑定,并从行为流调用该 API——凭证只在服务端解析,从页面或前端行为调用不适用。浏览器复制出来的 cURL 命令通常还带有 sec-ch-ua、user-agent 等与接口无关的请求头,建议一并删除。
用 AI 检查
OpenAPI 文档或 cURL 命令较长时,逐条对照上面的限制并不现实。可以把下面这段提示词连同你的 OpenAPI 文件或 cURL 命令一起发给任意一个 AI 对话工具,让它替你走查一遍,指出会导致失败的位置和修改方法。提示词同时覆盖两种导入方式,AI 会先判断你给的是哪一种,再按对应的规则检查。
内容会上传到第三方 AI 服务。发送前请确认其中不含内网地址、密钥等敏感信息,并把 Token、Cookie 等真实凭证替换成占位符。
我准备把一份接口定义导入到一个低代码平台,它可能是一份 OpenAPI 文档,也可能是一条 cURL 命令。
这个平台的导入器只支持这两种格式各自的一个子集,一旦出现它不支持的写法,导入就会失败,
而且平台不会告诉我具体是哪里出了问题。
请你把自己当作这个导入器,先判断我给的是 OpenAPI 文档还是 cURL 命令,
然后只按下面对应的那一节规则,对我的内容完整走查一遍,
判断它能否被导入,如果不能,指出具体是哪一处、以及应该怎么改。
我会把 OpenAPI 文件(.json 或 .yaml)作为附件上传,或者把 OpenAPI 内容、cURL 命令
粘贴在这条消息后面。如果我还没有提供,请先向我索要,不要凭空推测。
# 第一部分:导入 OpenAPI 文档时适用的规则
请只依据这里的描述判断,不要依据 OpenAPI 官方规范判断。
这个导入器并不是标准的 OpenAPI 解析器,它只支持规范中的一个子集。
它会依次遍历 paths、每个 operation、参数、requestBody 和 responses,
整个过程中没有任何错误捕获,因此只要有一处出错,整份文档就会导入失败,一个接口都不会进来。
## 会导致整份导入失败的情况
以下任意一条被命中,所有接口都导不进来。按导入器的实际执行顺序排列,越靠前的越先被触发:
- 文件不是合法的 JSON 或 YAML。平台只接受 .json 和 .yaml 两种后缀,.yml 无法上传。
- 文档中出现了 head、options 或 trace 操作,哪怕只有一个。
- in: query、in: path 或 in: header 的参数缺少 schema 节点。常见于用 content: 描述的参数、
Swagger 2 风格的 "- name: x, in: query, type: string",以及参数整体引用
"#/components/parameters/..." 的写法。
- 上述参数的 schema.type 不是 string、integer、number 或 boolean 之一。
数组型的 query 参数(type: array)是最常见的原因,其次是 type: object,
以及只写了 $ref、allOf、enum 或 example 而没有写 type 的参数。
- 文档缺少 info,或者 info.title 为空。这一步在最后执行,前面都通过了才会暴露出来。
- 文档实际上是 Swagger 2.0,即包含 swagger: "2.0"、definitions、in: body 或 host/basePath。
导入器不会提示版本不支持,通常表现为参数缺少 schema 而崩溃,或者导入成功却一个接口都没有。
in: cookie 的参数会被安全地忽略,不会导致失败。
## 不会报错,但会静默丢失内容的限制
- 请求体和响应体的 Content-Type 只支持 application/json、application/x-www-form-urlencoded
和 multipart/form-data。对于 POST、PUT、PATCH 接口,如果一个受支持的类型都没有,
这个接口会被完全跳过,而且不会有任何提示。
- 同一个 operation 如果写了多个受支持的 Content-Type,会被拆成多个重复的 API。
- $ref 只支持 "#/components/schemas/XXX" 这一种写法。外部文件引用、"#/definitions/",
以及指向 "#/components/responses"、"parameters"、"requestBodies" 的引用都无法解析。
- schema 必须显式写出 type,否则该属性会被丢弃;type: array 还必须提供 items。
- allOf、oneOf、anyOf 只有一个子 schema 时会被正常展开,
但有两个或更多子 schema 时会整体退化成 JSON 数据,对象结构全部丢失。
- additionalProperties 不会展开;GET 和 DELETE 上的 requestBody 会被忽略;
path item 级别的公共 parameters 不会被合并,必须写进每个 operation 内部。
- securitySchemes 和 security 完全不处理,enum、nullable、pattern、最大最小值等约束一律忽略。
- API 名称取自 summary,不使用 operationId;summary 为空时会自动拼成 "方法_路径_ContentType"。
- servers[].url 中的变量会用 server variable 的 default 替换,
如果某个变量没有写 default,url 会原样保留花括号,导入后无法调用。
- 默认值只保留标量类型。multipart/form-data 中的文件字段需要同时满足 type: string 和
format: binary,并在 encoding 的 contentType 中声明 image/* 或 video/*,
才会被识别为图片或视频。
# 第二部分:导入 cURL 命令时适用的规则
请只依据这里的描述判断,不要依据 curl 的实际行为判断。
导入器不会真的执行这条命令,它只是把命令拆成参数,从中取出请求地址、方法、请求头和请求体,
生成一个 API 配置。整个过程同样没有错误捕获,只要有一处不支持,整条命令就导不进来。
## 只有这些选项会被读取
- -X 和 --request 决定请求方法。没有写时,带请求体的命令按 POST 处理,否则按 GET 处理。
- -H 和 --header 是请求头,可以重复出现,每个都会变成一个请求头参数。
- -d、--data、--data-raw、--data-binary 和 --data-ascii 是请求体。
- --data-urlencode 是表单请求体,可以重复出现,多个值会用 & 连接起来,
并且会强制把请求当作 application/x-www-form-urlencoded 处理。
- -F 和 --form 是 multipart 表单字段,可以重复出现。
- --url 用来指定请求地址,适用于命令里没有直接写出地址的情况。
-F 和 --data-urlencode 会把紧随其后的参数当成自己的取值,所以请求地址不能紧跟在它们
后面,否则地址会被吞掉,导入报 "url cannot be null" 失败。判断时看的是地址前面紧挨着
的那个选项,而不是地址在不在命令末尾:curl -F 'a=1' https://x -F 'b=2' 同样会失败。
把地址写在这些选项之前,或者用 --url 显式指定,都不会有这个问题。
其余选项写在地址前后都可以。
上面没列到的选项一律被静默丢弃,不影响导入,例如 -u、--user、-b、--cookie、-L、
--location、--compressed、-k、-o、--max-time、--retry。取值本身是地址的选项会连同
取值一起丢弃,不会被误当成请求地址,例如 -x、--proxy、--referer、--resolve、
--connect-to、-T、--upload-file。所以命令里的基本认证和 Cookie 都不会变成 API 配置。
## 会导致导入失败的情况
- 命令里完全没有可以当作请求地址的参数,导入报 "url cannot be null"。
最常见的原因是地址被写在它前面的 -F 或 --data-urlencode 吞掉了。
注意:地址写成 ftp://、ws:// 或省略协议的 api.example.com 并不会失败,
它们会导入成一个不可用的地址,属于第三类问题。
- 请求方法是 HEAD 或 OPTIONS。
- -X 的值不是 GET、POST、PUT、PATCH、DELETE 之一,例如写成某个自定义动词。
大小写不影响,写成小写的 post 可以正常导入。
- 命令用 -d 带请求体,但 content-type 请求头声明的类型不是 application/json、
application/x-www-form-urlencoded、multipart/form-data 三者之一。
命令里有 -F 时这个请求头不参与判断,写成 text/plain 也不会失败。
- 按 application/json 处理时,-d 的内容不是合法的 JSON。
没有写 content-type 请求头时就是按 application/json 处理,所以
-d 'grant_type=client_credentials' 这种表单写法会在这里失败,
需要补上 -H 'content-type: application/x-www-form-urlencoded'。
-d @payload.json 这种从文件读取请求体的写法也会失败,因为文件名会被当作请求体本身。
- 表单请求体(URL 编码或 --data-urlencode)里出现孤立的百分号。
每个键和值都会做一次 URL 解码,-d 'discount=50%' 会报
"Incomplete trailing escape (%) pattern",需要写成 discount=50%25。
## 不会报错,但会静默丢失内容的限制
- 同时写了多个请求体选项时,按 -d、--data-raw、--data-binary、--data-ascii 的顺序
取第一个出现的,与书写顺序无关;都用 -d 时取第一个。
- -d 和 --data-urlencode 同时出现时,--data-urlencode 会整体覆盖 -d 的请求体。
- 只要命令里有 -F,-d 的请求体就会被完全丢弃。
- 地址写成 ftp://、ws:// 或省略协议的形式不会报错,但会导入成不可用的地址:
ftp://a.com/f 变成 ftp://a.com,api.example.com 变成字符串 null://null。
- URL 中的路径会被固定在地址里,不会变成可绑定的 Path 参数。
- 同名的 Query 参数只保留最后一个,Query 参数的顺序也可能发生变化。
- GET 和 DELETE 不携带请求体,这两种方法上的 -d 会被丢弃。
- 同名的 -F 字段只保留最后一个,而 URL 编码请求体中的同名字段会各自保留。
- URL 解码会把表单请求体里的 + 变成空格,要保留加号必须写成 %2B。
- -F 的值只能是文本或文件,即使写的是一段 JSON,也只会作为字符串保留,不会展开成对象。
- Query、请求头和文本表单字段一律生成为可选的字符串类型,命令里的取值成为它们的默认值。
- -F 中写成 name=@文件路径 的字段是例外,它会按文件扩展名识别为图片、视频或通用文件,
并且是必填且未绑定的,导入后必须手工绑定取值。
- cURL 命令里没有响应信息,导入只会生成请求配置,响应结构需要导入后测试一次才能得到。
# 输出要求
能用表格表达的内容一律用表格,不要写成大段文字,不要寒暄,也不要在结尾加总结段。全文控制在 25 行以内。
一、结论:先说明我给的是 OpenAPI 文档还是 cURL 命令,
再用一句话说清楚是「会导入失败,原因是……」还是「可以导入,但会丢失……」。
二、必须修改的问题:把命中对应那一节「会导致导入失败」的地方全部列出来。
只列第一个是不够的,我改完之后还会再次失败。
表格包含五列:位置、行号、违反的限制、具体问题、修改方法。
位置一列,OpenAPI 文档写成 paths./users.get.parameters[1] 这样的路径,
cURL 命令写成「-X 后面的取值」这样的描述,行号一列在 cURL 只有一行时填「-」。
如果一条都没有命中,请写明「未发现会导致失败的问题」。
对于 OpenAPI 文档,再按文件后缀不对、上传中断、文档是 Swagger 2.0、
存在上述规则未覆盖的写法这个顺序推测原因,用表格呈现,包含可疑点、判断理由和验证方法三列。
三、建议修改的问题:从对应那一节「不会报错但会丢失内容」的限制中挑出真正影响可用性的,
最多五行,琐碎的不必提。表格包含五列:位置、违反的限制、会丢失什么、修改方法、是否必须改。
四、安全提醒:如果内容里带有 Authorization、Cookie、api-key 之类的真实凭证,
请单独提醒我这些取值会被原样写进配置,并建议改用平台的 Secret 绑定。
如果没有,这一节不要输出。
# 注意事项
- 只依据上面描述的导入器行为判断。一份完全符合 OpenAPI 3.0 规范的文档、
一条在终端里能跑通的 curl 命令,同样可能失败,
例如文档只是多带了一个 head 操作,或者命令的表单请求体里有一个孤立的百分号。
- 不要在输出中用编号或代号指代限制条目,比如「规则 A4」「第三条」这类写法。
「违反的限制」一列要用一句我能直接看懂的话说明该限制本身是什么。
- 语言要流畅、清晰,像一位同事在向我解释问题,而不是罗列关键词。
每个单元格都要是完整、通顺的句子,避免使用箭头、省略号和缩写。
- 「修改方法」一列要写成我可以直接照做的一句话,写明具体的字段名或选项名和目标值。
- 如果命令里有 $'...' 片段,请说明它有多长,并提醒我这种写法本身就不可靠,
建议无论长短都改成普通单引号。不要给出一个精确的字符数阈值,它并不存在。
- 如果某种写法在这个导入器里根本无法表达(例如数组型的 query 参数),
就直接说明需要导入后在平台里手工添加,不要编造会改变接口语义的替代写法。
- 用中文回答。使用 API
配置好的 API 可以在四个地方使用。这四处都只需要为 API 的 输入 绑定取值,不用关心请求怎么拼。
作为数据源
开启了 可作为数据源使用 的 API 可以作为页面、列表等位置的数据源。选择目标 API 后配置:
- 列表字段:从响应结构中选出作为列表数据的数组字段。选择时先选响应状态,再向下选到具体字段。
- 唯一标识字段:数组元素中用来唯一标识一条数据的字段。
- 显示字段:在选择器一类组件上展示哪个字段。
- 输入:为 API 的每个输入绑定取值。带默认值的输入会有标记。
如果 API 开启了分页,列表可以打开 加载更多,并设置 每页条数;此时系统页码和系统每页条数由列表自动传入,不再出现在需要手工绑定的输入里。没有开启分页的 API 无法打开加载更多。
作为前端行为
从页面或组件调用 API:
- 在触发器中添加 调用 API。
- 选择目标 API 并为它的输入绑定取值。
- 在 成功时 中通过
上下文 → 行为结果读取响应。 - 在 失败时 中显示错误提示或执行其他错误处理。
从前端调用时,请求头和参数里的固定取值会随前端代码下发。需要凭证的接口请改为在行为流中调用。
在行为流中使用
在行为流中添加 API 节点,选择目标 API 并绑定输入。后续节点可以按响应状态读取该节点的结果;失败分支可以记录错误、重试或执行补偿逻辑。
API 节点从发起请求到接收完整响应的时长上限为 60 秒。其他超时规则请参阅搭建行为流。
作为 AI Agent 工具
在 AI Agent 的工具中添加 API,并填写清晰的工具名称和用途说明。工具配置分两部分:
- 输入:为每个输入写说明,帮助模型判断该传什么。
- 输出:按响应状态分别描述返回内容,让模型知道每种状态代表什么、可以从中读出哪些字段。
模型会根据对话内容判断是否调用该工具。涉及创建订单、修改数据等必须执行的业务步骤时,不应依赖模型自主选择工具;请将固定步骤放入行为流,并将该行为流作为工具。详见搭建 AI Agent。
常见问题
- 测试成功,调用时失败:检查 API 是否已发布、调用方绑定的输入类型是否与当前配置一致,以及必填输入是否有值。
- 响应字段无法绑定:确认响应状态的响应体结构里有这个字段。重新测试一次,用 应用到响应 合并或覆盖对应状态的结构。
- 返回内容进了 Fallback:说明实际状态码没有匹配上任何自定义状态。检查状态码配置,必要时用
2XX、4XX这类通配符覆盖整段范围。 - 改了响应结构后旧调用方报错:检查页面、行为流和 AI Agent 是否仍在引用已删除或已改类型的字段。
- 列表打不开「加载更多」:确认 API 在 设置 里开启了分页,并且系统页码和系统每页条数已经绑定到接口自己的分页参数上。
- 媒体或 JSON 字段解析失败:确认字段实际内容与所选的编码/解码方式一致。
- 请求超时:确认第三方接口能在限制时间内返回完整响应;耗时工作应改用第三方的异步接口,并通过后续查询或 Webhook 获取结果。