github.com/NpoolPlatform/chain-middleware@v0.0.0-20240228100535-eb1bcf896eb9/README.md (about)

     1  # Npool chain middleware
     2  
     3  [![Test](https://github.com/NpoolPlatform/chain-middleware/actions/workflows/main.yml/badge.svg?branch=master)](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