github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/README.md (about) 1 # Npool chain middleware 2 3 [](https://github.com/NpoolPlatform/chain-middleware/actions/workflows/main.yml) 4 5 [目录](#目录) 6 - [功能](#功能) 7 - [命令](#命令) 8 - [步骤](#步骤) 9 - [最佳实践](#最佳实践) 10 - [关于mysql](#关于mysql) 11 12 ----------- 13 ### 功能 14 - [x] 支持chain表单属性聚合 15 16 ### 命令 17 * make init ```初始化仓库,创建go.mod``` 18 * make verify ```验证开发环境与构建环境,检查code conduct``` 19 * make verify-build ```编译目标``` 20 * make test ```单元测试``` 21 * make generate-docker-images ```生成docker镜像``` 22 * make chain-middleware ```单独编译服务``` 23 * make chain-middleware-image ```单独生成服务镜像``` 24 * make deploy-to-k8s-cluster ```部署到k8s集群``` 25 26 ### 最佳实践 27 * 每个服务只提供单一可执行文件,有利于docker镜像打包与k8s部署管理 28 * 每个服务提供http调试接口,通过curl获取调试信息 29 * 集群内服务间direct call调用通过服务发现获取目标地址进行调用 30 * 集群内服务间event call调用通过rabbitmq解耦 31 32 ### 关于mysql 33 * 创建app后,从app.Mysql()获取本地mysql client 34 * [文档参考](https://entgo.io/docs/sql-integration) 35 36 ### API规范(假设目标对象为Object) 37 # 前端接口或App管理员接口 38 * 创建 ```CreateObject``` 39 * 批量创建 ```CreateObjects``` 40 * 更新 ```UpdateObject``` 41 * 更新指定域 ```UpdateObjectFields``` 42 * 原子加指定域 ```AddObjectFields``` 43 * 用ID查询 ```GetObject``` 44 * 条件查询单条 ```GetObjectOnly``` 45 * 条件查询多条 ```GetObjects``` 46 * 条件计数 ```CountObjects``` 47 * 查询ID是否存在 ```ExistObject``` 48 * 查询条件是否存在 ```ExistObjectConds``` 49 * ID删除 ```DeleteObject``` 50 51 # 大后台管理员接口 52 * 为其他App创建 ```CreateAppObject``` 53 * 批量为其他App创建 ```CreateAppObjects``` 54 * 查询其他App多条 ```GetAppObjects``` 55 56 # 注意事项 57 * 网关对请求的http header字段做如下转换(request为http请求body) 58 * X-App-ID -> request.AppID, 59 * X-App-ID -> request.Info.AppID, 如果request携带Info字段 60 * X-User-ID -> request.UserID, 61 * X-User-ID -> request.Info.UserID, 如果request携带Info字段 62 * X-Lang-ID -> request.LangID, 63 * X-Lang-ID -> request.Info.LangID, 如果request携带Info字段 64 * X-App-User-Token -> request.Token, 65 * X-App-User-Token -> request.Info.Token, 如果request携带Info字段 66 67 * 对于通过条件查询的前端API或App管理员API,其request中应总是包含AppID字段,实现时应该总是将该AppID字段添加到查询条件 68 * 对于批量创建的前端或App管理员API,其request中应总是包含AppID字段,实现时应该总是将该AppID字段覆盖request.Info或request.Infos中的AppID 69 * 更新API的实现不应更新AppID域 70 * 对于通过条件查询或创建其他App数据的大后台管理员API,其request中应总是包含TargetAppID,实现时应该总是将TargetAppID字段覆盖request.Info或request.Infos中的AppID