2011-02-04 11 views
13

मैं भयानक .NET (WCF) REST क्षमताओं के लिए एक विकल्प की तलाश में हूं।क्या अच्छा ओपन सोर्स आरईएसटी webservice तकनीक बाहर है?

क्यों?

मुझे ओपन सोर्स टेक्नोलॉजी में गहरी दिलचस्पी है, लेकिन जब वेब सर्विसेज की बात आती है तो मुझे .NET webservices को छोड़कर कोई अनुभव नहीं होता है।

इसके अलावा, मैं वर्तमान में बहुत सारे जावा और पायथन का उपयोग कर रहा हूं, और मैं माइक्रोसॉफ्ट टेक्नोलॉजी स्टैक से दूर जा रहा हूं।

कृपया किसी भी प्रोग्रामिंग भाषा में विकल्प सुझाएं, लेकिन समझाएं कि यह कुछ कारणों से क्यों अच्छा या बेहतर है। (इस कारण को भाषा की पसंद से कड़ाई से संबंधित किया जा सकता है)

मैं क्या जानना चाहता हूं?

  • उपयोग की आसानी
    • स्थापना
    • विन्यास
    • पीढ़ी क्षमताओं
    • आईडीई एकीकरण
    • तैनाती
  • सीखना वक्र
  • पेशेवरों और विपक्ष
  • आदि

उत्तर

7

स्प्रिंग 3.0 बाकी:

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

@RequestMapping(value="/hotels/{hotel}/bookings/{booking}", 
     method=RequestMethod.GET) 
public String getBooking(@PathVariable("hotel") long hotelId, 
      @PathVariable("booking")  long bookingId, Model model) { 

    Hotel hotel = hotelService.getHotel(hotelId); 
    Booking booking = hotel.getBooking(bookingId); 
    model.addAttribute("booking", booking); 
    return "booking"; 
} 

हुड के तहत, यूआरआई स्ट्रिंग में परिवर्तनीय "होटल" को बुकिंग के रूप में पैरामीटर सूची में एक लंबे समय में परिवर्तित कर दिया जाता है। वसंत आरईएसटी इसी तकनीक का उपयोग कर कस्टम कक्षाओं में मार्शल JSON ऑब्जेक्ट्स भी कर सकता है। ध्यान दें कि इस विधि को RequestMethod.GET के रूप में एनोटेट किया गया है, जिसका अर्थ है कि इसे जीईटी अनुरोधों के लिए बुलाया गया है लेकिन POST अनुरोध नहीं है।

स्प्रिंग 3.0 आरईएसटी पहियों या मार्शल/अनारशल JSON पाठ को हाथ से/जावा ऑब्जेक्ट्स को हाथ से फिर से शुरू करने की आवश्यकता को समाप्त कर रीस्टफुल वेब सेवाओं को बनाना आसान बनाता है।

REST In Spring MVC शीर्षक वाले स्प्रिंगसोर्स ब्लॉग पर एक डेमो है। सीखने की अवस्था कम है, लेकिन काम करने के लिए डेमो प्राप्त करने पर निर्भरता के लिए कुछ समय लग सकता है। एक बार जब आप सेटअप कर लें और एक कामकाजी डेमो हो, तो सबसे कठिन हिस्सा खत्म होना चाहिए।

आईडीई एकीकरण के लिए, Spring Roo देखें। मैंने इसका उपयोग नहीं किया है, लेकिन मैंने सुना है कि इसमें कुछ विशेषताएं हैं जो आपके जीवन को आसान बनाने के लिए ग्रहण आईडीई के साथ एकीकृत करती हैं।

Restlets:

Restlets केवल बाकी के लिए डिजाइन किए गए थे। नतीजतन, ओवरहेड स्प्रिंग 3.0 से बहुत कम है। रेस्टलेट उन मामलों के लिए बेहतर अनुकूल हैं जहां आपके पास जीयूआई नहीं है, और जहां आप एमवीसी से चिंतित नहीं हैं। Restlets आसानी से एक सर्वर और एक ग्राहक दोनों के रूप में काम कर सकते हैं। इसमें एक एम्बेडेड सर्वर भी है जिसे आप चला सकते हैं, जो जेटी या टॉमकैट जैसे कंटेनर की आवश्यकता को समाप्त करता है।

