创建具有多个基本 url 的 Javascript API 类

Posted

技术标签:

【中文标题】创建具有多个基本 url 的 Javascript API 类【英文标题】:Create a Javascript API Class with multiple base urls 【发布时间】:2022-01-12 09:05:51 【问题描述】:

我的后端包含多个微服务,每个都有自己的基本 url。目前我有usermetadata 服务,但将来可能会扩展。

我有一个 React 应用程序,我正在尝试创建一个 API 包装类,以便在我需要修改某些内容时调用。我的第一种方法是为每个服务创建多个 api 实例并根据需要导入:

import userApi from '../userApi'
import metadataApi from '../metadataApi'

userApi.getUser(user_id)
metadataApi.getCollections()

但我想使用一种不同的方法,不需要记下每个实体的位置以便使用它,如下所示:

import API from '../api'

API.getUser(user_id)
API.getCollections()
API.deleteUser(user_id)

但我不确定如何在不使 API 类膨胀的情况下实现这一目标。我可以在其中导入一组方法,然后在导出之前将它们附加到类原型吗?

我想找到一个合适的结构来更好地分离每个实体,并使其在未来更容易构建和修改。

【问题讨论】:

base 定义:一个概念结构或实体,某事物依赖于它。因此,您不应该为多个实体使用一个 base 【参考方案1】:

说实话,将您的 API 类分成单独的文件/模块是可以的。当应用程序很小时,这感觉有点开销,但随着应用程序的增长,它有助于保持事情井井有条。

您已经表明您的后端 API 被构建为微服务,为什么不在前端也将它们分开实体?当/如果你开始接触不同的端点时,管理你的 API 类会更容易。

不过,在过去,我创建了一个基类,每个 API 类都可以从该基类继承,如果您想以这种方式重用,我可以在其中设置通用逻辑,例如请求标头等。

我什至更进一步,这将创建另一个抽象级别来处理集成是如何发生的,即通过 HTTP,例如,我将在其中声明要使用哪个 HTTP 客户端。这样一来,如果我更改了 HTTP 客户端,我只会在一个地方更改它

那种结构看起来像->

_ServiceProxy.js

GET、POST、PUT、DELETE等常用函数。 此处定义的 HTTP 客户端 此处定义的高级错误处理

_someBaseAPI.js

一个抽象的客户端,它将定义如何与一组常见的微服务进行交互,例如认证逻辑等

UserAPI.js

一个具体/静态类,只对如何处理与用户有关的请求/响应感兴趣

【讨论】:

我支持这种方法。似乎您的架构将从前后采用相同的方法中受益。此外,使用“通用”功能扩展服务可确保您将核心内容保存在一个地方。另一个想法是用普通的 JS/TS 编写这些“服务”或模块,并将它们导入你的 React 生命周期。因此,您可以将它们移植到任何其他 JS 框架。【参考方案2】:

您可以定义和导出一个单独的组件,在该组件中导入所有 api 文件并在其功能中使用单独的 api,然后您就可以将其功能用于特定的 api。

【讨论】:

以上是关于创建具有多个基本 url 的 Javascript API 类的主要内容,如果未能解决你的问题,请参考以下文章

在多个页面中搜索类名并使用 javascript 获取该类的 url

如何使用 JavaScript 创建具有多个可选参数的搜索?

javascript Gulp 4 - 具有外部配置的多文件任务。使用gulp-load-plugins的基本gulpfile模板,用于多个任务文件

如何使用 JavaScript 将包含多个数组的数组作为参数化 URL 传递

如何设计具有多个输入参数的 RESTful URL

重新认识JavaScript里的创建对象