ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

iii http worker 实战:一个触发器,把函数变成 REST 端点(0.21.0)

iii http worker 实战:一个触发器,把函数变成 REST 端点(0.21.0) iii http worker 实战一个触发器把函数变成 REST 端点0.21.0【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii用 iii http workerworker 里注册的任意函数都能通过一条type: http触发器绑定到某个 HTTP 方法和路径上直接变成可调用的 REST 端点。不用写 Express 路由也不用起 FastAPI 实例。下面以 0.21.0 为例把一个加法函数暴露成端点把整条路径走通同时讲清默认端口 3111 的来由。 概念一条路由 一个函数 一个触发器在 iii 里触发器就是路由表中的一行映射请求进来先查哪个方法 哪个路径命中就去调这一行绑定的函数。所以把函数暴露成端点只需要两样东西一个可调用的函数加一个type: http的触发器用function_id指向它。函数入参是请求body、headers、method 等返回值就是响应。返回值有三个位置status_code变成状态码body变成响应体headers变成响应头http worker 照此组装应答。Python、Rust SDK 走的是同一份契约只是语法不同。引擎运行起来后所有 http 触发器都能在控制台的 Triggers 视图里看到右侧面板还能直接发请求测试。 最小路径四条命令上线一个端点装 http worker、启动引擎、脚手架建 worker写好代码后把目录挂进引擎iii worker add http iii --config config.yaml iii worker init my-worker --language typescript iii worker add ./my-worker下面的代码做两件事注册一个求和函数http::add再注册一个 http 触发器把它绑到 POST /math/addimport { 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 }, });worker 跑起来之后打向/math/add的 POST 请求就会命中这个函数。引擎会把接入地址注入 worker 的环境变量III_URL代码里不用写死任何地址。 配置真相触发器只有三个字段触发器的配置结构定义在引擎侧见 trigger_formats.rs 里的HttpTriggerConfigpub struct HttpTriggerConfig { /// HTTP endpoint path (e.g. /users/:id) pub api_path: String, /// HTTP method (defaults to GET) #[serde(default default_http_method)] pub http_method: OptionHttpMethod, /// Optional function ID to evaluate before invoking handler pub condition_function_id: OptionString, }三点可以读出来api_path原生支持:id风格的路径参数想写/users/:id直接写http_method可以不写不写就按 GET 处理查询型端点连方法声明都省了condition_function_id允许在 handler 之前先跑一个函数做条件判断该字段在 0.21.0 文档中未展开细节先当作预留的扩展点。 默认端口 3111 的来由触发器注册完端点即可用地址是引擎的 HTTP 端口默认 3111加你注册的路径。这个默认值有两处出处worker-compose.yaml 里 http 容器显式写了port: 3111configuration worker 的模板里用的是${HTTP_PORT:3111}插值写法环境变量没设时就回落到 3111。引擎还会把模板求值结果强制成整数类型断言见 store.rs所以端口是可配置的默认值而不是写死的常量。下面这条 curl 就是最简验证请求curl -X POST http://localhost:3111/math/add \ -H content-type: application/json \ -d {a:2,b:3}预期得到状态码 200响应体{c:5}响应头Content-Type为application/json——三项都来自函数的返回值。 运维边界http worker 不管的事监听端口、host、跨域策略、请求超时这些服务器级参数不在 worker 定义里写死而是由 configuration worker 在运行时统一管理。换端口、放行新的来源改运行时配置就行worker 代码本身不用动。一句话划边界函数逻辑、路径、方法归你服务器行为归引擎。什么时候用它什么时候别用适合已有 iii 项目想把函数直接变成 API又不想再维护一套 Web 框架和独立部署链路尤其是请求-响应逻辑简单的小端点这是最短路径。不适合需要复杂中间件链鉴权、限流、请求改写或 HTTP 层和 iii 业务无关的场景——那种情况先起专用 Web 服务请求进 iii 后再调函数别硬凑。【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表