मुझे पाइथन के लिए बहुत कम जोखिम मिला है, लेकिन मैंने Google App Engine के वेब ऐप फ्रेमवर्क के कार्यान्वयन के बारे में जो देखा है, राउटर अवधारणा बहुत समान महसूस करती है। एक अजगर पृष्ठभूमि के साथ उन सीखने की अवस्था प्राप्त कर सकते हैं एक बहुत कम होने की:

@Override 
public Restlet createInboundRoot() { 
    Router router = new Router(getContext()); 
    getConnectorService().getClientProtocols().add(Protocol.FILE); 

    // Serve the files generated by the GWT compilation step. 
    Directory dir = new Directory(getContext(), LocalReference.createFileReference(new File("war/"))); 
    router.attachDefault(dir); 
    router.attach("/contacts/123", ContactServerResource.class); 

    return router; 
} 

यह ग्राहक पक्ष पर GWT उपयोग करता है; मैं उस भाग को बाहर लेना पसंद करता हूं क्योंकि यह मुझे जावा स्विंग का बहुत अधिक याद दिलाता है। जबकि कुछ लोगों को यह फायदेमंद लगता है, मेरी व्यक्तिगत वरीयता उन प्रौद्योगिकियों से चिपकना है जो वेब की तरह अधिक महसूस करते हैं।

नीचे स्टैंडअलोन मोड का उपयोग कर एक आरईएसटी सर्वर का एक सरल उदाहरण है। सर्वर पोर्ट 8182 पर चलता है, और यह जीईटी अनुरोधों के लिए सुनता है। इसमें वसंत आरईएसटी ढांचे के समान समान एनोटेशन-आधारित मॉडल है, जो विभिन्न HTTP विधियों को विभाजित करने में मदद करता है और उन्हें आपकी कक्षाओं में विभिन्न तरीकों से इंगित करता है।

public class FirstServerResource extends ServerResource { 

    public static void main(String[] args) throws Exception { 
     // Create the HTTP server and listen on port 8182 
     new Server(Protocol.HTTP, 8182, FirstServerResource.class).start(); 
    } 

    @Get 
    public String toString() { 
     return "hello, world"; 
    } 

} 

चेक बाहर अधिक जानकारी और Restlets ढांचे के उदाहरण के लिए Restlet Web Site: यह एक बहुत ही बुनियादी "नमस्ते दुनिया" बाकी उदाहरण है। रेस्टलेट्स में वसंत की तुलना में थोड़ा कम सीखने की वक्र है क्योंकि इसे आरईएसटी के लिए लक्षित किया गया है; नतीजतन, इसमें स्प्रिंग के साथ शामिल सभी अतिरिक्त कार्यक्षमताएं शामिल नहीं होतीं जो कभी-कभी किसी समस्या का उत्तर ढूंढ सकती हैं। यदि आप कुछ हल्के वजन की तलाश में हैं तो रेस्टलेट निश्चित रूप से जाने का तरीका हैं।

इन दोनों ढांचे में से दोनों टॉमकैट, जेट्टी के साथ-साथ Google App Engine पर भी चलेंगे।

3

वहाँ एक बाकी/HTTP ग्राहक (ओपन-सोर्स प्रोजेक्ट) के रूप में RESTSharp और OpenRasta

5

ServiceStack अधिक हाल के घटनाक्रमों में से एक है है। मैंने अभी तक इसके साथ बहुत कुछ नहीं किया है, लेकिन अब तक यह बहुत प्यारा लगता है।

6

यदि आप जावा का उपयोग कर रहे हैं और आप वसंत से परिचित हैं, तो आपको निश्चित रूप से स्प्रिंग एमवीसी 3.x पर एक नज़र रखना चाहिए। यह संस्करण बदसूरत एक्सएमएल कॉन्फ़िगरेशन से दूर चला जाता है, और इसका वाक्यविन्यास जेएक्स-आरएस की चश्मा के समान ही है। उस ने कहा, यदि आप वसंत को जानते हैं, तो स्प्रिंग एमवीसी 3.0 सीखना न्यूनतम होगा। हालांकि, अगर आपको आईओसी पैटर्न के साथ समझने में परेशानी हो रही है और क्या नहीं, तो यह एक लंबा दर्दनाक अनुभव होगा। :)

