重构不符合REST的请求

时间:2019-07-05 16:38:51

标签: java angular rest

我正在使用一个报告系统,该报告系统通过Web服务调用来提供图表数据。在某些情况下,完成搜索,在其他情况下,完成配置更新。

代码的UI端恰好是Angular,后端是Java,Oracle是持久性存储。有趣的是,没有Java持久性框架可用于普通JDBC。但是,我的问题不是至少直接涉及这些事情。

几乎所有对资源之类的请求都是通过POST请求发出的。因此,获取特定报告的数据是一个POST请求,其状态会在基于JSON的响应中返回(确定可以正常工作,否则返回ERROR)。

这不是我对REST标准的理解。我本以为开发人员应该对资源进行GET请求,通过查询字符串参数或请求标头提供输入。更改状态或资源的呼叫将通过POST或PUT进行。

不遵循这些标准,仅仅滚动我们自己的范例并仅发布所有内容会有什么后果?

1 个答案:

答案 0 :(得分:0)

  

不遵循这些标准,仅仅滚动我们自己的范例并仅发布所有内容会有什么后果?

您放弃的是通用组件在知道请求为safe时可以提供的优势。

例如,Web浏览器可以通过主动获取您可能想要的资源的表示来优化用户体验。

类似地,在不稳定的网络上,如果响应丢失,则通用组件可以知道重试请求-因为请求的语义保证这样做没有风险。

此外,如果一切都是POST,那么您将不断从HTTP感知缓存中逐出表示形式。 Caching constraints在REST体系结构样式中很重要-事实上,我们可以一次从网络下载一个表示然后再使用,这是扩展Web规模的关键部分。

HTTP规范有趣的一角是304 Not Modified不是POST请求的allowed response codes之一。没有条件GET的类似物。

当一切都是POST时,您正在采用一个应用程序协议,并将其变成一个愚蠢的消息隧道,仅向通用组件提供对正在发生的事情的最弱的语义描述。

这不一定意味着对所有内容使用POST是错误的。 SOAP走了这条路,而GraphQL似乎也在朝着这个方向发展。 HTTP尚未针对远程过程调用样式进行优化,但可以。