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

时间:2019-06-10 11:06:04

标签: javascript class ecmascript-6 prototype

我的后端包括多个微服务,每个微服务都有自己的基本网址。目前,我拥有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类的情况下实现这一目标。我可以在其中导入一系列方法并将其附加到类原型上,然后再导出吗?

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

2 个答案:

答案 0 :(得分:2)

说实话,将您的API类分成单独的文件/模块很好。当应用程序较小时,这似乎有些负担,但是随着应用程序的增长,它可以使事情井井有条。

您已经表明您的后端API已构建为微服务,为什么不也将它们分开放置在前端呢?当/开始遇到不同的端点时,管理API类会更加容易。

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

我什至又走了一步,它将创建另一个层次的抽象来处理集成的发生方式,即通过HTTP,例如,我将声明使用哪个HTTP客户端。这样,如果我更改了HTTP客户端,则只能在一个地方进行更改

这种结构看起来像->

_ServiceProxy.js

常用功能,例如GET,POST,PUT,DELETE等。 此处定义的HTTP客户端 此处定义了高级错误处理

_someBaseAPI.js

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

UserAPI.js

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

答案 1 :(得分:0)

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