ध्यान रखें, स्प्रिंग एमवीसी 3.x शुद्ध आरईएसटी नहीं है, और यह वसंत एमवीसी डेवलपर्स के आधार पर भविष्य में कभी भी भविष्य में नहीं होगा। उनका लेना पहले से ही बहुत अच्छे आरईएसटी कार्यान्वयन थे और स्प्रिंग एमवीसी 3.x पूरी तरह से पुनर्स्थापित करने का कोई मतलब नहीं है।

एक और विकल्प मैं निश्चित रूप से आपको सलाह दूंगा कि Jersey है। जर्सी शुद्ध आरईएसटी है, दूसरे शब्द में, यह जेएक्स-आरएस का कार्यान्वयन है। जर्सी ने मुझे सीखने में 30 मिनट लगाए। मेरी राय में, एनोटेशन स्प्रिंग एमवीसी 3.x की तुलना में बहुत अधिक शक्तिशाली और समृद्ध हैं। स्प्रिंग एमवीसी 3.x से एनोटेशन मेरे लिए सुंदर वेनिला प्रतीत होता है। जर्सी स्वचालित रूप से आपके लिए WADL उत्पन्न करेगा, हालांकि यह बहुत ही बुनियादी है ... लेकिन एक होने के बजाय कोई बेहतर नहीं है। यदि आप चाहें तो निश्चित रूप से अपने WADL को कस्टमाइज़ कर सकते हैं। (वैसे, डब्ल्यूएडीएल डब्लूएसडीएल का आरईएसटी संस्करण है, अगर आपको नहीं पता कि इसका क्या अर्थ है)। जर्सी मूल रूप से आपके पैकेज को सभी Resource कक्षाओं का पता लगाता है और आपके पास कॉन्फ़िगरेशन के आधार पर WADL उत्पन्न करता है, जो बहुत साफ है। आखिरी बात यह है कि मैं इंगित करना चाहता हूं कि जर्सी के पास आपके आराम से वेब सेवा का आसानी से परीक्षण करने के लिए एक महान परीक्षण ढांचा है। एक और शब्द में, उनके परीक्षण ढांचे में आपकी यूनिट टेस्ट को आपकी वेब सेवा का परीक्षण करने के लिए आसानी से ग्रिज़ली या इन-मेमोरी सर्वर को आग लगने की अनुमति मिलती है।यह निश्चित रूप से अब तक का सबसे अच्छा उपयोग है। अपने पैरों को गीला करने के लिए यहां एक बहुत ही आसान ट्यूटोरियल है: http://www.vogella.de/articles/REST/article.html। यह वास्तव में है आसान है। :)

एफवाईआई, मैंने स्प्रिंग एमवीसी 3.x और जर्सी दोनों का उपयोग किया है।

+0

जर्सी वास्तव में दिलचस्प लग रहा है, इसमें देखेंगे! धन्यवाद ;-) –

+0

जर्सी की एनोटेशन वास्तव में समृद्ध है, कम से कम वसंत एमवीसी 3.x की तुलना में।आप विधि संसाधन पैरामीटर के माध्यम से इसे पारित करने के बजाय अपने 'संसाधन' वर्ग (मूल रूप से स्प्रिंग एमवीसी के 'नियंत्रक' वर्ग के समतुल्य) में किसी संपत्ति के लिए '@ पथपाराम' लागू कर सकते हैं .. बहुत उपयोगी, खासकर यदि 'संसाधन' कक्षा में सभी एपीआई उस विशेष पथ चर की आवश्यकता है। स्प्रिंग एमवीसी 3.x में, आपको 'नियंत्रक' वर्ग में एक ही प्रभाव प्राप्त करने के लिए 'नियंत्रक' वर्ग में प्रत्येक विधि सेट करना होगा ... या कम से कम, मुझे नहीं पता कि स्प्रिंग एमवीसी 3 में इसे सुंदर तरीके से कैसे किया जाए ।एक्स। – limc

