多动作 API 最佳实践/设计模式
Multi actions API best Practice / Design Pattern
我有一个 API 具有多项操作 POST 功能。
它的结构是这样的:
exports.myFunction = functions.https.onRequest((request: any, response: any) => {
const action: 'a' | 'b' | 'c' = request.body.action;
switch(action) {
case 'a':
doProcessA();
break;
case 'b':
doProcessB();
break;
case 'c':
doProcessC();
break;
}
response.send('done');
});
我无法将此函数拆分为 3 个公开的函数。关于这个限制,我的代码是否干净,或者是否有更好的实践/设计模式来处理这种情况?
您使用的 controller/logic 类型并不少见。例如 ASP.net Web API Routing 采取了大致相同的方法。
您只想确保您的代码和 API 以合理的方式组合:
- 不同的 API 有自己的路由分支 - 就像您发布的那样。
- 路由尽可能高效和干净。
微服务和 FaaS 设计的主要原则是关注点分离。
如果您的流程相似,或者重用处理的某些部分,您的模式就有意义。
但是,如果你的过程很复杂,如果它们可以独立发展,如果他需要的资源在每个过程中都是相同的,那么这个模式就不是正确的。最好有1个路由器,3个“进程函数”。
你只需要保留一个入口点,没问题,这个功能只会将请求路由到相应的流程功能。
进程函数只负责一个进程。它可以独立进化,可以独立扩展,你可以根据需要调整它(memory/cpu)
一些高级的API网关也可以代替你的路由器功能。
我有一个 API 具有多项操作 POST 功能。
它的结构是这样的:
exports.myFunction = functions.https.onRequest((request: any, response: any) => {
const action: 'a' | 'b' | 'c' = request.body.action;
switch(action) {
case 'a':
doProcessA();
break;
case 'b':
doProcessB();
break;
case 'c':
doProcessC();
break;
}
response.send('done');
});
我无法将此函数拆分为 3 个公开的函数。关于这个限制,我的代码是否干净,或者是否有更好的实践/设计模式来处理这种情况?
您使用的 controller/logic 类型并不少见。例如 ASP.net Web API Routing 采取了大致相同的方法。
您只想确保您的代码和 API 以合理的方式组合:
- 不同的 API 有自己的路由分支 - 就像您发布的那样。
- 路由尽可能高效和干净。
微服务和 FaaS 设计的主要原则是关注点分离。
如果您的流程相似,或者重用处理的某些部分,您的模式就有意义。
但是,如果你的过程很复杂,如果它们可以独立发展,如果他需要的资源在每个过程中都是相同的,那么这个模式就不是正确的。最好有1个路由器,3个“进程函数”。
你只需要保留一个入口点,没问题,这个功能只会将请求路由到相应的流程功能。
进程函数只负责一个进程。它可以独立进化,可以独立扩展,你可以根据需要调整它(memory/cpu)
一些高级的API网关也可以代替你的路由器功能。