首页/新闻资讯/正文详情

用仓颉Web框架Tea实战:从零搭建完整RESTful API服务

发布时间:2026/9/24 13:53:04 来源:云帆数科 栏目:资讯中心
用仓颉Web框架Tea实战:从零搭建完整RESTful API服务
用仓颉Web框架Tea实战从零搭建完整RESTful API服务【免费下载链接】tea仓颉语言轻量级的、函数式的、高效的HTTP Web后端框架项目地址: https://gitcode.com/Cangjie-SIG/teaTea 是仓颉语言生态中一个轻量级、函数式、高效的 HTTP Web 后端框架受 Express、Gin、Fiber 等知名框架启发设计。本文带你用一个完整实战分 6 步从零搭建一个 RESTful API 服务——涵盖依赖安装、路由设计、请求响应处理、中间件与 CORS、高级配置与测试让你快速掌握 Tea 的核心用法。Tea 框架简介轻量、高效、函数式的仓颉 HTTP Web 框架在开始动手前先了解 Tea 凭什么值得尝试特性说明 高性能内核基于零拷贝、字节级操作实现的 SeedHTTP 引擎 灵活路由支持函数式 / 仿函数式 Handler、链式路由、分组路由 丰富路由参数普通参数、可选参数、通配符、可选通配符可处理复杂匹配 路由热更新内置路由缓存机制已支持运行时热添加路由 彩色日志内置可扩展的彩色日志库按等级区分输出 钩子机制6 类钩子函数轻松实现中间件级扩展框架主类定义在 src/tea.cj 中核心配置位于 src/config.cj路由注册逻辑见 src/register.cj这些源码都是阅读 Tea 内部实现的绝佳入口。快速开始安装 Tea 依赖并一分钟启动服务器引入依赖Tea 通过cjpm包管理器引入只需在项目根目录的 cjpm.toml 中加入tea { git https://gitcode.com/yishengTH/tea, output-type static, branch main }然后在控制台执行cjpm update完成安装。编写你的第一个 Tea Web 服务import tea.* main(): Int64 { let app Tea.default() app.get(/) { c c.sendString(hello, Tea!) } app.run(8080) return 0 }访问http://localhost:8080即可看到hello, Tea!输出。启动时 Tea 会自动打印 Logo、端口和 PID方便确认服务状态该行为由 src/tea.cj 中的printStartupMessage方法控制。路由设计分组路由与链式路由打造标准 RESTful APIRESTful API 的核心是按资源组织 URL并按 HTTP 方法区分操作。Tea 提供了两种非常顺手的写法。分组路由按版本组织 API用group创建路由组前缀自动拼接适合/api/v1、/api/v2这类版本化设计let app Tea.default() let api app.group(/api) // /api let v1 api.group(/v1) // /api/v1 v1.get(/user) { c c.sendString(get user list) // 完整路径: /api/v1/user }分组路由的实现在 src/group.cj 中前缀拼接由getGroupPath函数完成。链式路由一条 URL 注册全部方法Tea 的route方法支持类 Express 的链式调用为同一资源注册 GET/POST/PUT/DELETE非常 RESTfulapp.route(api).route(/user/:id?) .get { c c.sendString(get user) } .post { c c.sendString(create user) } .put { c c.sendString(update user) } .delete { c c.sendString(delete user) }链式注册的接口定义见 src/register.cj。灵活的路由参数路由参数支持多种写法均通过TeaContext.param获取写法含义示例请求与取值/:name普通参数/user/lzj→param(name)为lzj/:name?可选参数/user也能匹配param为None/user/*非强制贪心匹配/user/books/hello→param(*)为books/hello/v1/*/shop/*多个通配符用param(*1)、param(*2)按位置取值路由解析逻辑位于 src/path.cj完整的参数规则含.、-分隔的进阶匹配详见 README.md 的「路由机制」章节。请求与响应处理param、query、bindJson 使用指南请求处理的核心是TeaContext类src/context.cj它是 Handler 中使用频率最高的对象。读取请求参数// GET /user/fenny app.get(/user/:name) { c let name c.param(name) ?? None // fenny c.sendString(Hello ${name}) } // GET /list?page1size10 app.get(/list) { c let page c.query(page) ?? 1 // 1 let size c.query(size) ?? 10 c.sendString(page${page} size${size}) }绑定 JSON 请求体对于 POST/PUT 请求bindJson可以将请求体直接反序列化为对象前提是你的类实现了Serializable接口。以创建用户为例简化流程如下app.post(/user) { c let user c.bindJsonUser() // 将 JSON 请求体绑定为 User 对象 // 这里保存 user ... c.json(201, user) // 以 JSON 形式返回状态码 201 }常用响应方法一览方法作用sendString(body)发送字符串响应体sendJson(body)发送 JSON 响应体自动设置 Content-TypesendStatus(status)仅发送状态码如sendStatus(StatusNoContent)setStatusCode(code)链式设置状态码c.setStatusCode(200).sendString(ok)setResponseHeader(k, v)设置响应头可搭配 src/constant.cj 中的 Header 常量中间件与 CORS 配置一步搞定跨域中间件用于对请求或响应做统一处理限流、鉴权、日志等通过app.use注册多个中间件可链式使用且必须调用c.next()才会把请求交给下一个处理器app.use { c println(this is middleware) c.next() // 不调用则执行链在此中断 }中间件还可以配合set/get在整条执行链中共享数据。启用内置 CORS 中间件前端跨域访问 API 是刚需。Tea 在 src/middleware/cors/cors.cj 提供了开箱即用的 CORS 中间件支持来源白名单、子域名匹配、凭证与预检请求处理import tea.middleware.cors.* let cfg CorsConfig( allowOrigins: ArrayListString([https://example.com]), allowCredentials: true ) app.use { c cors(cfg)(c) }相关功能可用 src/test/cors_test.cj 中的用例做参考。配置、钩子与日志Tea 进阶特性清单自定义 TeaConfig通过Tea.new(config)使用自定义配置配置项定义见 src/config.cj配置项默认值作用caseSensitivefalse路由是否区分大小写strictRoutingfalse是否严格区分/a与/a/unescapePathfalse是否解码 URL 中的转义字符disableStartupMessagefalse是否关闭启动 Logo 输出errorHandler默认处理器自定义异常处理函数let config TeaConfig(unescapePath: true) let app Tea.new(config)钩子函数在框架生命周期的关键节点插入逻辑Tea 提供 6 类钩子定义见 src/hooks.cj例如在服务器启动前执行初始化逻辑app.hooks.registerOnListen([() { println(server about to start...) }])内置彩色日志全局变量logger是一个带缓冲的彩色日志器src/logger.cj在项目任意位置都可直接调用logger.info(...)、logger.error(...)且可随时替换为其他日志实现。测试与运行用集成测试验证 API 服务Tea 的仓库自带集成测试示例 src/test/tea_test.cj展示了如何启动服务并用 HTTP 客户端断言响应spawn { app.run(127.0.0.1, 8080) } let res client.get(http://127.0.0.1:8080/test) Assert(res.status, 200) Assert(body, empty) app.shutdown()路由匹配、参数解析的测试用例分别位于 src/test/path_test.cj 与 src/test/hook_test.cj编写自己的测试时可以照着写。总结Tea 让仓颉 Web 后端开发又快又稳用 Tea 搭建 RESTful API 服务的完整路径可以概括为✅ 在cjpm.toml引入依赖Tea.default()创建实例✅ 用group 链式route组织版本化 RESTful 路由✅ 用param/query/bindJson读取请求用sendString/sendJson返回响应✅ 用app.use注册中间件内置 CORS 解决跨域✅ 按需调整TeaConfig用钩子函数扩展生命周期逻辑✅ 编写集成测试app.run(port)启动上线轻量、函数式、路由灵活——如果你想用仓颉写 Web 后端Tea 是目前非常值得上手的选择。动手试试用一杯 Tea 的时间写一个属于你自己的 API 服务吧 ☕【免费下载链接】tea仓颉语言轻量级的、函数式的、高效的HTTP Web后端框架项目地址: https://gitcode.com/Cangjie-SIG/tea创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

