尧图网站设计 尧图网站设计YAOTU DESIGN
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你写好了一个函数只想把它暴露成 API却要为它拉起整套 Web 框架、维护路由、中间件和 CORS没必要。用 iii http worker0.21.0函数本身就能成为 REST 端点——一行触发器声明之后每个命中该方法和路径的请求都会执行你的函数返回值原样成为响应。从引擎启动到端点可用的完整链路可对照 docs/0-21-0/creating-workers/http.mdx 核对。快速上手最小可运行命令链先给命令再解释iii worker add http # 把 http worker 加入项目 iii --config config.yaml # 启动引擎已在运行可跳过 iii worker init my-worker --language typescript # 脚手架生成一个 worker已有可跳过 iii worker add ./my-worker # 指向 worker 目录加入引擎背后的分工其实很清晰engine/config.yaml 里只注册iii-stream、configuration这类“引擎生命周期 worker”http、state、cron、queue等项目级 worker 都交给worker-compose.yaml管理这也是iii worker add http会往那里写的原因。worker 代码从环境变量III_URL读取引擎地址——文档示例里专门有一句“没设置就抛错”的检查跑 worker 前别漏了它。一个端点由什么组成函数 http 触发器端点不是一条配置而是两个对象的配对你注册的一个函数加一个 http 触发器把函数挂到路由上的那行声明后者用function_id指向前者。在 console 的 Triggers 页面里能看到这种一一对应每行是一个方法加路径旁边挂着它要执行的 function_id右侧还有 TEST API 面板可以直接发请求。要素写在哪含义function_id触发器配置请求命中后执行的函数如http::addapi_path触发器配置路由路径支持/users/:id形式http_method触发器配置HTTP 方法省略时默认 GET返回值函数体status_code/body/headers分别成为响应状态码、响应体、响应头函数拿到的入参就是请求本身method、path、headers、body外加 query 与路径参数。所以文档说的“handler”完全是一个普通函数——收一个 payload返回一个值不需要理解任何 Web 框架的中间件链。Node、Python、Rust 各怎么写三种写法同一结构三种语言的骨架同构先注册函数再注册触发器靠function_id把两者绑起来差异只在 API 形态。Nodeiii-sdkconst worker registerWorker(process.env.III_URL, { workerName: my-worker }); worker.registerFunction(http::add, async (p) ({ status_code: 200, body: { c: p.body.a p.body.b }, headers: { Content-Type: application/json }, })); worker.registerTrigger({ type: http, function_id: http::add, config: { api_path: /math/add, http_method: POST }, });Pythonworker register_worker(os.environ[III_URL], InitOptions(worker_namemy-worker)) def add(payload): return {status_code: 200, body: {c: payload[body][a] payload[body][b]}} worker.register_function(http::add, add) worker.register_trigger({type: http, function_id: http::add, config: {api_path: /math/add, http_method: POST}})Rustiii_sdkuse iii_sdk::builtin_triggers::{HttpMethod, HttpTriggerConfig}; use iii_sdk::trigger::IIITrigger; worker.register_function(http::add, RegisterFunction::new( |req: AddRequest| Ok(json!({status_code: 200, body: {c: req.body.a req.body.b}})) )); worker.register_trigger( IIITrigger::Http(HttpTriggerConfig::new(/math/add).method(HttpMethod::Post)) .for_function(http::add), )?;对照着看Node 与 Python 里触发器就是一个普通对象Rust 则变成 builder——先HttpTriggerConfig::new(...)构造、再.method(HttpMethod::Post)定方法关联函数用.for_function(http::add)表达。函数 id 都写成http::add这种带命名空间前缀的样式一个 worker 里并存多个端点时一眼能分清谁属于哪条路由。curl 验证端点预期 200 与 {c:5}触发器注册后直接在引擎的 HTTP 端口上调用路径默认3111curl -X POST http://localhost:3111/math/add -H content-type: application/json -d {a:2,b:3}跑通的话状态码 200、响应体{c:5}——到这里端点已经完整可用。源码里的默认值触发器字段与默认端口 3111 的出处触发器配置是引擎侧定义的一个结构体见 engine/src/trigger_formats.rspub struct HttpTriggerConfig { pub api_path: String, #[serde(default default_http_method)] pub http_method: OptionHttpMethod, pub condition_function_id: OptionString, }三个要点api_path支持/users/:id这样的路径参数内置能力不用自己写正则http_method是Option#[serde(default)]指定默认值为 GET——不写方法端点就是 GETcondition_function_id可指定一个“条件函数”先执行通过才调用真正的 handler否则跳过。适合做路由级的前置校验0.21.0 的文档没展开细节但源码里字段真实存在。默认端口 3111 的出处有两处engine/worker-compose.yaml 的 http 容器下直接写着port: 3111configuration worker 的配置模板则支持${HTTP_PORT:3111}这种写法冒号后的 3111 是默认值环境变量HTTP_PORT存在时以它为准。运行时改端口与 CORS不用重新部署 workerhttp worker 的端口、host、CORS、超时这些服务器设置由 configuration worker 在运行时管理不写死在 worker 定义里。好处很直接改监听端口、开 CORS、调超时都走 configuration worker 这条通道worker 本身不用重新部署——worker 只在运行时向它读取这些值。还有一个防坑细节。配置值写成${HTTP_PORT:3111}这类模板时引擎会做插值与类型强制整个字符串只是一个占位符时替换后的文本会重新解析为标量3111变成整数3111而不是字符串3111结果再对照 JSON Schema 校验。engine/src/workers/configuration/store.rs 的注释与测试正是拿port: ${HTTP_PORT:3111}当例子固定这一行为同目录的configuration.rs里也有对应的类型强制断言。常见问题不写 http_method 默认是什么GET。源码里默认函数直接返回Some(HttpMethod::GET)所以只写api_path的触发器就是 GET 端点。路径参数怎么加直接写进api_path比如/users/:id函数从 payload 的path_params里取出对应值。改端口要重启 worker 吗不用。端口是 configuration worker 的运行时设置改完即通过这条通道生效worker 定义里写的函数与触发器完全不动。函数 id 为什么要带http::前缀命名约定用来标明“这个函数是服务于 http 触发的”。多个端点并存时触发器靠function_id指向对应函数前缀让这层关联一目了然。【免费下载链接】iiiEffortlessly compose, extend, and observe every service in real-time for the first time ever.项目地址: https://gitcode.com/GitHub_Trending/mo/iii创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表