2012-04-07 11 views
16

के साथ वेब सेवा मैं एक आधुनिक रीस्टफुल वेब सेवा को कम करने के लिए लिस्प का उपयोग करने के बारे में उत्सुक हूं, लेकिन कई रूपों और कार्यान्वयनों को देखते हुए, यह जानना मुश्किल है कि कहां से शुरू करना है।लिस्प

मुझे यकीन है कि वहां वेब से संबंधित अनुप्रयोगों के लिए लिस्प का उपयोग करने वाले लोग हैं (केवल एसओ शो पर यहां प्रश्नों के माध्यम से चल रहे हैं) लेकिन मैं क्या जानना चाहता हूं कोई लिस्प कार्यान्वयन है जो अधिक उपयुक्त हैं दूसरों की तुलना में वेब सेवाएं? (उदाहरण के लिए मूल यूनिकोड समर्थन, अंतर्निहित वेब से संबंधित पुस्तकालय, प्रदर्शन इत्यादि)

मैं यूनिकोड "हैक्स" या वेब ढांचे की तलाश नहीं कर रहा हूं। मुझे बॉक्स में से बाहर निकलने में अधिक दिलचस्पी है। मैंने खुद को किसी भी लिस्प व्युत्पन्न या कार्यान्वयन के साथ गठबंधन नहीं किया है, हालांकि मुझे सीएलआईएसपी पर सामान्य लिस्प के साथ कुछ मामूली अनुभव है (एक स्नातक कंप्यूटर विज्ञान पाठ्यक्रम के हिस्से के रूप में एक सामान्य बहुपद कैलकुलेटर)। यह जानना अच्छा होगा कि इस समस्या के लिए विशेष रूप से अच्छे विकल्प हैं, खासकर उन लोगों से जिन्होंने वास्तव में इस तरह लिस्प का उपयोग किया है।

उत्तर

13

Racket की मानक लाइब्रेरी में web server library है। मैंने इसके साथ खेला है, लेकिन मुझे लगा कि यह लिस्प के साथ काम करने के मेरे पसंदीदा इंटरैक्टिव तरीके के अनुकूल नहीं था। इसमें कुछ अच्छी विशेषताएं हैं, जैसे नियंत्रण-आधारित प्रवाह नियंत्रण, इसलिए यह एक लायक है।

व्यक्तिगत अनुभव से बोलते हुए, सामान्य लिस्प वेब विकास के लिए एक शानदार विकल्प है। यह मेरा ब्लॉग लागू किया गया है। Hunchentoot सरल और शक्तिशाली और बहुत लिस्पी है। इंटरेक्टिव प्रोग्रामिंग के साथ-साथ कल्पना की जा सकती है, और वेबसाइट्स जैसी चीजों के लिए प्लग-इन हैं (जिन्हें मुझे अभी तक जरूरी नहीं है)।

उस ने कहा, Clojure में वेब प्रोग्रामिंग उतना ही सुखद है। मैंने क्लोजर और Noir का उपयोग करके अपने परिवार के लिए एक वेब-आधारित समुदाय केंद्र लागू किया है। स्टाइलवाइज, नोएर हुनचेनोट और cl-who के संयोजन के समान ही है। बोनस के रूप में, जावा पुस्तकालयों तक पहुंच बेहद उपयोगी हो सकती है। (मेरे मामले में, ओपनआईडी लॉगिन समर्थन को कार्यान्वित करना, जो कि सामान्य लिस्प के साथ मुश्किल था, क्लोजर के साथ एक हवा थी।) इस वजह से, यदि आपके एप्लिकेशन को तीसरे पक्ष की वेब सेवाओं या डेटा प्रारूपों के साथ बातचीत करने की आवश्यकता है, तो मैं सुझाव देता हूं कि Clojure पर अच्छा और लंबा देखो।

आरईएसटी इंटरफेस हुनचेनोट/नोयर-शैली वेब ढांचे में भी करना आसान है। मैं इस संबंध में रैकेट के वेब सर्वर का न्याय नहीं कर सकता, क्योंकि मैं इसके साथ पर्याप्त परिचित नहीं हूं। Clack

कड़क पायथन के WSGI और रूबी के रैक से प्रेरित कॉमन लिस्प के लिए एक वेब अनुप्रयोग माहौल है:

+0

मुझे हंचनटोट पर एक त्वरित नज़र आया है, लेकिन ऐसा लगता है कि यह क्रियाओं के सीमित सेट का समर्थन करता है, क्या यह सही है? (प्राप्त करें और पोस्ट करें) - मुझे इससे थोड़ा अधिक बहुमुखी आवश्यकता होगी। कच्चे http अनुरोध और प्रतिक्रिया शीर्षलेख तक पहुंच वेब सेवा में बहुत महत्वपूर्ण है। क्लोजर/नोएर इस तरह की पहुंच प्रदान करता है। मुझे लगता है कि रैकेट कच्चे हेडर तक भी पहुंच सकता है, लेकिन रैकेट की प्रकृति का आकलन करने के लिए इसे निश्चित रूप से एक त्वरित नज़र से अधिक की आवश्यकता होगी। शायद कुछ रैकेट समर्थक कुछ टिप्पणियां छोड़ देंगे। –

+2

@MattEsch Hunchentoot के साथ, आप 'अनुरोध-विधि *' फ़ंक्शन का उपयोग कर अनुरोध विधि तक पहुंच सकते हैं। यहां तक ​​कि 'परिभाषित-आसान-हैंडलर' भी क्रिया के बारे में परवाह नहीं करता है - यदि आप चाहें तो आप 'कास्टमैजिक' अनुरोध कर सकते हैं, और यह काम करेगा। :) (एक साधारण हैंडलर लिखने का प्रयास करें जो केवल '(प्रतीक-नाम (hunchentoot: अनुरोध-विधि *)) लौटाता है।) नोएर के साथ, प्रेषण तंत्र में मानक HTTP क्रियाओं ('GET',' POST', 'PUT', 'DELETE',' HEAD') के लिए प्रत्यक्ष समर्थन है। Hunchentoot और Noir दोनों आपको HTTP अनुरोध हेडर तक पहुंचने देते हैं। स्पष्टीकरण के लिए –

+0

धन्यवाद। मैं सिर्फ इतना उलझन में था कि क्यों दस्तावेज़ विशिष्ट क्रियाओं का एक बिंदु बना रहे थे और पोस्ट (जैसे यह किसी प्रकार की नवीनता है)। इसे साफ करने के लिए धन्यवाद। मैं Hunchentoot के साथ जाना होगा और देखें कि मैं किसके साथ आ सकता हूं। मैं अभी यह देखने के लिए खुला प्रश्न छोड़ दूंगा कि यह अन्य प्रतिक्रियाएं उत्पन्न करता है या नहीं। –

6

मैं एक पता हो सकता है अपनी जरूरत फिट बैठता है।

उम्मीद है कि यह मदद करता है।