docs: update README for v2 (Chinese intro and guide refresh)
This commit is contained in:
@@ -0,0 +1,32 @@
|
|||||||
|
# fun
|
||||||
|
|
||||||
|
基于 [fasthttp](https://github.com/valyala/fasthttp) 的单端点 RPC 框架。业务请求统一走
|
||||||
|
`POST /cell`,按 `ServiceName.MethodName` 反射调用;自带依赖注入、Guard 鉴权、
|
||||||
|
NDJSON 流式响应、自定义路由与 TypeScript 客户端生成。
|
||||||
|
|
||||||
|
## 特性
|
||||||
|
|
||||||
|
- **单端点 RPC**:`POST /cell`,方法签名 `(error)`、`(T, error)`、`(stream, error)`、`(T, stream, error)`
|
||||||
|
- **依赖注入**:`fun.Wired[T]()` 建单例,`auto` 标签字段递归装配,`New()` 初始化连接资源
|
||||||
|
- **Guard 鉴权**:全局 + 服务级中间件,panic 兜底转统一错误响应
|
||||||
|
- **NDJSON 流式**:`*fun.Stream` 逐行推送,支持首条消息 + 后续流
|
||||||
|
- **自定义路由**(v1.3.0+):`BindRoute` 注册 GET/POST 回调、健康检查、通配符路径
|
||||||
|
- **请求体上限控制**(v1.3.3+):`SetBodyLimit` 支持大体积 multipart 上传
|
||||||
|
- **TypeScript 客户端生成**:`BindServiceForGen` + `GenCode(fun.GenTs{})`,免基础设施即可生成,产物带 `result<T>` 归一化错误与拦截器
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
```go
|
||||||
|
func main() {
|
||||||
|
f := fun.GetFun()
|
||||||
|
f.BindService(&UserSvc{}) // 服务结构体嵌入 fun.Ctx,导出方法即 RPC 端点
|
||||||
|
|
||||||
|
cfg := fun.Wired[config.Config]()
|
||||||
|
go f.Start(cfg.ListenPort()) // fasthttp 监听,RPC 只响应 POST /cell
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 文档
|
||||||
|
|
||||||
|
完整使用文档见 [docs/README.zh.md](docs/README.zh.md):DTO 规则、线协议与 Result、
|
||||||
|
Guard、自定义路由、流式响应、TS 客户端生成与常见坑。
|
||||||
+18
-3
@@ -1,6 +1,6 @@
|
|||||||
# fun 框架(github.com/cyi-cc/fun)使用文档
|
# fun 框架(github.com/cyi-cc/fun)使用文档
|
||||||
|
|
||||||
> 适用版本:**v1.3.2**(当前最新发布)。基于 fasthttp 的单端点 RPC 框架,
|
> 适用版本:**v1.3.3**(当前最新发布)。基于 fasthttp 的单端点 RPC 框架,
|
||||||
> 自带依赖注入、Guard 鉴权、NDJSON 流式响应、自定义路由与 TypeScript 客户端生成。
|
> 自带依赖注入、Guard 鉴权、NDJSON 流式响应、自定义路由与 TypeScript 客户端生成。
|
||||||
|
|
||||||
## 版本沿革
|
## 版本沿革
|
||||||
@@ -11,6 +11,7 @@
|
|||||||
| v1.3.0 | BindRoute 通配符路由 `/prefix/*`,`RouteCtx.Wildcard` 取剩余路径 |
|
| v1.3.0 | BindRoute 通配符路由 `/prefix/*`,`RouteCtx.Wildcard` 取剩余路径 |
|
||||||
| v1.3.1 | TS 客户端可靠性:所有失败统一归一为 Result 并经过响应拦截器 |
|
| v1.3.1 | TS 客户端可靠性:所有失败统一归一为 Result 并经过响应拦截器 |
|
||||||
| v1.3.2 | 每请求上下文(request/stream options + `state`)与免基础设施的生成期注册 `BindServiceForGen` |
|
| v1.3.2 | 每请求上下文(request/stream options + `state`)与免基础设施的生成期注册 `BindServiceForGen` |
|
||||||
|
| v1.3.3 | 新增 `SetBodyLimit`:自定义路由可放宽请求体上限,支持大体积 multipart 上传 |
|
||||||
|
|
||||||
## 1. 启动与服务注册
|
## 1. 启动与服务注册
|
||||||
|
|
||||||
@@ -77,7 +78,19 @@ f.BindRoute("GET", "/image/*", func(c *fun.RouteCtx) error {
|
|||||||
```
|
```
|
||||||
|
|
||||||
- 精确路由优先于通配符;`/cell` 保留;方法大小写不敏感。
|
- 精确路由优先于通配符;`/cell` 保留;方法大小写不敏感。
|
||||||
- 查询参数与 form 表单合并进 `c.Param(name)`;multipart 不支持(转 base64 走 /cell)。
|
- 查询参数与 form 表单合并进 `c.Param(name)`;`Param` 只解析
|
||||||
|
`application/x-www-form-urlencoded`,multipart 不合并。
|
||||||
|
- **multipart/大请求体(v1.3.3+)**:默认请求体上限为 fasthttp 的 4MB。大体积
|
||||||
|
multipart 上传用 `SetBodyLimit` 在 `Start` 前放宽,处理器里经 `c.RequestCtx`
|
||||||
|
直接读 multipart 内容(如 `c.RequestCtx.MultipartForm()`):
|
||||||
|
|
||||||
|
```go
|
||||||
|
f.SetBodyLimit(64 << 20) // 64MB;0 或负数恢复 fasthttp 默认 4MB
|
||||||
|
f.BindRoute("POST", "/upload", func(c *fun.RouteCtx) error {
|
||||||
|
c.RequestCtx.WriteString("…")
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
## 6. 流式响应(NDJSON)
|
## 6. 流式响应(NDJSON)
|
||||||
|
|
||||||
@@ -106,8 +119,10 @@ fun.GenCode(fun.GenTs{})
|
|||||||
|
|
||||||
- `BindServiceForGen` 不触发 Box 装配,生成命令**不需要数据库/Redis 在运行**。
|
- `BindServiceForGen` 不触发 Box 装配,生成命令**不需要数据库/Redis 在运行**。
|
||||||
- 生成确定性:service/method/imports 全部源端排序,重复生成字节一致。
|
- 生成确定性:service/method/imports 全部源端排序,重复生成字节一致。
|
||||||
- 产物:`client.ts`(Client + `result<T>`)、每服务一个 `<service>.ts`、DTO/View 类型、
|
- 产物固定落在 `<out>/ts/` 子目录(用 `GenGo` 则是 `<out>/go/`):
|
||||||
|
`client.ts`(Client + `result<T>`)、每服务一个 `<service>.ts`、DTO/View 类型、
|
||||||
`fun.ts`(`api.create(url)` 聚合入口,服务属性首字母小写)。
|
`fun.ts`(`api.create(url)` 聚合入口,服务属性首字母小写)。
|
||||||
|
需要拍平到目录根时,生成后自行把文件从 `ts/` 上移一层。
|
||||||
|
|
||||||
### 每调用选项(v1.3.2)
|
### 每调用选项(v1.3.2)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user