HTTP methodBody 源契约
使用 snake_case 编写、生成和保存 HTTP 模块方法,并正确处理历史驼峰输入。
HTTP 方法的 methodBody 是项目源码的一部分。所有可修改源码的生产者,包括 Manager、
代码生成器、项目模板、迁移脚本和其他自动化工具,都必须直接写入本页定义的 snake_case 字段。
这个要求只作用于 HTTP methodBody。module.json 和方法定义外层的 paramDefinitions、
returnType、errorTypeMap 等字段仍服从各自现行协议,不能做全文件机械重命名。
规范字段
methodBody 顶层只允许以下字段:
| 字段 | 必填 | 含义 |
|---|---|---|
request_url | 是 | 请求地址或路径 |
protocol | 否 | 请求协议 |
http_method | 否 | HTTP 方法,如 GET、POST |
url | 否 | URL 路径参数映射 |
body | 否 | 请求体参数映射 |
query | 否 | 查询参数映射 |
header | 否 | 请求头参数映射 |
body_format | 否 | 请求体格式 |
return_format | 否 | 方法返回格式 |
backend_response_format | 否 | 后端响应模型 |
error_code_field | 否 | 响应错误码字段 |
error_message_field | 否 | 响应错误信息字段 |
data_field | 否 | 响应数据字段 |
success_expression | 否 | 成功判定表达式 |
error_code_expression | 否 | 错误码提取表达式 |
error_message_expression | 否 | 错误信息提取表达式 |
data_expression | 否 | 数据提取表达式 |
url、body、query 和 header 是以公共方法参数名为键的对象。每个映射项可包含
required、position、key、default 和 expression。
{
"request_url": "https://api.example.com/v1/items/{item_id}",
"protocol": "http",
"http_method": "POST",
"url": {
"item_id": {
"required": true,
"position": "url",
"key": "item_id"
}
},
"body": {
"name": {
"required": true,
"position": "body",
"key": "name"
}
},
"query": {},
"header": {},
"body_format": "json",
"return_format": "json",
"backend_response_format": "cmodel",
"error_code_field": "code",
"error_message_field": "message",
"data_field": "data",
"success_expression": "response.code == 0",
"error_code_expression": "response.code",
"error_message_expression": "response.message",
"data_expression": "response.data"
}项目服务能够读取对象形式或历史项目中的 JSON 字符串形式;修改时保留当前方法文件的 外层存储形状,但字符串内部也必须使用上述 snake_case 字段。
历史兼容边界
历史 httpMethod、bodyFormat、returnFormat、backendResponseFormat、
errorCodeField、errorMessageField、dataField 以及各类 *Expression 驼峰字段,只能
在受控输入边界读取并转换。它们不是新的写入协议,任何生产者都不能继续产生这些字段。
如果同一语义同时出现 snake_case 和历史字段,保存方必须拒绝冲突,不能猜测哪一个正确。 未知顶层字段也会在模块版本冻结时被拒绝,不能静默丢弃。读取旧项目后只要发生保存,就应 输出单一的规范字段集合。
修改检查
提交前至少检查:
- 只修改预期的
methods/*.json,没有机械重命名方法定义外层字段。 methodBody不包含带大写字母的顶层字段,也不同时包含历史别名。request_url非空,参数映射键与paramDefinitions中的公共参数一致。- 生成器、模板和 UI 保存结果与手写项目文件使用同一规范。
- 冻结模块版本后,安装 Artifact 中仍只出现 snake_case 字段。
完成源码修改后,按模块冻结与 Bundle 交付 提交项目 Git、冻结模块版本并纳入 Bundle。