当前,我们正在使用spring-boot实现REST API。由于我们的API数量在不断增长,我们正在考虑一种解决方案,以使用其他方法来实现REST API。
方法如下:
下面是我的问题:
或者我们只能说我们的方法是REST体系结构不同吗?
您正在做出2个主要选择,每个可以单独决定:
1)具有单个HTTP服务
2)使用JMS作为该服务与基础微服务之间的通信
关于#1,如果执行此操作,则无法再将服务称为REST,因为REST的全部目的是将HTTP动词与域对象一起用于可预测的端点集。 / objects /上的GET表示正在获取对象,/ objects上的POST表示正在创建新对象,依此类推...现在,可以了,您可以这样做并且可以正常工作,尽管它将是“非标准”。
实际上,您可能想要检查GraphQL https://www.howtographql.com/basics/1-graphql-is-the-better-rest/,因为它非常接近您要尝试的操作。
这些天实际上无论是REST还是GraphQL似乎都是两种流行的方法。
进行REST的另一种方法,如果您只是想在域对象上公开REST服务而不必编写大量代码,则是Spring Data REST:https://spring.io/projects/spring-data-rest,如果您已经对Spring感到满意,这应该很容易理解。
对于#2,您选择单个网关服务与基础服务之间的通信。您的大多数通话是否需要同步应答,例如UI要求在浏览器或电话中显示数据?如果是这样,JMS不是一个好方法。如果您的大多数服务都是异步的,例如有人提交了股票交易请求,那么JMS是一种不错的方法。 UI仅需要知道请求已提交,但是实际上将在稍后处理该请求,并且将异步获取结果。
在不了解您的应用程序的情况下,为简单起见,我建议您在服务之间坚持使用HTTP,除非有充分的理由切换到JMS。