【问题标题】:Difficulty understanding APIs and the DOM难以理解 API 和 DOM
【发布时间】:2017-05-17 22:13:09
【问题描述】:

所以我正在阅读有关 API 以了解更多关于它们的信息,并且似乎通常的定义类似于“API 是您访问其他人的代码或其他人的代码访问您的代码的接口”,并且经常得到一些例子来澄清这一点,例如 Yelp 使用 Google 或 Apple Maps API 来访问地图,而无需了解有关方法本身的实现的任何信息。

但后来我开始单独阅读 DOM(文档对象模型),它也被定义为 API。然而,基于之前对 API 的定义和示例(Yelp 的),我觉得很难喜欢......以同样的方式将其视为 API。我知道网络浏览器实现了 DOM,但每个网络浏览器都有自己的实现,而不是当你谈论谷歌地图 API 时,我假设谷歌有自己的单一实现,然后被其他应用程序使用.所以就像...对于特定的网络浏览器,网络浏览器在提供 API 方面就像“谷歌”,但谁充当... Yelp?是..网页吗?程序员?语言(Javascript)?

我希望我的示例不会太混乱,我只是想了解 DOM 与谁有“Google Map API-Yelp”类型的关系。

【问题讨论】:

  • API 的定义并没有区分它的实现是一个还是多个。考虑 Bing 可以提供自己的 Google Maps API 实现,以便应用程序可以轻松地在 Google 和 Bing 地图之间切换数据。
  • 嗯,你的评论让我有点困惑。我认为 Google Maps API 之类的东西必须由 Google 自己实现,这与 DOM 不同,DOM 似乎只是浏览器必须实现的东西的“规范”。使用 Google Maps API,您实际上是在使用某种 Google 服务,因此它一定已经由 Google 实现。如果我们将 Google Maps API 视为像 DOM 一样的抽象接口,并且如果 Bing 实现了这个接口,他们将如何访问 Google 用来获取其地图信息的任何服务器?

标签: javascript api dom browser interface


【解决方案1】:

我会说创建 JavaScript 或 HTML 文件的人是“Yelp”,而“Google”部分就是浏览器。这里的区别在于 W3C,它标准化了 DOM API。如果不是 W3C,那么每个浏览器供应商都可以公开自己的 DOM 集——这种情况在过去一定程度上确实存在。多亏了 W3C,我们现在可以处理在不同浏览器之间非常一致的 API。

好像 Google 和 Bing 决定标准化他们的地图 API。最终结果是 Yelp 可以创建一个可以同时使用 Google 或 Bing 地图的客户端。它仍然是一个 API,尽管由不同的来源实现。

希望对你有帮助。

【讨论】:

    【解决方案2】:

    API 是一种功能和数据结构的规范,应用程序使用这些规范与其他一些服务和/或数据结构进行交互。

    一个例子是 POSIX 操作系统 API(函数如 open()read() 用于访问文件,fork()exec() 用于管理进程和程序等)。 POSIX 指定了 API,它允许程序员使用这些函数编写可在许多不同操作系统上运行的可移植程序。

    另一个例子是 Web 浏览器中的 DOM API。 DOM 是一种抽象的数据结构,DOM API 是像getElementById()appendChild() 这样作用于数据结构的方法,然后浏览器显示。每个浏览器都有自己的 API 实现,它允许 Javascript 应用程序跨不同的浏览器运行。

    API 并非天生特定于实现。但是在服务提供商有一个库来使用他们的服务的情况下,API 和它的实现通常是混为一谈的。例如,要使用 Stripe 服务处理信用卡支付,您可以使用他们编写的 Stripe API。从理论上讲,Stripe、PayPal、SWReg 等所有支付处理器都可以聚集在一起并定义一个通用 API,它们都会实现,但他们还没有这样做 AFAIK。

    【讨论】:

    • 我明白了。那么对于 DOM 的例子来说,DOM 是一个代表文档所有节点的“数据结构”,而 DOM API 是一个“函数规范”..程序员用来和这个数据结构进行交互?但是每个浏览器都实现了 DOM API 中指定的实际功能,因此每个功能的实际实现细节在浏览器之间会有所不同,但功能的结果是相同的。浏览器提供了程序员可以使用的功能的实现(所以它就像谷歌提供地图 API),而程序员就像 Yelp
    • 因为他们使用 API 与浏览器交互。这是正确的吗?
    • 没错。在这种情况下,DOM 也是一种抽象的数据结构; M 代表“模型”。
    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 2015-09-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2014-11-15
    相关资源
    最近更新 更多