iii http worker:3 条命令把函数变成 REST 端点,零 Web 服务器依赖
2026/9/15 15:33:52 网站建设 项目流程

iii http worker:3 条命令把函数变成 REST 端点,零 Web 服务器依赖

【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii

iii http worker 把你的普通函数直接变成 REST 端点。不用引入 Express、FastAPI 之类的 web 框架,路由匹配、请求解析、响应序列化都是内置的,一行命令引入 worker,几行代码挂上触发器就能收工。

监听端口、绑定 host、跨域、超时这类服务器参数也不落在 worker 里,全部由 configuration worker 在运行时托管,想调整只改配置即可,worker 代码一行不用动。

3 条命令跑通一个 http 端点

从引入 worker 到 curl 命中,最短路径就是下面这一段:

# 引入内置的 http worker iii worker add http # 启动引擎(已在运行可跳过) iii --config config.yaml # 把含 http 触发器的 worker 注册进引擎 iii worker add ./my-worker # 直接调用暴露出来的端点 curl -X POST http://localhost:3111/math/add \ -H 'content-type: application/json' \ -d '{"a": 2, "b": 3}'

如果my-worker还不存在,先用脚手架命令iii worker init my-worker --language typescript生成一个,在里面写一个函数并挂上 http 触发器(写法见下文示例)。

请求命中后会拿到 200 状态码和{"c":5}的响应体,端点就算跑通了 ✅

看懂原理:请求到响应只有一条直线

核心链路就三步:函数 → 触发器 → HTTP 响应

可以类比餐厅的点单系统:触发器是贴在出餐口的"点菜单",上面写明方法加路径(例如 POST +/math/add);前台(引擎的 HTTP 服务器)每收到一个匹配的请求就"喊号"一次,把订单内容——请求的 body、headers、method 这些信息——交给对应的函数这位"厨师";厨师端出来的菜(函数的返回值)再被引擎原样打包,作为 HTTP 响应发回给调用方。

所以你要写的代码只有两件事:一个函数、一张挂在它身上的"点菜单"。监听、解析、序列化等传输层工作全部由引擎代劳。

核对关键配置字段

触发器配置核心只有 3 个必填字段,其余都是可选:

配置项必填说明
type: "http"声明触发器类型,引擎据此把匹配请求派发给对应函数
function_id要暴露的函数标识,例如http::add,触发器靠它和函数建立关联
api_path路由路径,原生支持/users/:id这样的路径参数
http_method绑定的请求方法,省略时默认 GET
condition_function_id前置校验函数 ID,正式函数执行前先跑它,适合做路由级检查

处理函数的返回值同样是三个字段,且都可省略:

返回字段默认值说明
status_code200响应状态码,出错场景(400、404 等)显式指定
body空对象响应体,按你设置的 Content-Type 序列化上线
headers响应头

最常见的 Node / TypeScript 写法,完整示例如下:

import { registerWorker } from "iii-sdk"; const url = process.env.III_URL; if (!url) throw new Error("III_URL must be set"); const worker = registerWorker(url, { workerName: "my-worker" }); worker.registerFunction("http::add", async (payload: { body: { a: number; b: number } }) => ({ status_code: 200, body: { c: payload.body.a + payload.body.b }, headers: { "Content-Type": "application/json" }, })); worker.registerTrigger({ type: "http", function_id: "http::add", config: { api_path: "/math/add", http_method: "POST" }, });

Python 与 Rust SDK 的契约完全一致,只是写法不同:Python 用register_functionregister_trigger传普通字典,Rust 用类型化构建器IIITrigger::Http(...).for_function(...),三种语言完整版见 docs/0-21-0/creating-workers/http.mdx。

处理常见踩坑点

端点 404:先核对方法是不是写错了

触发器里只填了api_path、却用非默认方法去调用,必然打不中(默认值见上表http_method一行)。涉及写数据的接口,务必在触发器配置里显式声明方法。

改端口:走 configuration worker

默认监听端口是 3111,即上文 curl 地址中的那个端口。改端口、加 CORS、调超时都不动 worker 定义,而是走 configuration worker 的运行时通道,改完即生效。这些值还会经过引擎的模板插值与类型强制,例如${HTTP_PORT:3111}会被强转为整数 3111 后生效,而不是字符串,相关断言可参考 engine/src/workers/configuration/store.rs。

响应状态码:字段名别写错

三个返回字段全部可省略,但注意状态码字段名是status_code,不是status——名字写错不会报错,只是响应永远走默认 200。字段定义见 engine/src/trigger_formats.rs ⚠️

再读一点

  • http worker 完整指南(路径模式、响应处理):docs/0-21-0/creating-workers/http.mdx
  • 默认端口 3111 与 CORS 等服务器参数来源:engine/worker-compose.yaml
  • 运行时配置机制说明:docs/using-iii/configuration.mdx

【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询