Tencent / APIJSON

🏆 实时 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构 🏆 Real-Time coding-free, powerful and secure ORM 🚀 providing APIs and Docs without coding by Backend, and the returned JSON of API can be customized by Frontend(Client) users
http://apijson.cn
Other
17.27k stars 2.16k forks source link

[*] 如何保证新增和删除多个表的数据时的顺序 #758

Open zuzuviewer opened 2 months ago

zuzuviewer commented 2 months ago

Description

如何保证新增和删除多个表时的顺序 比如在一个删除请求中删除主表和其子表数据,如何保证子表的数据会先被删除,java中可以维持map的顺序,但是golang中无法保证map的访问顺序

TommyLemon commented 1 month ago

按 JSON 传参上下顺序。 go 可以用第三方的有序 map,例如 https://github.com/elliotchance/orderedmap

另外 APIJSON 后端 Golang 版也有几个,可以点亮 🌟 Star 支持下热心的作者哦~ https://github.com/search?q=apijson+language%3AGo&type=repositories&l=Go&s=stars&o=desc

zuzuviewer commented 1 month ago

有序map是不得已的选择,我更想知道的是有没有不依靠上下顺序,而是依靠规范来决定先后执行顺序的方案

TommyLemon commented 1 month ago

可以新增关键词 "@sort": "key1,key5,key3..." 来指定每层的顺序,但这样前端等调用房用起来就麻烦不少,不推荐。 还是直接在后端支持有序 map 解析、前端支持有序 map 穿参更好,一次性的工作比每个请求每层都加字段工作量少很多。

zuzuviewer commented 1 month ago

好的,那就是当前没有已有的规范支持这个场景。因为对我们来说更理想的情况是符合当前语言(golang)的特性,而不是通过增加第三方库来解决,所以我会在我的服务中考虑使用“@sort”关键词来支持该场景,以下考虑看是否合适:

  1. @sort关键词不是必须的,没有则按照当前map顺序操作,有则按照sort顺序操作,这样可以保持兼容性
  2. @sort不用包含当前层级所有key,没有包含的key会排在sort包含的key后面按照当前map顺序执行
TommyLemon commented 1 month ago

go map 随机乱序,凡是要保证顺序的 key 都必须写在 @sort 里,不需要保证顺序的可省略确实更好

TommyLemon commented 1 month ago

你的目的是实现 APIJSON 的 Go 版后端 ORM 库 https://github.com/Tencent/APIJSON/issues/38

还是做 客户端 调用 APIJSON 请求?

zuzuviewer commented 1 month ago

都有