我希望Combinator parsers
( http://debasishg.blogspot.com/2008/04/external-dsls-made-easy-with-scala.html ) 能够用于处理 REST 服务的路由规则的设计用Scalatra
( http://tutorialbin.com/tutorials/80408/infoq-scalatra-a-sinatra-like-web-framework-for-scala ) 实现。
此 REST 服务将用作代理,因此外部应用程序可以访问防火墙内的服务,因为它将具有额外的安全层,可以针对每个 REST 服务的业务需求进行定制。
因此,如果一个人想要访问他们的课程表,那么安全性将低于您想要查看某人的成绩单。
我想要关于去哪里实际获取信息的规则,以及如何返回它,以及在 DSL 中需要什么安全性。
但是,第一个问题是如何基于 DSL 动态更改 REST 服务的路由规则,因为我正在尝试创建一个不需要大量重新编译来添加新规则的框架,只需编写适当的脚本,让它被处理。
那么,是否可以使用 Scala 中的 Combinator Parser 实现 DSL,这将允许 JAX-RS(http://download.oracle.com/javaee/6/tutorial/doc/giepu.html)动态更改路由?
更新:
我还没有设计语言,但这是我想要做的:
route /transcript using action GET to
http://inside.com/transcript/{firstparam}/2011/{secondparam}
return json encrypt with public key from /mnt/publickey.txt
for /education_cost using action GET combine http://combine.com/SOAP/costeducate with
http://combine.com/education_benefit/2010 with
http://combine.com/education_benefit/2011 return html
这是两种可能的想法,其中将请求脚本的规则发送到不同的站点,例如在防火墙内,然后对数据进行加密并返回。
第二个会更复杂,因为将组合 SOAP 和两个 REST 请求的结果,并且需要额外的命令来说明如何组合,但想法是将所有这些放在可以解析的文件中在飞行中。
如果我使用 Groovy,那么可以为路由生成一些新类,这将消除一些性能损失,但我认为使用 Scala 将是最好的选择,即使我受到了性能损失。
我希望创建一个更易于维护的框架,这样新的路由规则就可以由不了解任何 OOP 或函数式语言的人编写,但可以使用Specs
( http://code.google.com/p ) 编写规范/specs/ ) 以便功能方面可以确定他们的要求会定期进行测试。
更新 2:
当我开始进行设计时,我可能会直观地理解一些选项,但不知道为什么。今天我意识到 Groovy 可能是一个更好的解决方案的原因是我可以使用元编程(http://www.justinspradlin.com/programming/groovy-metaprogramming-adding-behavior- )生成路由类dynamic/ ),那么我就可以使用 Scala 或 Groovy 来动态使用生成的路由。如果它们尚不存在,我不确定如何让 Scala 生成这些类。
在 Groovy 以及其他一些语言中,如此处所示 ( http://langexplr.blogspot.com/2008/02/handling-call-to-missing-method-in.html ) 如果缺少方法,您可以动态生成该方法,它将从此存在,因此它将丢失一次。
似乎我应该将 Groovy 与 Java 混合来完成这项工作,但结果可能是一些代码在 Scala 中,一些在 Java 中,用于路由 REST 服务。