异步批量数据验证服务 - GET 还是 POST?
Posted
技术标签:
【中文标题】异步批量数据验证服务 - GET 还是 POST?【英文标题】:asynchronous bulk data validations service - GET or POST? 【发布时间】:2020-01-04 23:10:17 【问题描述】:这是 GET 或 POST 混淆的不同场景。我正在开发一个使用 spring-boot 微服务架构构建的 Web 应用程序,其中需要验证和更新来自 excel 表的一些批量数据。 excel表格中可以有500-1000条记录,有6个不同的列用于批量处理。一旦 UI 将 Excel 表提交到服务器,整个过程就是异步的。有微服务到微服务调用,我对 GET 或 POST 感到困惑。
这里有一个问题:我有 4 个微服务(比如说 orchestra-service、A-service、B-service 和 C-service)。 OrchestraService 从 excel 表中创建一个 DTO 列表,用于进一步调用。管弦乐队叫“A”。 'A' 使用 DB 验证数据并在 DTO 列表对象中标记成功和失败记录,并将列表返回给 Orchestra。管弦乐队再次调用“B”,它执行与“A”类似的工作并返回管弦乐队。 现在管弦乐队调用“C”,它将成功记录更新到数据库中,更新数据库上的文件状态,并创建一个新的结果 Excel 表,每行包含错误消息,稍后将通过电子邮件发送给用户(小报告之类的东西)。
在上述微服务到微服务调用中,只有 C 正在更新数据库并在服务器上创建资源。以上所有调用我都使用 POST 方法,因为我需要请求主体将我的输入列表传递给所有服务。 根据 HTTP 标准,我做得对吗? https://www.rfc-editor.org/rfc/rfc7231#section-4.3.3 向数据处理进程提供一个数据块,例如输入到 html 表单中的字段,它应该是一个 POST 调用。
请告诉我是否:
我应该只对“C”使用 POST,对其他人使用 GET,或者
因为其他过程涉及数据过滤过程,所以它应该是 POST。
注意:服务 A、B 和 C 并非所有服务都使用 excel 的所有列,但其中一些列组合使用。一列有 18 个字符长的数据,所以我认为批量操作的 GET 标头限制可能是个问题。
【问题讨论】:
我相信您自己已经回答了您的问题。由于您只能通过 GET 请求传递有限的数据量,因此在像您这样的情况下,使用 POST 始终是更安全的选择。我敢肯定,您不希望遇到使用 GET 上传的数据会在没有通知的情况下被截断的情况。这个主题可能会提供一些额外的见解***.com/questions/2659952/… 【参考方案1】:几年前我也有类似的问题,这里是您问题第一部分的possible solution。
正如@Oreal Eraki 在他的回答中提到的那样,我还会质疑您是否需要服务 A 和 B。如果它只是 validation
和 data transformation
它可以在实际存储数据的同一个域中完成。
【讨论】:
是的,这两项服务都是必需的,您可以参考上述评论。同样的问题,将此类域实体复制到一个服务进行验证是否是个好主意?或者如果现有设计有这样的问题,还有其他方法吗?【参考方案2】:Http 协议
在GET
上传递信息没有实际违规行为,如果该请求在相同的请求之间没有变化,那很好。
微服务方面
现在澄清一下,真的需要服务 A 和服务 B 吗? 不就是和Service C同一个域,可以驻留在他里面吗? 让微服务验证自己的域并返回成功和失败的集合以及相关消息是更好的做法。
【讨论】:
是的,实际上,根据现有设计,“A”正在处理某些数据库实体组,而“B”正在处理另一组数据库实体。如果我需要在一个地方执行所有验证,那么我需要将所有必需的实体类复制到一个服务中。 按照微服务架构把这样的类复制到一个服务中可以吗?? "按照微服务架构把这样的类复制到一个服务中可以吗??" --> 如果它们没有很强的领域含义:它可能是一个共享库。但如果它们代表域,请避免重复。以上是关于异步批量数据验证服务 - GET 还是 POST?的主要内容,如果未能解决你的问题,请参考以下文章