DSL实现用于REST服务路由和处理的业务规则
|
我希望ѭ0((http://debasishg.blogspot.com/2008/04/external-dsls-made-easy-with-scala.html)可以用于处理REST服务的路由规则的设计用ѭ1来实现((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-动态/),那么我将能够使用Scala或Groovy动态使用所生成的路由。我不确定如何使Scala生成类(如果尚不存在)。
在Groovy以及其他一些语言中,如此处所示(http://langexplr.blogspot.com/2008/02/handling-call-to-missing-method-in.html),如果缺少方法,则可以动态地生成方法,此方法将存在,因此将丢失一次。
几乎我应该混合使用Groovy和Java来完成这项工作,但是结果可能是,某些代码在Scala中,而某些在Java中,用于路由REST服务。
没有找到相关结果
已邀请:
1 个回复
辩谷变充
,
等。我最初并不建议这样做,因为它最常用于会话,但是它具有RESTful我认为该模型是无状态的。 我不了解Scalatra,所以我不知道它是否适合这种情况。