使用 Node.js FS API 实现 datei:// 文件系统提供者:nodefs-provider-sample 深入解读
使用 Node.js FS API 实现 datei:// 文件系统提供者:nodefs-provider-sample 深入解读

示例工程 【免费下载链接】vscode-extension-samples Sample code illustrating the VS Code extension API. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-extension-samples 点击查看 免费下载 导读 本文基于 VS Code 官方扩展样例仓库(vsco… · 2026/9/24 13:53:04

RHEL 8更换yum源
RHEL 8更换yum源

1、关闭官方订阅在配置文件中关闭这个官方的订阅 编辑配置文件“ 更改参数“ enabled 1”到“ enabled 0”root用户修改配置文件以下内容: vim /etc/yum/pluginconf.d/subscription-manager.conf [main] enabled02、将 Red Hat 官方订阅删除yum remove subscr… · 2026/9/24 13:53:04

PaddleSpeech WaveFlow 数据预处理深度解析:从 LJSpeech 原始音频到对数 Mel 频谱与训练数据集
PaddleSpeech WaveFlow 数据预处理深度解析:从 LJSpeech 原始音频到对数 Mel 频谱与训练数据集

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation … · 2026/9/24 13:53:04

PaddleSpeech PP-ASR 实战指南:从预训练模型推理到流式服务与个性化部署
PaddleSpeech PP-ASR 实战指南:从预训练模型推理到流式服务与个性化部署

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation … · 2026/9/25 3:56:08

ShrinkDriver:使用 PowerShell 并行执行 DBCC SHRINKFILE 回收 SQL Server 数据文件空间
ShrinkDriver:使用 PowerShell 并行执行 DBCC SHRINKFILE 回收 SQL Server 数据文件空间

示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors… · 2026/9/25 3:56:08

JMeter分布式压测环境搭建:从单机瓶颈到多机协作实战
JMeter分布式压测环境搭建:从单机瓶颈到多机协作实战

做压测这行越久,越会发现一个事实:单机 JMeter 的瓶颈,往往比被测系统的瓶颈来得更早。明明脚本没问题、场景也没问题,可压到一定并发量之后,客户端自己先卡死了,CPU 打满、内存飙升、网络连接数耗尽&#… · 2026/9/25 3:56:08

Atlantis 架构决策记录(ADR)实践指南:从决策流程到 API 增强与漂移检测的实现落地
Atlantis 架构决策记录(ADR)实践指南:从决策流程到 API 增强与漂移检测的实现落地

DevOpsCI/CD基础设施 【免费下载链接】atlantis Terraform Pull Request Automation 项目地址: https://gitcode.com/gh_mirrors/at/atlantis 点击查看 免费下载 本文以 Atlantis 仓库 docs/adr/ 目录下的架构决策记录体系为核心,完整讲解 ADR 的引入背… · 2026/9/25 3:56:08

wp-calypso 客户端 translator-jumpstart:页内社区翻译(Community Translator)集成的完整实现解析
wp-calypso 客户端 translator-jumpstart:页内社区翻译(Community Translator)集成的完整实现解析

前端CMS 【免费下载链接】wp-calypso The JavaScript and API powered WordPress.com 项目地址: https://gitcode.com/gh_mirrors/wp/wp-calypso 点击查看 免费下载 本篇技术文章以 client/lib/translator-jumpstart/ 模块及其 README 为核心,讲解 wp-c… · 2026/9/25 3:56:08

ESP32 -O2 优化崩溃排查:volatile、内存屏障与防御性编码
ESP32 -O2 优化崩溃排查:volatile、内存屏障与防御性编码

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:56:01

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码