API和微服务之间的真正区别是什么?

时间:2017-08-12 23:17:02

标签: rest api architecture microservices

我正在学习微服务,我不明白真正的区别   在创建REST API和创建microservices之间? 我在Go工作,但我的问题适用于所有语言。

6 个答案:

答案 0 :(得分:12)

微服务方法是将您的系统("一堆代码")分解为许多小型服务,每个服务通常都有自己的服务:

  • 明确业务相关责任
  • 正在运行的流程
  • 数据库
  • 代码版本控制(例如git)存储库
  • API (协议如何与其他服务/客户联系微服务)
  • UI

服务本身保持,以便您的系统增长,有更多服务 - 而不是更大的服务。

微服务可以使用REST,RPC或任何其他方法相互通信,因此REST或API实际上与微服务主题正交...

参考:What is an API? In English, please.

答案 1 :(得分:7)

API = Application Programming Interface

微服务= an architecture

简而言之

  • 微服务应该公开定义良好的API。
  • 微服务是您构建解决方案的方式
  • API是您的消费者所看到的。
  • 您可以在后端公开没有微服务的API(实际上,大多数非培训方案都不需要微服务)。

在您决定使用微服务之前,您可能需要阅读http://samnewman.io/books/building_microservices/(除非这是出于培训目的)。

答案 2 :(得分:2)

当您在实体/域级别关注 SOC - 关注分离时,

微服务已明确定义,其中每个实体/域独立于任何其他服务。< / p>

例如用户服务仅负责存储,更新和删除用户相关信息。

微服务后端和前端微服务可以进一步分为两部分

  1. 前端微服务,它公开了休息端点,就像 Web API
  2. 一样
  3. 后端微服务,它实际执行所有操作。
  4. Rest API 是更多暴露于外部世界的端点,也可以与微服务一起使用,如上所述。

答案 3 :(得分:1)

大多数答案都是基于老派对API作为编程接口的理解。如今,这种意义已经融化并开始令人困惑,因为一些开发人员开始(为了简单或错误)将应用程序的API作为应用程序本身进行了中断。在这种情况下,不可能区分现代API和微服务。尽管如此,我们可以说API应用程序可以包含许多微服务,其中大部分通过Microservice的API在应用程序内进行交互,而其他微服务可能将其API作为应用程序的API公开。此外,微服务(作为服务)可能不包括其他微服务(服务),但可以通过基于API的调用来协调微服务的组合。应用程序可能包含微服务,但在最佳实践中,可能不包含其他应用程序。

答案 4 :(得分:0)

微服务

microservice architecture是关于将应用程序逻辑切成小块或&#34;组件&#34;可以在它们之间起作用和/或通过API公开。

API

(Web)应用程序需要使用所有对象实体(模型)集合来设计业务逻辑,并对它们进行可能的操作。 (应用程序编程接口)[https://en.wikipedia.org/wiki/Application_programming_interface)是一种通过公开负责调用相应应用程序操作的特定入口点向应用程序发出请求的方法。

REST(ful) APIs  (&#34; REST&#34;与Representational State Transfer一样)是至少符合这些5 constraints的API:

  • 用户界面不同于数据存储和操作(客户端 - 服务器架构)
  • 服务器上没有存储客户端上下文(&#34;无状态&#34;)
  • 服务器响应必须隐式或显式地将自己定义为可缓存或不可缓存
  • 客户端无需了解他与服务器之间的层
  • 响应/请求消息必须是:具有自我描述性;允许识别资源;使用表示允许操纵资源;宣布可用的行动和资源(&#34;统一界面&#34;)。

&#34;真正的区别&#34;

所以,虽然这些概念显然是相关的,但它们显然是截然不同的概念:

  • 无论是否为REST, API 都会公开由服务器提供的操作,这些操作可能(但不一定)被封装到较小的组件中(微服务)。 / p>

  • 此外,虽然典型的Web(REST)API使用客户端和服务器之间的HTTP协议,但微服务架构中的组件可能使用其他协议进行通信(例如WAMP,{{ 3}},AMQPJSON-RPCXML-RPC,...)

答案 5 :(得分:0)

用通俗易懂的术语来说,如果您有一个 Web API 服务器,并且将它们拆分为几个独立的小型服务器,请使用代理服务器和负载均衡器将它们集群化,然后(可选地,将每个一个单独的数据库实体),即微服务架构