API 和微服务之间的真正区别是啥?
Posted
技术标签:
【中文标题】API 和微服务之间的真正区别是啥?【英文标题】:What is the real difference between an API and an microservice?API 和微服务之间的真正区别是什么? 【发布时间】:2018-01-21 04:23:41 【问题描述】:我正在学习微服务,但我不明白真正的区别是什么
在创建 REST API
和创建 microservices
之间?
我正在使用 Go,但我的问题适用于所有语言。
【问题讨论】:
【参考方案1】:微服务方法是将您的系统(“代码堆”)分解为许多小服务,每个服务通常都有自己的:
明确业务相关责任 运行过程 数据库 代码版本控制(例如 git)存储库 API(其他服务/客户端如何联系微服务的协议) 用户界面服务本身保持小,因此随着系统的增长,服务会越来越多,而不是更大的服务。
微服务可以使用 REST、RPC 或任何其他方法相互通信,因此 REST 或 API 确实与微服务的主题正交......
参考:What is an API? In English, please.
【讨论】:
但是之前我创建了三个API,但是我不明白如何修改它们来制作这些的微服务 @fm433403 你应该问自己的第一个问题是——你用微服务架构解决了什么问题?它是应对一系列非常具体的挑战的工具。一个不是免费的工具。因此,在使用它之前,请确保您了解该工具。检查例如samnewman.io/books/building_microservices【参考方案2】:API = Application Programming Interface
微服务 = an architecture
总之
微服务应该公开一个定义良好的 API。 微服务是您可能希望构建解决方案的方式 API 就是您的消费者所看到的。 您可以在后端不使用微服务公开 API(实际上,大多数非训练场景不需要微服务)。在决定使用微服务之前,您可能需要阅读http://samnewman.io/books/building_microservices/(除非这是出于培训目的)。
【讨论】:
那么理想的 Web 应用程序是为我的内部问题和我想要公开的 API 创建微服务? 如果我的问题是正确的,答案是肯定的。您公开 API,这可能是使用微服务架构创建的。同样,请确保微服务对您来说是一个好的架构,并且您拥有合适大小的微服务(例如,对于特定的业务领域)。您可能想查看一些关于 Netflix 如何进行微服务的演示文稿,以了解他们使用的微服务的大小,例如这里nginx.com/blog/…【参考方案3】: 当您在实体/域级别遵循SOC - 关注点分离 时,微服务 的定义非常明确,其中每个实体/域都独立于任何其他服务。例如用户服务将只负责存储、更新和删除用户相关信息。
微服务后端和前端微服务可以进一步分为两部分
-
前端微服务,像 Web API 一样暴露 REST 端点
实际执行所有操作的后端微服务。
Rest API 更多的是暴露给外部世界的端点,也可以与微服务一起使用,如上所述。
【讨论】:
【参考方案4】:大部分答案都基于对 API 作为编程接口的老式理解。如今,这个含义已经融化并开始让人们感到困惑,因为一些开发人员开始(出于简单或错误)将应用程序的 API 解释为应用程序本身。在这种情况下,无法区分现代 API 和微服务。尽管如此,我们可以说一个 API 应用程序可以包含许多微服务,其中大多数微服务通过微服务的 API 在应用程序内进行交互,而其他可能将其 API 公开为应用程序的 API。此外,微服务(作为服务)可能不包括其他微服务(服务),但可以通过基于 API 的调用来编排微服务的组合。应用程序可能包含微服务,但在最佳实践中,可能不包含其他应用程序。
【讨论】:
【参考方案5】:微服务
microservice architecture 是关于将应用程序逻辑切成小块或“组件”,这些小块或“组件”可以在它们之间起作用和/或通过 API 公开。
API
(Web)应用程序需要设计具有所有对象实体集(模型)的业务逻辑以及对它们的可能操作。 (应用程序编程接口][https://en.wikipedia.org/wiki/Application_programming_interface)是一种通过公开负责调用适当应用程序操作的特定入口点向应用程序发出请求的方式。
ReST(ful) APIs (“ReST”,如 Representational State Transfer 中的)是至少符合这些5 constraints 的 API:
用户界面不同于数据存储和操作(客户端-服务器架构) 没有客户端上下文存储在服务器上(“无状态”) 服务器响应必须隐式或显式地定义自己是否可缓存 客户端不必知道他和服务器之间的层 响应/请求消息必须: 具有自我描述性;允许识别资源;使用允许操纵资源的表示;宣布可用的操作和资源(“统一界面”)。“真正的区别”
因此,虽然这些概念明显相关,但它们显然是不同的概念:
无论是否为 ReSTful,API 都会公开服务器提供的操作,这些操作可能(但不一定)封装成更小的组件(微服务)。
此外,虽然典型的 Web (ReST)API 在客户端和服务器之间使用 HTTP 协议,但微服务架构中的组件可能使用其他协议进行通信(例如 WAMP、AMQP、 JSON-RPC, XML-RPC, SOAP, ...)
【讨论】:
【参考方案6】:通俗地说,如果您有一个 Web API 服务器并将它们拆分为几个独立的小型服务器,则使用代理服务器和负载平衡器将它们集群化,并且(可选地,给每个一个单独的数据库实体),这是一个微服务架构。
【讨论】:
以上是关于API 和微服务之间的真正区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章