如何维护 API 版本以提供兼容性和简单性

发布于 2025-01-05 10:45:36 字数 810 浏览 0 评论 0原文

我正在为网站设计浏览器插件的API。以下是更多详细信息:

  • 用户将在用户的计算机上安装浏览器插件,该插件将来会升级。例如,adobe flash 是一个网络浏览器插件。
  • 我们的网站将启动该插件,并使用插件公开的 API。例如,使用 API 在插件画布上绘制一些图形。

我尝试用 API 版本解决的问题:

  • 将来不同的用户可能会安装不同版本的插件。因为当升级插件时,肯定还有一些用户在访问我们的网站时还没有升级。所以用户A可能安装了插件1.0,用户B可能安装了插件1.1,用户C可能安装了1.2。
  • 我们将为所有用户提供一个网站,因此网站有责任在加载插件时处理不同版本的 API。
  • 网站由多个模块组成,我们可以升级模块A并使用最新版本的插件API然后发布。同时,模块 B 可能仍然使用旧版本的插件 API。

我最初的解决方案:

  • 使API的兼容性最大化,但为了简单起见,我们仍然可以删除不推荐使用的功能。
  • 当使用API​​时,网站模块将使用诸如var obj = plugin.api("1.0")或plugin.api("1.1")之类的东西来获取要使用的特定版本的API。模块在升级时可以更改其使用的版本。 “obj”的特定版本将是一致的,但 1.0 和 1.1 可能不同。 (有点类似于COM接口)

初步解决的问题:

  • 插件内部应该维护不同版本的API,并提供兼容性。这会引入插件内部实现的复杂性。
  • 网站仍然需要处理用户计算机上的插件未提供所需版本的 API 的情况。

有什么建议/意见吗?

I'm designing the API of browser plugin for website. Here are more details:

  • user will install browser plugin on user's machine, the plugin will be upgraded in future. e.g. adobe flash is a plugin for web browser.
  • our website will launch the plugin, and use the API exposed from plugin. e.g. use the API to draw some graphics on plugin canvas.

The problem I'm try to resolve with the API version:

  • in future different user may have different version of plugin installed. because when upgrade the plugin, there must be some of users not upgraded yet when access our website. So user A may installed plugin 1.0, and user B may have plugin 1.1, user C may have 1.2.
  • we are going to have one website for all the users, so it's website's responsibility to handle different version of API when loading plugin.
  • website is composed of multiple modules, we may upgrade module A and use latest version of plugin API and then released it. In the meanwhile Module B may still use older version of plugin API.

My initial solution:

  • make the maximum compatibility of API, but we may still remove deprecated functions for simplicity.
  • when use API, the website modules will use something like var obj = plugin.api("1.0"), or plugin.api("1.1") to get a specific version of API to use. Modules can change the version it used when upgrade. a specific version of "obj" will be consistent, but 1.0 and 1.1 may be different. (a little bit similar with COM interface)

The issue to the initial solution:

  • Plugin should maintain different version of API inside, and provide compatibility. This will introduce the complexity of plugin internal implementation.
  • website should still need to handle the case that plugin on user's machine are not providing the required version of API.

Any suggestions/comments?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文