十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

Cangjie语言HTTP客户端Ginger:RequestBody的5种形态,从字符串、JSON模型到分块上传的完整指南

Cangjie语言HTTP客户端Ginger:RequestBody的5种形态,从字符串、JSON模型到分块上传的完整指南 Cangjie语言HTTP客户端GingerRequestBody的5种形态从字符串、JSON模型到分块上传的完整指南【免费下载链接】gingerGinger是一个轻量级的httpClient库支持多种请求配置及使用函数方式注册拦截器链。项目地址: https://gitcode.com/Cangjie-SIG/gingerGinger是一个面向Cangjie仓颉语言的轻量级HTTP 客户端库支持 GET/POST/PUT 等多种请求方式、请求配置与函数式拦截器链。它的核心亮点之一是统一封装的RequestBody 请求体——从简单字符串、字节数组、JSON 数据模型到定长流与分块上传Chunked5 种形态全覆盖帮你轻松搞定各类接口对接场景。 30 秒认识 Ginger轻量API 少而精核心入口类 不足 150 行代码灵活post/put等方法的body参数统一接收RequestBody类型省心不同请求体形态会自动设置对应的 Content-Type 请求头不用手动拼头所有 5 种形态都定义在一个枚举里见 request_body.cjpublic enum RequestBody { | Str(String) // 字符串 | Bytes(ArrayByte) // 字节数组 | Model(DataModel) // JSON 数据模型 | Stream(InputStream, Int) // 已知长度的流 | Chunked(InputStream) // 未知长度流分块 } 5 种 RequestBody 形态速览形态典型场景自动添加的请求头Str文本、表单文本Content-Type: text/plainBytes二进制文件、加密数据Content-Type: application/octet-streamModelRESTful JSON 接口Content-Type: application/json;charsetutf-8Stream已知大小的文件流上传Content-Type: application/octet-streamContent-LengthChunked大小未知的流、分块上传Content-Type: application/octet-streamTransfer-Encoding: chunked各形态的请求头处理逻辑在 ginger.cj 的 processBody且都遵循用户已手动设置则不覆盖的原则方便你在 RequestConfig 中自定义请求头。1️⃣ Str最简单的字符串请求体适合发送纯文本、简单文本表单。支持直接用字符串或of工厂方法构造let body Str(Hello Cangjie!) // 或 let body RequestBody.of(Hello Cangjie!) let resp ginger.post(url, body: body)2️⃣ Bytes字节数组请求体上传二进制内容图片、加密 payload时用它。直接传入ArrayByte即可例如把字符串转成字节数组发送let body Bytes(Hello Cangjie!.toArray())对应的构造方法见 request_body.cj。3️⃣ ModelJSON 模型请求体最常用⭐对接 RESTful 接口时最推荐的形态支持两种写法传DataModel先调用对象的serialize()方法再构造直接传业务对象只要你的类实现了Serializable接口RequestBody.of(obj)会自动帮你序列化// User 实现了 Serializable 接口 let user User(zhangsan, 18) let resp ginger.post(url, body: RequestBody.of(user)) let newUser resp.readAsUser() // 响应还能反序列化回对象序列化后的 JSON 与readAsT()响应解析的配合让对象进去、对象出来变得非常自然。测试用例可参考 request_body_test.cj。4️⃣ Stream已知长度的流式请求体文件较大、不想一次性全部加载进内存时用Stream——传入输入流和流的总长度nGinger 会自动帮你设置Content-Length请求头let body Stream(inputStream, 14)5️⃣ Chunked未知长度流的分块上传当数据大小事先无法确定如持续生成的数据流时用Chunked形态。Ginger 会自动添加Transfer-Encoding: chunked头按分块方式发送无需预知总长度let body RequestBody.of(inputStream) // 只传流即走 Chunked 形态Stream与Chunked的区别一句话知道总长度选 Stream不知道就选 Chunked。 如何选对请求体一张清单看懂发文本→Str发二进制一次性、小数据→Bytes对接JSON 接口→Model优先直接传Serializable对象上传大文件且大小已知→Stream数据源源不断、大小未知→Chunked如果不想管理Ginger实例还可以引入快捷函数见 import.cjimport ginger.default.* let resp post(url, body: RequestBody.of(user))❓ 常见问题FAQQ自动加的 Content-Type 能改吗可以。只要你在RequestConfig里通过setHeader提前设置过Ginger 就不会再覆盖见 processBody 实现。Q完整的接口说明在哪看项目自带的 API 文档 feature_api.md 列出了RequestBody全部 6 个工厂方法含DataModel版本单元测试覆盖率 100%可参考 coverage.md。Q依赖怎么引入在cjpm.toml中添加ginger依赖并执行cjpm update cjpm build即可具体版本要求见 README.md 的依赖引入一节。✅ 小结Ginger 用一个枚举统一了 HTTP 请求体的 5 种常见形态Str管文本、Bytes管二进制、Model管 JSON、Stream管定长流、Chunked管不定长分块上传并自动匹配 Content-Type让 Cangjie 语言开发者写 HTTP 客户端代码时少操心、少踩坑。新手建议从RequestBody.of(对象)的 JSON 场景入手再按需升级到流式上传即可覆盖绝大多数实际开发需求。相关源码路径请求体定义 src/request_body.cj · 请求头处理 src/ginger.cj · 单元测试 src/test/request_body_test.cj【免费下载链接】gingerGinger是一个轻量级的httpClient库支持多种请求配置及使用函数方式注册拦截器链。项目地址: https://gitcode.com/Cangjie-SIG/ginger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表