5

Ruby और रेल (Ruby on Rails) को पुनर्स्थापित सेवा के लिए बहुत अच्छा समर्थन है। असल में रेल डिज़ाइन का समर्थन करता है और प्रोत्साहित करता है और रीस्टफुल तरीके से विकसित होता है।

रूबी की मजबूत डीएसएल सुविधा के लिए धन्यवाद, आरईएसटी सेवा लिखना बहुत सरल और आसान है। चूंकि आपके पास पाइथन अनुभव है, इसलिए रूबी सीखना आसान हो सकता है।

इस प्रभाव को देखने के लिए guide का संदर्भ लें कि कैसे यूआरएल (रेल में मार्ग कहा जाता है) परिभाषित किया जाता है।

अन्य रूबी वेब ढांचे जैसे सिनात्रा भी इस पर एक अच्छा काम करते हैं।

बीटीडब्ल्यू, सबसे अच्छी चीजें यह है कि रूबी और रेल दोनों खुले स्रोत हैं, और रूबी समुदाय बहुत ही भयानक और बहुत सक्रिय है।

1

पूरी तरह RESTful वेब सेवाओं के लिए विकसित एक खुला स्रोत ढांचे Recess

कहा जाता है यह बहुत पुरानी नहीं है, लेकिन उद्योग से अच्छा ध्यान मिल गया है। अल्काटेल-ल्यूसीन ने पहले ही इस ढांचे का उपयोग करके अपनी कुछ सेवाओं को विकसित करने के लिए a competition on TopCoder की व्यवस्था की है। Recess web site

3

पर

विवरण देखें मैं तुम्हें servicestack.net यह सादगी और गति के लिए डिज़ाइन किया गया है की जाँच और बहुत कम कृत्रिम अवधारणाओं जहां इसे से बाहर काम करता है एक बहुत ही सूखी और संक्षिप्त एपीआई बनाए रखने में सक्षम है और स्वचालित रूप से परिचय करने के लिए स्वागत बिना किसी कॉन्फ़िगरेशन या कोड-जेन के बॉक्स।

यह सर्वोत्तम प्रथाओं को प्रोत्साहित करता है क्योंकि इसे दूरस्थ सेवाओं के विकास के लिए मार्टिन फाउलर्स गेटवे और डीटीओ पैटर्न के आसपास मॉडलिंग किया जाता है।

Spring.NET उदाहरण के लिए बराबर कोड ऊपर

विन्यास (AppHost में)

Routes.Add<Booking>("/hotels/{HotelId}/bookings/{BookingId}"); 

सी # कोड

public class BookingService : RestServiceBase<Booking> 
{ 
    public IHotelService hotelService { get; set; } //auto-injected by IOC 

    public object OnGet(Booking request) 
    { 
     var hotel = hotelService.GetHotel(request.HotelId); 
     var booking = hotel.GetBooking(request.BookingId); 
     return booking; 
    } 
} 

को ऐसा ही एक उदाहरण होगा बुकिंग सेवा लाइव Northwind Web Services demo द्वारा देखी जा सकती है।

यह सभी कॉन्फ़िगरेशन और कोड (एक्स्ट डीटीओ) है जिसे आपको उस सेवा के लिए लिखने की आवश्यकता है और यह स्वचालित रूप से जेएसओएन, एक्सएमएल, जेएसवी, सीएसवी, एसओएपी 1.1/1.2 और एचटीएमएल एंडपॉइंट्स और प्रारूपों के माध्यम से स्वचालित रूप से उपलब्ध है, बिना किसी अतिरिक्त कॉन्फ़िगरेशन के ।

प्रदान किए गए सभी एंडपॉइंट्स और प्रारूपों के साथ-साथ ऑटो जेनरेट/मेटाडाटा और दस्तावेज़ीकरण पृष्ठों पर अधिक जानकारी के लिए Hello World example चेकआउट करें।

संबंधित मुद्दे