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 パーサーを使用して 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
これらは、トランスクリプトのリクエストのルールがファイアウォール内などの別のサイトに送信され、データが暗号化されて返される場合に考えられる 2 つのアイデアです。
2 つ目は、SOAP と 2 つの 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 ) に示すように、メソッドが欠落している場合、動的に実行できますメソッドを生成すると、それ以降存在するため、1回欠落します。
これを機能させるには、Groovy と Java を組み合わせる必要があるように思われますが、REST サービスのルーティングのために、一部のコードが Scala にあり、一部が Java にあるという結果になる可能性があります。