Node.jsで記述されたサイトがありますが、Node.jsが
意図していない何かを行う必要がある場合があります。たとえば、数学的計算を行う場合などです。
この例では、パスワードハッシュを計算します。
この作業を(計算に適した)関数型プログラミング言語で記述された「バックエンド」に任せましょう。 たとえば、
Scalaで 。 機能的には、次のようになります。Node.jsはハッシュのためのハッシュリクエストをバックエンドに送信し、バックエンドはJson形式で計算されたハッシュを考えて考えて送信します。 通常のHTTP要求/応答、複雑なことは何もありません。
ツールキット
「フレームワーク」のセットを選択するという点で、問題を解決するための多くのアプローチがあります。
Sinatraフレームワークを喜んで使用して、(「Rails」ではなく)Rubyで少し書きました。 Node.jsでは、
Expressという名前のSinatraクローンを使用します。 Scalaは対応するクローン
Scalatraも作成したこと
が判明しました。 それを使用します。
Scalaの人気のあるレスト「フレームワーク」
また、Scala用のいくつかの認識された軽量Restフレームワークもあります。
- スプレーは、すべてを実行できるAkka (Erlang for Scala)に基づく超近代的で高速でスケーラブルな「フレームワーク」です。
- 青い目 -認識されたスプレーの先駆者
- フィルタなしは非常に小さく元の「フレームワーク」であり、機能はシナトラに似ています
これらの「フレームワーク」は、コメントの中でユーザー
btdによって提案されました。 しかし、私はそれらのどれも好きではありませんでした-Scala言語自体のように、すべてが高度すぎます。 私はもっと簡単なものが好きです...これは、ここで私がScalaではなく、Scala構文のJavaで書いていることをmanyする人が多い理由の1つです。 私は議論せず、Javascriptを好みます。Scalaは、「関数はオブジェクトです」というアプローチを与えてくれます。
この全体を起動する方法
Zen Buddhistの場合、2つのファイルで十分
“javac -d classes *.java; scalac -classpath […] -d classes *.scala”
という形式の
build.sh “javac -d classes *.java; scalac -classpath […] -d classes *.scala”
“javac -d classes *.java; scalac -classpath […] -d classes *.scala”
および
“scala -classpath […] -D=8090 Main”
の形式の
run.shただし、ファイル名マスクと1行の長い
クラスパスで混乱しないように、「コレクター」を使用することをお勧めします。正しいコレクター(Mavenではない)は、シェルよりもはるかに自由(および読みやすさ)を提供します。 彼はあなたに使用されているすべてのライブラリをダウンロードし、
クラスパスに各Jar'nikを名前で追加します(手動で行う必要はありません)。
若い(現在バージョン1.0について)および開発中の
Gradleプロジェクトを取り上げます
。Mavenよりも古き良き
Antを思い起こさせます。開発者をタイトなフレームに閉じ込めることはありませんが、逆に、完全な創造性の自由、そして適切な
Groovy言語 (Javaの世界でのRubyクローン)でさえも。
設置
JDKを入れました。 チェック:
java -version
* JDKフォルダーで
JAVA_HOME
システム変数を設定し、PATHに
bin
を登録する必要がある場合もあります。
Scalaをダウンロードし、
bin
を
PATH
書き込みます。 チェック:
scala –version
Gradleをダウンロードし、
bin
を
PATH
書き込みます。 チェック:
gradle –v
プロジェクト
プロジェクト自体は
githubにあります。 ここでは、3つのメインファイルのコードを示します。
Gradleの組み立て手順
-build.gradle
実際、REST Webサービスにより、
Whirlpoolまたは
SHA-512 -
Hasher.scalaでパスワードをハッシュできるようになり
ました。 package web import hash.Whirlpool import hash.SHA class Hasher extends tools.WebService { def path = "/ѣ" get("/") { " : Whirlpool, SHA" } get("/Whirlpool/:what") { val = params("what") json("" -> , "ѣ" -> Whirlpool.hash()) } get("/SHA/:what") { val = params("what") json("" -> , "ѣ" -> SHA.hash()) } }
そして、私が書いたWebサーバーランチャー(build.gradleで指定された「パッケージ」パッケージからすべてのWebサービスを起動します)
-Main.scala import org.mortbay.jetty.Server import org.mortbay.jetty.servlet.{Context, ServletHolder} import tools._ object Main extends App {
打ち上げ
アーカイブをダウンロードして解凍し、フォルダーに移動して
gradle go
コマンドを実行します。 成功すると、コンソールにWebサーバーの起動が表示されます。
グラドルゴー
:compileJava
:compileScala
:processResourcesの最新情報
:クラス
:行く
SLF4J:クラス「org.slf4j.impl.StaticLoggerBinder」のロードに失敗しました。
SLF4J:デフォルトの無操作(NOP)ロガー実装
SLF4J:詳細については、http://www.slf4j.org/codes.html#StaticLoggerBinderを参照してください
>建物>:行く
確認する
あいさつSHA-512アルゴリズムを使用してパスワードをハッシュするWhirlpoolアルゴリズムを使用してパスワードをハッシュする何もする必要がない(または面白い)場合は、もっと読むことができます
スカラトラGradleでアセンブリを記述する方法シンプルなジャージーRESTサービスロシア語のGradleについてScalaとは何で、何が便利ですかフィルタなし-Scala用の軽量RESTフレームワークSprayはScalaの高度なRESTフレームワークですBlue Eyesは、Scala用の高度なRESTフレームワークでもあります。