मेरे पास Node.js में लिखी गई साइट है, और कभी-कभी मुझे वहाँ कुछ करने की आवश्यकता होती है जिसके लिए Node.js का
इरादा नहीं है : उदाहरण के लिए, कुछ गणितीय गणनाएँ करने के लिए।
इस उदाहरण में, हम पासवर्ड हैश की गणना करेंगे।
आइए इस कार्य को "प्रोग्रामिंग के लिए उपयुक्त" (बैक्यूट) में लिखा गया है जो कार्यात्मक प्रोग्रामिंग भाषा है। उदाहरण के लिए,
स्काला पर। कार्यात्मक रूप से, यह इस तरह होगा: Node.js हैशिंग के लिए "बैकएंड" के लिए एक हैश अनुरोध भेजता है, "बैकएंड" सोचता है और सोचता है और जवाब में गणना की गई हैश को Json प्रारूप में भेजता है। सामान्य HTTP अनुरोध-प्रतिक्रिया, कुछ भी जटिल नहीं है।
उपकरण
"फ्रेमवर्क" का एक सेट चुनने के मामले में समस्या को हल करने के लिए कई दृष्टिकोण हैं।
मैंने रूबी में थोड़ा लिखा ("रेल्स पर नहीं"), खुशी के साथ
सिनात्रा फ्रेमवर्क का उपयोग करते हुए। और Node.js पर मैं
एक्सप्रेस नाम के एक सिनात्रा क्लोन का उपयोग करता हूं। यह
पता चला कि स्काला ने संगत क्लोन -
स्कैलट्रा भी लिखा था। हम इसका उपयोग करेंगे।
स्काला के लिए लोकप्रिय आराम "रूपरेखा"
स्काला के लिए कई मान्यता प्राप्त हल्के रेस्ट फ्रेमवर्क भी हैं:
- स्प्रे एक अल्ट्रामॉडर्न, तेज़, स्केलेबल "फ्रेमवर्क" है जो अक्का (स्काला के लिए एलांग) पर आधारित है जो सब कुछ कर सकता है
- नीली आँखें - मान्यता प्राप्त स्प्रे अग्रदूत
- अनफ़िल्टर्ड सिनात्रा की कार्यक्षमता के समान एक बहुत छोटा और मूल "ढांचा" है
ये "फ्रेमवर्क" मुझे टिप्पणियों में उपयोगकर्ता
btd द्वारा सुझाए गए थे। हालाँकि, मैंने उनमें से किसी को भी पसंद नहीं किया है - सब कुछ बहुत परिष्कृत है, जैसा कि स्काला भाषा में है। मुझे कुछ सरल लगता है ... यह आंशिक रूप से इसलिए हो सकता है कि बहुत से लोग यह संकेत दे सकते हैं कि यहाँ मैं स्काला में नहीं, बल्कि जावा में स्काला वाक्य रचना में लिख रहा हूँ। मैं तर्क नहीं देता, मैं जावास्क्रिप्ट पसंद करता हूं, और स्काला मुझे सिर्फ यह बताता है कि "फ़ंक्शन एक ऑब्जेक्ट है", जो जावा में जावास्क्रिप्ट की तुलना में कमी थी।
इस पूरी चीज को कैसे लॉन्च किया जाए
यदि ज़ेन बौद्ध में, तो दो फाइलें पर्याप्त हैं:
build.sh of “javac -d classes *.java; scalac -classpath […] -d classes *.scala”
“javac -d classes *.java; scalac -classpath […] -d classes *.scala”
और
run.sh of the फॉर्म
“scala -classpath […] -D=8090 Main”
।
हालांकि, "कलेक्टर" का उपयोग करना बेहतर है, इसलिए फ़ाइल नाम मास्क के साथ गड़बड़ न करें, और एक पंक्ति में एक लंबी
कक्षा के साथ: एक सही कलेक्टर (मावेन नहीं) आपको एक शेल की तुलना में बहुत अधिक स्वतंत्रता (और पठनीयता) देगा। वह आपके लिए उपयोग किए जाने वाले सभी पुस्तकालयों को डाउनलोड करेगा, और वह प्रत्येक जार'निक को नाम के साथ वर्गपथ में जोड़ देगा (और आपको इसे मैन्युअल रूप से नहीं करना होगा)।
हम युवा (अब संस्करण 1.0 के बारे में) और
ग्रैडल प्रोजेक्ट को विकसित करेंगे, जो मुझे मावेन की तुलना में अच्छे पुराने
चींटी की अधिक याद दिलाता है, जिसमें यह डेवलपर को तंग फ्रेम में लॉक नहीं करता है, लेकिन, इसके विपरीत, देता है रचनात्मकता की पूर्ण स्वतंत्रता, और यहां तक कि एक पर्याप्त
ग्रूवी भाषा (जावा दुनिया में रूबी क्लोन) में भी।
स्थापना
हमने
जेडीके लगा दिया। जाँच करें:
java -version
* आपको JDK फ़ोल्डर पर
JAVA_HOME
सिस्टम वैरिएबल सेट करने और PATH में
bin
रजिस्टर करने की आवश्यकता हो सकती है।
स्काला डाउनलोड करें, और
PATH
को
bin
लिखें। जाँच करें:
scala –version
ग्रेडेल को डाउनलोड करें, और
PATH
को
bin
लिखें। जाँच करें:
gradle –v
परियोजना
परियोजना स्वयं
गितुब पर स्थित
है । यहां मैं तीन मुख्य फाइलों का कोड दूंगा।
ग्रैडल के लिए विधानसभा निर्देश -
build.gradle
अब, वास्तव में, हमारी REST वेब सेवा, जो
व्हर्लपूल या
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()) } }
और वेब सर्वर लांचर जो मैंने लिखा था (बिल्ड.ग्रेडल में निर्दिष्ट "पैकेज" पैकेज से सभी वेब सेवाओं को लॉन्च करता है) -
मेनकाला import org.mortbay.jetty.Server import org.mortbay.jetty.servlet.{Context, ServletHolder} import tools._ object Main extends App {
हम लॉन्च करते हैं
संग्रह डाउनलोड करें , इसे अनपैक करें, फ़ोल्डर में जाएं और
gradle go
कमांड को निष्पादित करें। सफल होने पर, आप कंसोल में वेब सर्वर का शुभारंभ देखेंगे:
धीरे-धीरे जाना
: संकलनजवा
: संकलनशील
: processResources यूपी-टू-डेट
: कक्षाएं
: जाओ
SLF4J: "org.slf4j.impl.StaticLoggerBinder" श्रेणी को लोड करने में विफल।
SLF4J: नो-ऑपरेशन (एनओपी) लकड़हारा कार्यान्वयन के लिए डिफ़ॉल्ट
SLF4J: अधिक विवरण के लिए http://www.slf4j.org/codes.html#StaticLoggerBinder देखें
> बिल्डिंग>: जाओ
चेक
ग्रीटिंगSHA-512 एल्गोरिथ्म का उपयोग करके हमारे पासवर्ड को हैश करेंव्हर्लपूल एल्गोरिथ्म का उपयोग करके हमारे पासवर्ड को हैश करेंयदि आपके पास करने के लिए (या दिलचस्प) कुछ भी नहीं है, तो आप और अधिक पढ़ सकते हैं
Scalatraग्रैडल पर असेंबली कैसे लिखेंसरल जर्सी आराम सेवारूसी में ग्रैडल के बारे मेंस्काला क्या है और यह क्या सुविधाजनक हैअनफ़िल्टर्ड - स्काला के लिए हल्के आरईएस फ्रेमवर्कस्प्रे स्काला के लिए एक उन्नत REST फ्रेमवर्क हैब्लू आइज़ भी स्काला के लिए एक उन्नत REST फ्रेमवर्क है।