[英]Single api endpoint to post to different tables depending on a value in body
我是清洁架构的新手,我想创建一个单一的 api 端点/configuration
,将值保存到我的数据库中的不同表中。 这取决于在正文中传递的值config_name
。
表:
示例请求正文:
{
config_name: “tableA”,
data: [{ id: “ABC-1”, name: “Echo”, country: “United States”, …}]
}
{
config_name: “tableB”,
data: [{ id: “XYZ”, name: “United States”, continent: “North America”, currency: “dollars”}]
}
意思是,一旦 POST /configuration
,就会执行以下逻辑:
if config_name===“tableA” then save to tableA,
else if config_name===“tableB” then save to table B.
所以这里的问题是,在干净的架构中是否允许这种方法? 如果是这样,解决这个问题的最佳方法是什么,以避免类之间的依赖关系。 我在 TS/Inversify 中实现这个
到目前为止,我已经在我的代码中设置了以下内容。
我通过构造函数注入每个实例(即:ConfigController 中的 ConfigCommand)。
我会把它看作是配置端点是一个反向代理,它根据参数将请求转发到正确的用例。 因此,我没有ConfigTableACommand
ConfigCommand
ConfigTableBCommand
等(希望有更好的名称!)所以 Config 端点将根据config_name
反序列化参数并发送正确的命令。 然后,每个用例(对于每个“表”)都可以实现您在每种情况下可能需要执行的任何验证和逻辑,并使用一个接口来存储每种情况下的特定数据( ITableARepository
、 ITableBRepository
等)。
这种方法的优点是您的核心将独立于所有请求都来自单个端点这一事实,这是将来可能会发生变化的事情,它不应该对核心部分产生任何影响,并且存储库接口可以对每个数据结构都非常具体(如在要存储的字段中,而不是实际的数据库数据结构)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.