我正在尝试构建一个(尽可能接近的)通用 REST API 来简化所有标准 CRUD 休息调用。例如,我想编写一个 read
方法
models.{Entity}.findById(id)
.exec(function(err, entity) {
res(err, entity)
}
{Entity}
应使用其余调用中的参数动态填充,例如:
GET /api/v1/entity/:id/:type
GET /api/v1/entity/1234567890/user
显然我可以做一个像这样的半通用解决方案:
if (type === 'user') var query = models.User;
但在我看来,这并不是一个很好的解决方案。
问题
是否有一种简单的方法来实现这一点,并且这在更大的应用程序上可行吗?因为我所知道的关于其他语言的反射的一切,它们的性能并不是那么好。
关于如何实现这样的框架还有其他建议吗?
解决方案:
就像丹尼尔建议我创建一个 map
var map = new Map();
map.set('user', models.User);
最佳答案
当涉及到不同的反射技术、不同的语言、不同的语言实现、底层硬件/操作系统平台时,反射性能是全面的。虽然 Java 的性能较差是出了名的,但其他语言的开销却可以忽略不计。 TLDR:我不会排除它,除非你有证据表明它确实会减慢你的速度。
在这种情况下,作为JavaScript,我认为你可以做models[name.toLowerCase()]
,它与models.User
等相同,但很通用。
如果反射确实有成本,您仍然可以通过memoizing来一般性地处理它。结果,即一般计算一次并无限期地缓存结果类。
关于javascript - REST API 的思考,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813374/