dproto 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLI.md +438 -0
- package/LICENSE +21 -0
- package/README.md +162 -0
- package/Util.md +233 -0
- package/bin/dproto.js +5 -0
- package/dproto.json +4 -0
- package/output/README.md +181 -0
- package/output/api-lists/README.md +115 -0
- package/output/protoJs/README.md +281 -0
- package/output/routes.yaml +91 -0
- package/package.json +60 -0
- package/src/commands/check_edit_path.js +225 -0
- package/src/commands/compile.js +219 -0
- package/src/commands/hello.js +22 -0
- package/src/commands/init.js +252 -0
- package/src/commands/validate.js +388 -0
- package/src/index.js +54 -0
- package/src/utils/config.js +105 -0
package/CLI.md
ADDED
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
# dproto CLI 工具
|
|
2
|
+
|
|
3
|
+
`dproto` 是一个强大的命令行工具,用于管理和编译 Protocol Buffers 定义文件。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g dproto
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
或直接使用:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
node bin/dproto.js [command]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 命令概览
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
dproto --help
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
可用命令:
|
|
24
|
+
- `hello` - 显示欢迎信息
|
|
25
|
+
- `init` - 初始化新的 proto 项目
|
|
26
|
+
- `validate` - 验证 proto 文件语法
|
|
27
|
+
- `check-edit-path` - 检查并添加 Request/Response 的 path 注释
|
|
28
|
+
|
|
29
|
+
## 配置文件
|
|
30
|
+
|
|
31
|
+
### dproto.json
|
|
32
|
+
|
|
33
|
+
`dproto` 使用 `dproto.json` 配置文件来管理项目配置。**配置文件是必需的**,如果没有配置文件,工具会提示先初始化项目。
|
|
34
|
+
|
|
35
|
+
#### 配置文件结构
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"apiPrefix": "/api/v1/",
|
|
40
|
+
"protoDir": "proto"
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### 配置字段说明
|
|
45
|
+
|
|
46
|
+
| 字段 | 类型 | 必需 | 默认值 | 说明 |
|
|
47
|
+
|-----|------|------|-------|------|
|
|
48
|
+
| `apiPrefix` | string | 否 | `/api/v1/` | API路径前缀 |
|
|
49
|
+
| `protoDir` | string | **是** | `./proto` | Proto文件目录 |
|
|
50
|
+
|
|
51
|
+
#### 创建配置文件
|
|
52
|
+
|
|
53
|
+
**方式1: 使用 init 命令(推荐)**
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
dproto init my-project
|
|
57
|
+
cd my-project
|
|
58
|
+
# 配置文件会自动生成
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**方式2: 手动创建**
|
|
62
|
+
|
|
63
|
+
在项目根目录创建 `dproto.json` 文件:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"apiPrefix": "/api/v1/",
|
|
68
|
+
"protoDir": "proto"
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
#### 配置文件优先级
|
|
73
|
+
|
|
74
|
+
命令行参数 > 配置文件 > 默认值
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# 使用配置文件中的 protoDir
|
|
78
|
+
dproto validate
|
|
79
|
+
|
|
80
|
+
# 使用命令行参数(优先级更高)
|
|
81
|
+
dproto validate --input ./other-proto
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### 配置文件检查
|
|
85
|
+
|
|
86
|
+
运行命令时,工具会自动检查配置文件:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
✅ 已加载配置文件: ./dproto.json
|
|
90
|
+
|
|
91
|
+
或
|
|
92
|
+
|
|
93
|
+
❌ 配置文件不存在: ./dproto.json
|
|
94
|
+
|
|
95
|
+
请先初始化项目:
|
|
96
|
+
dproto init <项目名称>
|
|
97
|
+
|
|
98
|
+
或手动创建配置文件 dproto.json
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 命令详解
|
|
102
|
+
|
|
103
|
+
### 1. hello - 欢迎信息
|
|
104
|
+
|
|
105
|
+
显示工具基本信息和支持的功能。
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# 基本用法
|
|
109
|
+
dproto hello
|
|
110
|
+
|
|
111
|
+
# 自定义名字
|
|
112
|
+
dproto hello --name "Developer"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 2. init - 初始化项目
|
|
116
|
+
|
|
117
|
+
创建一个新的 proto 项目,包含模板文件和基础结构。
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# 创建完整模板项目
|
|
121
|
+
dproto init my-project
|
|
122
|
+
|
|
123
|
+
# 创建最小模板项目
|
|
124
|
+
dproto init my-project --template minimal
|
|
125
|
+
|
|
126
|
+
# 指定输出目录
|
|
127
|
+
dproto init my-project --output ./projects
|
|
128
|
+
|
|
129
|
+
# 强制覆盖现有目录
|
|
130
|
+
dproto init my-project --force
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**选项说明:**
|
|
134
|
+
- `<name>` - 项目名称(必填)
|
|
135
|
+
- `-o, --output <path>` - 输出目录(默认:项目名称)
|
|
136
|
+
- `-t, --template <template>` - 模板类型
|
|
137
|
+
- `minimal` - 最小模板(common.proto + example.proto)
|
|
138
|
+
- `full` - 完整模板(common.proto + user.proto + example.proto)
|
|
139
|
+
- `-f, --force` - 强制覆盖已存在的目录
|
|
140
|
+
|
|
141
|
+
**生成的文件:**
|
|
142
|
+
- `proto/` - Proto 定义目录
|
|
143
|
+
- `dproto.json` - **配置文件(必需)**
|
|
144
|
+
- `README.md` - 项目说明文档
|
|
145
|
+
- `package.json` - 项目配置文件
|
|
146
|
+
|
|
147
|
+
### 3. validate - 验证 Proto 文件
|
|
148
|
+
|
|
149
|
+
验证 proto 文件的语法和结构,检查常见问题。
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# 验证默认目录
|
|
153
|
+
dproto validate
|
|
154
|
+
|
|
155
|
+
# 验证指定目录
|
|
156
|
+
dproto validate --input ./proto
|
|
157
|
+
|
|
158
|
+
# 显示所有警告(严格模式)
|
|
159
|
+
dproto validate --strict
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**选项说明:**
|
|
163
|
+
- `-i, --input <path>` - 输入 proto 目录(默认:`./proto`)
|
|
164
|
+
- `-s, --strict` - 显示所有警告信息
|
|
165
|
+
|
|
166
|
+
**验证内容:**
|
|
167
|
+
|
|
168
|
+
1. ✅ 基本语法检查
|
|
169
|
+
- syntax 声明
|
|
170
|
+
- package 声明
|
|
171
|
+
- message/service 定义
|
|
172
|
+
|
|
173
|
+
2. ✅ 结构检查
|
|
174
|
+
- import 文件是否存在
|
|
175
|
+
- 字段编号是否重复
|
|
176
|
+
|
|
177
|
+
3. ✅ Message 命名冲突检查(跨文件)
|
|
178
|
+
- 检查所有 proto 文件中的 Message 全限定名(package.MessageName)
|
|
179
|
+
- 防止同名 Message 在不同文件中冲突
|
|
180
|
+
- 基于 package 命名空间检测重复
|
|
181
|
+
|
|
182
|
+
4. ✅ Request/Response 匹配检查(跨文件)
|
|
183
|
+
- 检查每个 XXXRequest 是否有对应的 XXXResponse
|
|
184
|
+
- 检查每个 XXXResponse 是否有对应的 XXXRequest
|
|
185
|
+
- 确保 API 定义完整性(一对一匹配)
|
|
186
|
+
|
|
187
|
+
5. ✅ 最佳实践检查
|
|
188
|
+
- go_package 选项
|
|
189
|
+
- java_package 选项
|
|
190
|
+
- 命名规范建议
|
|
191
|
+
|
|
192
|
+
6. ✅ protoc 语法验证(如果已安装)
|
|
193
|
+
- 使用 protoc 进行完整语法验证
|
|
194
|
+
|
|
195
|
+
**示例输出:**
|
|
196
|
+
```
|
|
197
|
+
🔍 验证 Proto 文件...
|
|
198
|
+
|
|
199
|
+
📋 找到 5 个 proto 文件:
|
|
200
|
+
|
|
201
|
+
✅ Request/Response 匹配成功:
|
|
202
|
+
找到 15 对匹配的 Request/Response
|
|
203
|
+
|
|
204
|
+
⚠️ Request/Response 未完整匹配:
|
|
205
|
+
common.proto:
|
|
206
|
+
• BaseResponse → 缺少 BaseRequest
|
|
207
|
+
• PageRequest → 缺少 PageResponse
|
|
208
|
+
|
|
209
|
+
❌ 发现 Message 命名冲突:
|
|
210
|
+
user.RegisterRequest 在 2 个文件中定义:
|
|
211
|
+
• user2.proto (package: user)
|
|
212
|
+
• user1.proto (package: user)
|
|
213
|
+
|
|
214
|
+
📝 单文件验证:
|
|
215
|
+
|
|
216
|
+
✅ verification.proto
|
|
217
|
+
✅ user.proto
|
|
218
|
+
✅ password.proto
|
|
219
|
+
✅ order.proto
|
|
220
|
+
✅ common.proto
|
|
221
|
+
|
|
222
|
+
🔧 使用 protoc 进行语法验证...
|
|
223
|
+
✅ verification.proto - protoc 验证通过
|
|
224
|
+
|
|
225
|
+
📊 验证总结:
|
|
226
|
+
✅ 有效文件: 5/5
|
|
227
|
+
⚠️ 警告数量: 9
|
|
228
|
+
✨ 所有 Proto 文件验证通过!
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 4. check-edit-path - 检查并添加 Path 注释
|
|
232
|
+
|
|
233
|
+
检查每个 Request/Response Message 是否有对应的 path 注释,如果没有则自动添加。
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# 检查默认目录
|
|
237
|
+
dproto check-edit-path
|
|
238
|
+
|
|
239
|
+
# 检查指定目录
|
|
240
|
+
dproto check-edit-path --input ./proto
|
|
241
|
+
|
|
242
|
+
# 指定 API 前缀
|
|
243
|
+
dproto check-edit-path --prefix /api/v2/
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**选项说明:**
|
|
247
|
+
- `-i, --input <path>` - 输入 proto 目录(默认:`./proto`)
|
|
248
|
+
- `-p, --prefix <prefix>` - API 路径前缀(默认:`/api/v1/`)
|
|
249
|
+
|
|
250
|
+
**功能说明:**
|
|
251
|
+
|
|
252
|
+
1. ✅ 自动检测 Request/Response Message
|
|
253
|
+
- 扫描所有 proto 文件中的 `XXXRequest` 和 `XXXResponse`
|
|
254
|
+
- 检查每个 Message 定义前是否有 path 注释
|
|
255
|
+
|
|
256
|
+
2. ✅ 自动计算 Path
|
|
257
|
+
- 根据 Message 名称自动计算对应的 API Path
|
|
258
|
+
- 例如: `LoginRequest` → `/api/v1/login`
|
|
259
|
+
- 例如: `GetUserInfoRequest` → `/api/v1/get/user/info`
|
|
260
|
+
|
|
261
|
+
3. ✅ 自动添加注释
|
|
262
|
+
- 在 Message 定义前插入 path 注释
|
|
263
|
+
- 格式: `// /api/v1/xxx`
|
|
264
|
+
- 保持原有缩进和文件结构
|
|
265
|
+
|
|
266
|
+
4. ✅ 智能跳过
|
|
267
|
+
- 已有正确 path 注释的 Message 会自动跳过
|
|
268
|
+
- 避免重复添加注释
|
|
269
|
+
|
|
270
|
+
**示例输出:**
|
|
271
|
+
```
|
|
272
|
+
🔍 检查 Request/Response 的 Path 注释...
|
|
273
|
+
|
|
274
|
+
API 前缀: /api/v1/
|
|
275
|
+
Proto 目录: ./proto
|
|
276
|
+
|
|
277
|
+
📋 找到 5 个 proto 文件
|
|
278
|
+
|
|
279
|
+
📝 user.proto:
|
|
280
|
+
✅ 已添加 10 个注释
|
|
281
|
+
• RegisterRequest → /api/v1/register
|
|
282
|
+
• RegisterResponse → /api/v1/register
|
|
283
|
+
• LoginRequest → /api/v1/login
|
|
284
|
+
• LoginResponse → /api/v1/login
|
|
285
|
+
|
|
286
|
+
📊 总结:
|
|
287
|
+
✅ 已添加注释: 10
|
|
288
|
+
⏭️ 已跳过: 0
|
|
289
|
+
|
|
290
|
+
✨ Path 注释检查完成!
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
**生成的注释示例:**
|
|
294
|
+
|
|
295
|
+
```protobuf
|
|
296
|
+
// 登录请求
|
|
297
|
+
// /api/v1/login
|
|
298
|
+
message LoginRequest {
|
|
299
|
+
oneof credential {
|
|
300
|
+
string username = 1;
|
|
301
|
+
string email = 2;
|
|
302
|
+
string phone = 3;
|
|
303
|
+
}
|
|
304
|
+
string password = 4;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// 登录响应
|
|
308
|
+
// /api/v1/login
|
|
309
|
+
message LoginResponse {
|
|
310
|
+
common.BaseResponse base = 1;
|
|
311
|
+
UserInfo user_info = 2;
|
|
312
|
+
string token = 3;
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## 使用流程示例
|
|
317
|
+
|
|
318
|
+
### 创建新项目
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# 1. 初始化项目
|
|
322
|
+
dproto init my-api --template full
|
|
323
|
+
|
|
324
|
+
# 2. 进入项目目录
|
|
325
|
+
cd my-api
|
|
326
|
+
|
|
327
|
+
# 3. 验证 proto 文件
|
|
328
|
+
dproto validate --strict
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### 现有项目验证
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# 1. 验证现有 proto 文件
|
|
335
|
+
dproto validate --input ./proto
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## 配置 package.json
|
|
339
|
+
|
|
340
|
+
在项目的 `package.json` 中添加脚本:
|
|
341
|
+
|
|
342
|
+
```json
|
|
343
|
+
{
|
|
344
|
+
"scripts": {
|
|
345
|
+
"proto:validate": "dproto validate --input ./proto --strict"
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
使用 npm 脚本:
|
|
351
|
+
|
|
352
|
+
```bash
|
|
353
|
+
npm run proto:validate
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
## 项目结构示例
|
|
357
|
+
|
|
358
|
+
```
|
|
359
|
+
my-api/
|
|
360
|
+
├── proto/
|
|
361
|
+
│ ├── common.proto # 通用定义
|
|
362
|
+
│ ├── user.proto # 用户模块
|
|
363
|
+
│ ├── verification.proto # 验证码模块
|
|
364
|
+
│ ├── password.proto # 密码找回模块
|
|
365
|
+
│ └── order.proto # 订单模块
|
|
366
|
+
│ └── routes.yaml # 路由配置(可选)
|
|
367
|
+
├── README.md
|
|
368
|
+
└── package.json
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
## 最佳实践
|
|
372
|
+
|
|
373
|
+
1. **定期验证** - 在修改 proto 文件后立即验证
|
|
374
|
+
```bash
|
|
375
|
+
dproto validate --strict
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
2. **版本管理** - 将 proto 文件纳入 Git 管理
|
|
379
|
+
|
|
380
|
+
3. **统一命名** - 遵循 proto3 命名规范
|
|
381
|
+
- message: PascalCase
|
|
382
|
+
- field: snake_case
|
|
383
|
+
- enum: UPPER_SNAKE_CASE
|
|
384
|
+
|
|
385
|
+
4. **模块化设计** - 每个模块独立 proto 文件
|
|
386
|
+
|
|
387
|
+
5. **自动化编译** - 使用 CI/CD 自动编译
|
|
388
|
+
|
|
389
|
+
## 问题排查
|
|
390
|
+
|
|
391
|
+
### protoc 未安装
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
❌ protoc 未安装
|
|
395
|
+
|
|
396
|
+
请先安装 protoc 编译器:
|
|
397
|
+
• macOS: brew install protobuf
|
|
398
|
+
• Linux: apt-get install protobuf-compiler
|
|
399
|
+
• Windows: choco install protoc
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### 语言插件未安装
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
⚠️ Go 插件未安装
|
|
406
|
+
|
|
407
|
+
安装命令: go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
|
|
408
|
+
确保 $GOPATH/bin 已添加到 PATH 环境变量
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### 验证失败
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
❌ common.proto
|
|
415
|
+
• 缺少 syntax 声明
|
|
416
|
+
• 缺少 package 声明
|
|
417
|
+
|
|
418
|
+
❌ 请修复上述问题后重新验证
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
## 版本信息
|
|
422
|
+
|
|
423
|
+
当前版本: **1.0.0**
|
|
424
|
+
|
|
425
|
+
支持的语言:
|
|
426
|
+
- Go
|
|
427
|
+
- Java
|
|
428
|
+
- Python
|
|
429
|
+
- PHP
|
|
430
|
+
- NodeJS
|
|
431
|
+
|
|
432
|
+
## 许可证
|
|
433
|
+
|
|
434
|
+
MIT License
|
|
435
|
+
|
|
436
|
+
## 反馈与贡献
|
|
437
|
+
|
|
438
|
+
如有问题或建议,请提交 Issue 或 Pull Request。
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 ApiProtobuf Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# ApiProtobuf
|
|
2
|
+
|
|
3
|
+
> 一套 Api 使用 Protobuf 的思路方案 - 支持 JSON 和 Protobuf 二进制双格式传输
|
|
4
|
+
|
|
5
|
+
## 🚀 快速开始 - dproto CLI 工具
|
|
6
|
+
|
|
7
|
+
本项目提供了 `dproto` CLI 工具,用于管理和验证 Proto 文件!
|
|
8
|
+
|
|
9
|
+
### 安装
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install -g dproto
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 快速使用
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# 初始化新项目
|
|
19
|
+
dproto init my-api
|
|
20
|
+
|
|
21
|
+
# 验证 proto 文件
|
|
22
|
+
dproto validate --input ./proto
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
📚 **完整 CLI 使用指南**: [CLI.md](CLI.md)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 项目简介
|
|
30
|
+
|
|
31
|
+
这是一个完整的 HTTP API Protobuf 示例项目,展示了如何在传统 HTTP API 中使用 Protocol Buffers 定义数据结构。本项目支持**双格式传输**:
|
|
32
|
+
|
|
33
|
+
- **JSON 格式** (`application/json`) - 易读易用,兼容传统 HTTP API
|
|
34
|
+
- **Protobuf 二进制格式** (`application/x-protobuf`) - 高效压缩,性能优化
|
|
35
|
+
|
|
36
|
+
## 目录结构
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
proto/
|
|
40
|
+
├── common.proto # 通用定义(状态码、分页、基础响应)
|
|
41
|
+
├── user.proto # 用户相关(登录、注册、用户信息)
|
|
42
|
+
├── verification.proto # 验证码相关(发送、验证)
|
|
43
|
+
├── password.proto # 密码找回相关(找回、重置)
|
|
44
|
+
├── order.proto # 订单相关(创建、查询、管理)
|
|
45
|
+
└── routes.yaml # 路由配置文件(可选)
|
|
46
|
+
|
|
47
|
+
output/ # 生成的 JavaScript/TypeScript 文件
|
|
48
|
+
├── protoSplit/ # 多文件方案(推荐大型项目)
|
|
49
|
+
│ ├── user.js # 178KB - 用户模块
|
|
50
|
+
│ ├── order.js # 255KB - 订单模块
|
|
51
|
+
│ └── *.d.ts # TypeScript 类型定义
|
|
52
|
+
├── protoJs/ # 单文件方案(小型项目)
|
|
53
|
+
│ ├── proto.js # 490KB - CommonJS
|
|
54
|
+
│ └ proto.es6.js # 490KB - ES6
|
|
55
|
+
├── protoJson/ # JSON 描述文件
|
|
56
|
+
├── protoMin/ # 最小化版本
|
|
57
|
+
└── protoTs/ # TypeScript 类型定义
|
|
58
|
+
|
|
59
|
+
examples/
|
|
60
|
+
├── go/server.go # Go语言示例
|
|
61
|
+
├── php/ApiController.php # Laravel框架示例
|
|
62
|
+
├── java/ApiController.java # Spring Boot框架示例
|
|
63
|
+
├── nodejs/server.js # Express框架示例
|
|
64
|
+
├── python/server.py # Flask框架示例
|
|
65
|
+
└── proto-usage.js # JavaScript Protobuf 使用示例
|
|
66
|
+
└── multi-file-usage.js # 多文件按需加载示例
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Proto 文件的作用
|
|
70
|
+
|
|
71
|
+
### ⚠️ 重要说明
|
|
72
|
+
|
|
73
|
+
**在 HTTP JSON API 方案中,Proto 文件的主要作用是:**
|
|
74
|
+
|
|
75
|
+
1. **定义数据结构** - 定义 Request 和 Response 消息结构
|
|
76
|
+
2. **生成类型定义代码** - 为各语言生成强类型类/结构体
|
|
77
|
+
3. **提供 API 文档参考** - 清晰的数据结构和字段定义
|
|
78
|
+
4. **支持双格式传输** - JSON 和 Protobuf 二进制格式互转
|
|
79
|
+
|
|
80
|
+
**Proto 文件不用于:**
|
|
81
|
+
- ❌ 定义 HTTP 路由路径(路由在代码或配置文件中定义)
|
|
82
|
+
- ❌ 直接运行 RPC 调用(这是 HTTP API,不是 gRPC)
|
|
83
|
+
- ❌ 自动生成 HTTP 服务端代码
|
|
84
|
+
|
|
85
|
+
### 路由定义方式
|
|
86
|
+
|
|
87
|
+
在 HTTP API 方案中,路由通过以下方式定义:
|
|
88
|
+
|
|
89
|
+
#### 1. YAML 配置文件(可选)
|
|
90
|
+
|
|
91
|
+
使用 [proto/routes.yaml](proto/routes.yaml) 定义路由映射:
|
|
92
|
+
|
|
93
|
+
```yaml
|
|
94
|
+
routes:
|
|
95
|
+
- path: /users/register
|
|
96
|
+
method: POST
|
|
97
|
+
request: user.RegisterRequest
|
|
98
|
+
response: user.RegisterResponse
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### 2. 框架路由注解(推荐)
|
|
102
|
+
|
|
103
|
+
在代码中直接定义路由(各框架有自己的方式):
|
|
104
|
+
|
|
105
|
+
- **Laravel**: `routes/api.php`
|
|
106
|
+
- **Spring Boot**: `@PostMapping("/api/v1/users/register")`
|
|
107
|
+
- **Express**: `app.post('/api/v1/users/register', ...)`
|
|
108
|
+
- **Flask**: `@app.route('/api/v1/users/register', methods=['POST'])`
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 📖 详细文档
|
|
113
|
+
|
|
114
|
+
### JavaScript/TypeScript 生成方案
|
|
115
|
+
|
|
116
|
+
**解决了大型项目(600 API / 1800 Message)的文件大小问题!**
|
|
117
|
+
|
|
118
|
+
#### 多文件方案(推荐)
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# 生成多文件,每个模块独立
|
|
122
|
+
npm run proto:split
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**优势**:
|
|
126
|
+
- ✅ 首屏加载减少 70%
|
|
127
|
+
- ✅ 按需动态加载
|
|
128
|
+
- ✅ Webpack/Vite 自动分割
|
|
129
|
+
- ✅ TypeScript 完整类型支持
|
|
130
|
+
|
|
131
|
+
**使用方式**:
|
|
132
|
+
```javascript
|
|
133
|
+
// React/Vue 懒加载
|
|
134
|
+
const userProto = await import('./output/protoSplit/user.js');
|
|
135
|
+
|
|
136
|
+
// 只加载需要的模块,减少首屏加载时间
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
#### 详细指南
|
|
140
|
+
|
|
141
|
+
- **[前端引导.md](前端引导.md)** - 前端开发者快速入门指南(React/Vue/Angular 示例)
|
|
142
|
+
- **[PROTO-MULTI-FILE-GUIDE.md](PROTO-MULTI-FILE-GUIDE.md)** - 多文件方案技术深度指南
|
|
143
|
+
- **[output/README.md](output/README.md)** - 生成的文件目录说明
|
|
144
|
+
- **[examples/multi-file-usage.js](examples/multi-file-usage.js)** - 多文件使用示例
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
### 其他文档
|
|
149
|
+
|
|
150
|
+
- **[CLI工具使用指南](CLI.md)** - dproto CLI 工具完整使用说明
|
|
151
|
+
- **[示例项目文档](EXAMPLES.md)** - 详细的功能模块、框架实现示例、客户端调用示例
|
|
152
|
+
- **[路径转换算法](Util.md)** - Message 到路径的自动转换规则
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## License
|
|
157
|
+
|
|
158
|
+
MIT
|
|
159
|
+
|
|
160
|
+
## 联系方式
|
|
161
|
+
|
|
162
|
+
如有问题或建议,请提交 Issue 或 Pull Request。
|