背景 我需要为我们的团队中的开发人员和产品所有者实施一种方法,以便能够在查询数据库的Spring Boot应用程序后触发一些Kafka消息的重新发布。将查询数据库以获取数据,但不执行任何修改。因此,该操作对应用程序所拥有的资源没有影响。
潜在的解决方案 我正在考虑实现REST端点来实现这一目标。我知道这不是通过REST实现的好用例,因为对于应用程序所拥有的资源没有“状态转移”。所以...
问题
除REST端点之外,还有其他建议关于实现此目标的替代方法吗?
如果我是通过REST端点实现的,则应使用哪个HTTP动词?
(我已经检查过,并且在以前的任何SO帖子中都没有找到这种性质的已回答问题。)
答案 0 :(得分:2)
使用哪个HTTP动词来触发Kafka消息的发布?
您通过查看HTTP方法的语义并确定哪种方法适合您的用例来回答此问题。
在此示例中,合理的候选项为GET
和POST
。 (从技术上讲,您可以考虑使用HEAD
,这是GET
的一种特殊情况-在这里我将忽略它)。
要理解的重要区别是GET语义包括safe;该描述是“有效的只读”,但重要的是它的含义。
区分安全和不安全方法的目的是允许自动检索过程(蜘蛛)和缓存性能优化(预取)正常工作,而不必担心造成危害。
自动检索意味着即使没有商业动机也可能看到GET
个请求。如果可以,那么使用GET就可以了-在通过不可靠的网络发送请求时,它甚至具有一些优势。
另一方面,如果重新发布是“昂贵的”或应该仅在“故意”的情况下进行,则POST
是更合适的选择。
在浏览器的网页上下文中想象这可能会有所帮助。如果您通过a element提供访问权限,则允许浏览器通过预取资源来尝试优化用户体验。另一方面,将form element与
method: POST
将不会被预提取,因为兼容的浏览器会意识到该请求并不安全。
关于[REST]的在线意见似乎存在分歧。
REST受Martin Fowler称为Semantic Diffusion的困扰。
当您的单词是由一个人或一个小组创造的,通常具有很好的定义,但随后却以削弱该定义的方式在整个社区中传播时,就会发生语义扩散。这种减弱的风险有可能会完全失去该定义-以及对该术语的任何用处。
REST是architectural style;使用该样式构建的参考应用程序是World Wide Web。
剩下的唯一一个悬而未决的问题是,REST是否是触发工作的正确方法
取决于您所处的约束条件以及您的野心。 “每个人”都可以使用Web客户端,因此这是一种将消息从客户端传输到服务器的廉价方法。另一方面,HTTP请求并不是很小,并且内置的功能很多,可能只不过拖累了您的用例。
课程的马匹。