Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 公共API体系结构_Rest_Api_Architecture_Gateway_Api Gateway - Fatal编程技术网

Rest 公共API体系结构

Rest 公共API体系结构,rest,api,architecture,gateway,api-gateway,Rest,Api,Architecture,Gateway,Api Gateway,我一直在致力于一个数据透明项目,其中一个举措是使用API提供对数据的访问。到目前为止,我们已经决定使用API管理器平台来公开和管理所有API。API网关(由平台提供)将控制所有请求 我们现在的主要疑问是,公共API应该如何构建?它的架构应该如何规划?例如(非常简单的示例): (1) 复制生产数据库: (2) 不复制生产数据库: 在案例(1)(复制)中,我如何处理实时数据?例如:公共汽车位置 在案例(2)中,我可能会有什么样的顾虑?(性能、安全…) 我一直在寻找著名的公共API案例(如twit

我一直在致力于一个数据透明项目,其中一个举措是使用API提供对数据的访问。到目前为止,我们已经决定使用API管理器平台来公开和管理所有API。API网关(由平台提供)将控制所有请求

我们现在的主要疑问是,公共API应该如何构建?它的架构应该如何规划?例如(非常简单的示例):

(1) 复制生产数据库:

(2) 不复制生产数据库:

在案例(1)(复制)中,我如何处理实时数据?例如:公共汽车位置

在案例(2)中,我可能会有什么样的顾虑?(性能、安全…)


我一直在寻找著名的公共API案例(如twitter API),但我还没有找到任何关于公共API体系结构和实现的信息。

我认为应该先确定一些条件

1.您的产品不应该与API分离。 大多数公司都在使用他们所拥有的外部API。他们为什么不呢?它是可靠的/被监控的/分布式的/负载平衡的,因此使用它将是一个很好的服务。它们可能有一些内部版本的API用于测试/发布环,但它们的前端主要构建在您可以调用的相同堆栈上。所以你不应该把API和你生产的东西完全分开。在这个时代,它实际上只是系统的一部分

2.数据库复制 在我看来,这两个图表都不正确。顶部的一个看起来不正确,因为您正在显式读取另一个实例,底部的一个看起来不正确,因为您没有复制。现在,复制是一个非常冗长的主题-简短的一课是您肯定应该进行复制。查看此链接以查看复制数据的不同类型的一致性: 您必须在这里进行一些权衡,但作为一个例子,这取决于您的负载和负载模式;您可以复制您的数据库,允许您的读取是多区域的,写入是单个区域的,以及您的业务层-这也为您的API部署到多个区域提供了动力。(如果你有足够的流量)

3.设计关注点 好的,这有一些设计问题,但让我们先解决您的问题

在案例(1)(复制)中,我如何处理实时数据?例如:公共汽车位置

  • 查看不同的一致性类型,并选择最适合您的服务的一致性类型
  • 您理想的实时体验是什么?这是一个映射应用程序,您正在将总线位置的通知推送到设备上/还是希望用户连接并查询下一条总线的时间?根据您的需要,您可能会有不同的设计决策。(我也非常怀疑您的总线位置是否会来自DB)尽管它们都不会真正影响复制,但在这种情况下,一致性+读/写比率和总体负载/负载模式更为重要
在案例(2)中,我可能会有什么样的顾虑?(性能、安全…)

您不应该使用案例2


我认为您应该首先确定用户和系统的需求。仅仅通过这些图表设计也是非常困难的,因为我们无法真正知道我们是为本地区还是全球系统设计这个系统。理想情况下,您可以为所有内容提供冗余(因此多台服务器为网络流量提供服务/多个DBs/多个CDN为静态内容提供服务等等),这样您就可以获得更高的服务质量和更小的失败机会。有时甚至整个云服务区域都会因自然灾害而宕机/因此跨不同区域复制是个好主意,但您的系统可能并不真正需要它。在任何情况下,您的公共API都不应与您的产品分离。

感谢您的回答,并对迟来的答复表示抱歉,这对您帮助很大。抱歉,我错误地解释了复制部分(可能我简化得太多了),但主要的一点是公共API应该使用生产数据库。是的。如果您有一个web应用程序或移动应用程序,您将以使用公共API的方式进行构建,因此您始终知道,在前端之前,所有层都是相同的。