创建具有多个基本 url 的 Javascript API 类
Posted
技术标签:
【中文标题】创建具有多个基本 url 的 Javascript API 类【英文标题】:Create a Javascript API Class with multiple base urls 【发布时间】:2022-01-12 09:05:51 【问题描述】:我的后端包含多个微服务,每个都有自己的基本 url。目前我有user
和metadata
服务,但将来可能会扩展。
我有一个 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模板,用于多个任务文件