HTTP 触发器和路由
JavaScript 函数的 HTTP 触发器行为,涵盖输入源、路径参数、身份验证作用域、有效负载限制以及调用已部署的触发器。
声明 method 和 path 的 JavaScript 函数将公开为 HTTP 端点。正因如此,函数才可用作编码应用程序的后端:应用程序调用端点,而函数则保存永远不会到达浏览器的凭据和业务规则。
export default defineFunction({
name: "get-order",
method: "GET",
path: "/orders/:id",
input: defineSchema<{ id: string }>(),
handler: async (input, ctx) => fetchOrder(input.id),
});
export default defineFunction({
name: "get-order",
method: "GET",
path: "/orders/:id",
input: defineSchema<{ id: string }>(),
handler: async (input, ctx) => fetchOrder(input.id),
});
支持的方法包括:
GETPOSTPUTPATCHDELETE
输入的来源
| 方法 | 请求将数据读取为输入 |
|---|---|
GET | 查询字符串 |
POST、PUT、PATCH、DELETE | JSON 请求正文 |
路径参数也会合并,因此 /orders/:id 提供 id 以及输入的其余部分。必须在输入类型中声明每个路径参数:派生架构是关闭的,因此未声明的架构会作为未知属性而拒绝。
路径参数会合并到正文下方,因此以相同名称的正文字段为准。不同名称可以避免静默覆盖。
路径参数
| 模式 | 匹配项 |
|---|---|
:param | 仅有一个段 — /users/:id 与 /users/42 匹配 |
:param{regex} | 一个段,受限 — /users/:id{[0-9]+} |
:param? | 段,或不返回任何内容 — /list/:filter? 匹配 /list 和 /list/open |
* | 结尾的全局包,包括裸前缀 |
ctx.params 上的值也以字符串形式提供,按名称键入。无论声明顺序如何,更具体的路由优先,因此文本 /users/me 优先于 /users/:id。本地 serve 中与部署后的路由行为相同。
调用已部署的触发器
发布并部署该函数后,其 path 将成为 Orchestrator HTTP 触发器的缩略名,该触发器通过路由匹配解析传入请求。调用者发送持有者令牌;平台将调用者的身份作为ctx.user传递给函数。
已部署的触发器以包为前缀的名称注册:包orders-functions中名为get-order函数注册为orders-functions_get-order 。按名称解析函数需要使用带前缀的形式。
在编码应用程序中,使用UiPath TypeScript SDK中的Functions服务,而不要手动构建 URL。
通过 SDK 的 Functions.invoke() 调用函数时,路径参数不会替换到 URL 中 — 声明的缩略名按书面形式发送,值作为查询参数或在正文中传播。处理程序仍会收到正确的输入,但 ctx.params 包含文本模式,并且受正则表达式约束的参数将不匹配。解析路径需要在调用者中构建 URL。
身份验证
使用来自外部应用程序的持有者令牌对调用者进行身份验证。令牌需要的作用域取决于调用者的运行位置。
已部署的编码 App会请求在其外部应用程序中注册的作用域,平台会在部署时将其注入到应用程序中。向函数调用者所需的 Orchestrator 作用域注册应用程序,例如:
uip admin external-apps create "My App" \
--non-confidential \
--redirect-uri "https://<org>.uipath.host/my-app" \
--user-scope "OR.Execution,OR.Folders"
uip admin external-apps create "My App" \
--non-confidential \
--redirect-uri "https://<org>.uipath.host/my-app" \
--user-scope "OR.Execution,OR.Folders"
如果应用程序启动作业或读取其结果,则也需要 OR.Jobs。
当您在本地运行同一个应用程序时,其作用域字符串来自uipath.json ,您也可以在其中请求OR.Default — 此作用域使 Orchestrator 应用调用者的文件夹和租户角色分配:
openid profile email offline_access OR.Default OR.Execution OR.Folders
openid profile email offline_access OR.Default OR.Execution OR.Folders
无法将 OR.Default 添加到外部应用程序注册中; API 将其作为未知作用域而拒绝。因此,通过 uipath.json 本地运行的应用程序可使用此功能,但已部署的编码应用程序则不可用。
有效负载限制
HTTP 触发器将请求作为作业参数传递,因此请求和响应都受到限制。
| 方向 | 上限 | 已超出限制 |
|---|---|---|
| 请求 | 10,000 个序列化输入字符 | 500,包含 errorCode 4801 和消息 JobArguments length should be less than 10000 characters |
| 响应 | 大约 512 KB | 200 正文为空,并且没有错误 |
空响应是设计的依据:状态显示成功,但没有任何关于丢失的报告。当有效负载可能超过任一限制时,请改为将函数作为作业调用——作业将大型输入和输出作为附件包含在内。请参阅调用函数。
返回引用而非数据本身(存储桶路径或调用者单独获取的标识符),可防止设计受到限制。