उनके पास बहुत ही समान उपयोग के मामले हैं, जैसे कि ServiceStack परियोजना के लिए मुख्य अनुरक्षक, मेरे पास ServiceStack के लाभों और इसके संदेश-आधारित डिज़ाइन के कई प्राकृतिक लाभों के बारे में अच्छी जानकारी है ।
2008 के बाद से सर्विसस्टैक ओएसएस-रन प्रोजेक्ट के रूप में अपनी शुरुआत से ही सही डिजाइन को बढ़ावा देने और घर्षण-मुक्त दूरस्थ सेवाओं के कार्यान्वयन के एकल लक्ष्य के रूप में रहा है।
सरल और सुरुचिपूर्ण डिजाइन
परम सरलता के लिए इसकी खोज में, यह एक सरल और सुरुचिपूर्ण कोर के आसपास बनाया गया है - इसकी अधिकांश विशेषताओं के साथ स्वाभाविक रूप से आपके मॉडल के लिए बाध्यकारी है , न कि आपके नियंत्रक - जो MVC, WebApi और साथ ही हर दूसरे वेब सेवा फ्रेमवर्क Microsoft ने उत्पादित किया है )।
संदेश-आधारित डिज़ाइन को अपनाना दूरस्थ सेवाओं के लिए एक बेहतर दृष्टिकोण प्रदान करता है, जिसमें वे अधिक एक्सटेंसिबल और कम भंगुर सेवाओं को बढ़ावा देते हैं, पहुंच और कॉलिंग पैटर्न को सरल बनाते हैं, और कई अन्य प्राकृतिक लाभ होते हैं जो आपको मुफ्त में मिलते हैं ।
एक कोर मिशन के रूप में, हम हर चरण में जटिलता से लड़ते हैं, एक अदृश्य और गैर-दखल देने वाले एपीआई को रखने का लक्ष्य रखते हैं और किसी भी नई अवधारणाओं या कृत्रिम निर्माणों को शुरू करने से बचते हैं जो आज .NET या वेब सेवा डेवलपर्स से पहले से परिचित नहीं हैं।
एक उदाहरण के रूप में आपकी IService<T>
सेवा का कार्यान्वयन ऑटो-वायर्ड निर्भरताओं के साथ सिर्फ एक मानक C # वर्ग है। कोर रन-टाइम IHttpRequest और IHttpResponse प्रकार के चारों ओर एक सुसंगत और एकीकृत API प्रदान करने के लिए पतले और हल्के रैपर का उपयोग किया जाता है । वे अंतर्निहित ASP.NET या HttpListener के अनुरोध और प्रतिक्रिया कक्षाओं तक पहुंच की अनुमति देते हैं ताकि आप ServiceStack का उपयोग करते समय कभी भी प्रतिबंधित न हों।
WCF और WebApi के साथ विरोधाभासी
यहाँ विषम एपीआई शैलियों का एक संक्षिप्त अवलोकन है जो ServiceStack और WCF को बढ़ावा देते हैं । WebApi WCF के लिए भिन्न है कि यह REST-ful API डिज़ाइन को प्रोत्साहित करता है। 2 के बीच के उदाहरणों के लिए, यह एकमात्र ज्ञात उदाहरण है, जिसके पास ServiceStack और WebApi दोनों में समान सेवा है ।
बेस्ट प्रैक्टिस रिमोट सर्विसेज
ServiceStack में सादगी, प्रदर्शन पर और वेब / रिमोट सेवा को बढ़ावा देने के लिए प्राथमिक रूप से ध्यान केंद्रित किया जाता है, जो मार्टिन फाउलर्स के रिमोट-सर्विस डिज़ाइन पैटर्न को मुहावरेदार सी # के रूप में संभव के रूप में केंद्रित करने के लिए केंद्रित वेब / रिमोट सेवा को बढ़ावा देने के लिए है:
फसाड पैटर्न - कौन batchful, मोटे-कणों का इंटरफेस के उपयोग का सुझाव देते हैं जब कभी आप इस प्रक्रिया सीमाओं के पार संवाद।
डीटीओ पैटर्न ( MSDN ) - विशेष प्रयोजन Pocos के उपयोग के हुक्म अपने वेब सेवाओं प्रतिक्रियाओं का तार प्रारूप उत्पन्न करने के लिए।
गेटवे पैटर्न ( MSDN ) क्लाइंट गेटवे / डीटीओ मॉडल और सेवा इंटरफ़ेस स्तरों के बीच अपने क्लाइंट और सर्वर संचार संपुटित करने के लिए।
ये पैटर्न चिंताओं की एक अलग जुदाई और एक घर्षण-मुक्त चलने वाले देव अनुभव को सुनिश्चित करते हैं।
अपनी सेवाओं को सशक्त बनाना
अपने मूल में एक ServiceStack वेब सेवा एक निर्भरता-मुक्त और ऑटो-वायर्ड शुद्ध C # IService<T>
इंटरफ़ेस के आसपास केंद्रित है जो आपको अपने स्वयं के अनुरोध और रिस्पांस DTOs के साथ स्वच्छ POCOs का उपयोग करके अपने वेब सेवा अनुबंध को परिभाषित करने की पूर्ण स्वतंत्रता देता है - ServiceStack की एपीआई व्यावहारिक रूप से अदृश्य और गैर -इनवेसिव, अर्थात यह आपके C # सेवाओं के तर्क को निकालने और सर्विसस्टैक होस्ट के बाहर चलाने के लिए तुच्छ है।
यह एक अच्छा उदाहरण है जो आपको सर्विसस्टैक में सिर्फ 1 सी # .cs वर्ग के साथ मिलता है :
- सभी पंजीकृत प्रारूपों के लिए मेटाडेटा पृष्ठ
- WSDLs, XSDs और C # क्लाइंट उदाहरण के लिंक के साथ
- मानव के अनुकूल HTML रिपोर्ट दृश्य
- एक सिंगल सेल्फ html पेज स्नैपशॉट (यानी कोई बाहरी रेफरी) नहीं। एम्बेडेड JSON वेब सेवा प्रतिक्रिया शामिल है - डेटा स्नैपशॉट के लिए प्रोग्रामेटिक एक्सेस की अनुमति देता है।
- निर्मित में मिनी Profiler (उत्कृष्ट MVC मिनी Profiler का बंदरगाह )
- JSON / JSONP, XML, JSV, CSV और SOAP अंतिम बिंदु
RestServiceBase और ServiceBase क्लासेस का उद्देश्य है कि आपके कस्टम C # लॉजिक को अधिक से अधिक संभावित री-यूज़ के लिए होस्ट किया जा सके, जैसे कि इसके DTO-first डिज़ाइन को तुच्छ और अनुमानित निष्पादन के लिए अनुमति देता है जहाँ आपकी C # सर्विस को भी होस्ट किया जा सकता है और MQ होस्ट में निष्पादित किया जा सकता है। जो तब होता है जब आप RedisMQ होस्ट कीIMessageService
तरह रजिस्टर करते हैं और एंडपॉइंट के माध्यम से अपनी सेवा को कॉल करते हैं (यानी C # ग्राहकों में)/asynconeway
client.SendOneWay()
आप इस base.ResolveService<T>()
पद्धति का उपयोग करके आसानी से प्रतिनिधि सेवाओं को बना सकते हैं और बना सकते हैं, जो चयनित सेवा की एक ऑटो-वायर्ड आवृत्ति लौटाती है जैसा कि नॉर्थविंड कस्टमरडेल्स सेवा उदाहरण में देखा गया है :
var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
new Orders { CustomerId = customer.Id });
सादा C # ऑब्जेक्ट वापस करें
अधिकांश भाग के लिए ServiceStack अधिकांश C # ऑब्जेक्ट को अपेक्षित रूप से क्रमबद्ध करेगा - यहाँ संभावित रिटर्न प्रकारों की एक सूची है ( इस उत्तर से ):
- किसी भी डीटीओ ऑब्जेक्ट -> रिस्पॉन्स कंटेंट टाइप करने के लिए क्रमबद्ध
- अनुकूलित HTTP प्रतिक्रिया के लिए HttpResult, HttpError, CompressedResult (IHttpResult)
निम्न प्रकार परिवर्तित नहीं होते हैं और सीधे प्रतिक्रिया स्ट्रीम में लिखे जाते हैं:
- तार
- धारा
- IStreamWriter
- बाइट [] - एप्लीकेशन / ऑक्टेट-स्ट्रीम कंटेंट टाइप के साथ।
कस्टम HTTP हेडर समर्थन का एक उदाहरण इस CORS उदाहरण द्वारा देखा जा सकता है जहाँ आप HTTP हेडर्स को विश्व स्तर पर या प्रति-सेवा के आधार पर कॉन्फ़िगर कर सकते हैं।
HTML का समर्थन
सर्विसस्टैक में HTML वापस करने के लिए कई विकल्प हैं जिन्हें यहाँ विस्तार से बताया गया है ।
.NET के लिए सबसे तेज पाठ और बाइनरी सीरियलाइज़र शामिल हैं
तेज प्रतिक्रिया समय सुनिश्चित करने के लिए एक एपीआई में लचीला और तेज धारावाहिकों का प्राथमिक महत्व होता है और एक ऐसा संस्करण जो मौजूदा क्लाइंट्स को नहीं तोड़ता है, यही वजह है कि ServiceStack में .NET के लिए सबसे तेज पाठ धारावाहिक शामिल हैं, जिसमें एक नेटगेट विकल्प के साथ @marcgravell का प्रोटोकॉल सक्षम है। बफ़र्स (.NET का सबसे तेज़ बाइनरी धारावाहिक)।
ServiceStack के टेक्स्ट सीरियलाइज़र बहुत लचीला हैं और बिना किसी त्रुटि के चरम संस्करण का सामना कर सकते हैं ।
घर्षण-मुक्त देव अनुभव एंड-टू-एंड
ServiceStack की विचारशील प्रकृति किसी भी कोड-जीन के बिना सिंक / Async C # /। NET और Async Silverlight ग्राहकों के लिए अंतर्निहित समर्थन के साथ एक तेज़, टाइप, ट्रेस वेब सेवा API एंड-टू-एंड की अनुमति देती है :
सिंक सी # उदाहरण
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });
Async C # उदाहरण
client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });
जैसा कि यह सिर्फ शुद्ध JSON देता है, यह अन्य HTTP ग्राहकों के साथ भी तुच्छ रूप से खाया जाता है, जैसे JS ग्राहक उदाहरण jQuery का उपयोग करके :
$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
alert(todos.length == 1);
});
अत्यधिक परीक्षण योग्य
सभी C # /। NET ServiceClients उसी इंटरफेस को साझा करते हैं जो उन्हें उस बिंदु पर अत्यधिक परीक्षण योग्य और स्वैपेबल बनाता है जहां आपके पास एक ही यूनिट टेस्ट हो सकता है जो XML, JSON, JSV, SOAP इंटीग्रेशन टेस्ट के रूप में भी काम करता है ।
रिच वेलिडेशन और एरर हैंडलिंग इन बिल्ट-इन
फ्रिकिटोन-मुक्त और स्वच्छ देव अनुभव प्रदान करने के अपने मिशन में, ServiceStack में टाइप किए गए सत्यापन और त्रुटि हैंडलिंग भी शामिल हैं, जिसमें C # एक्सेप्शन फेंकने या इसके अंतर्निहित फ़्लूएंट सत्यापन का उपयोग करके क्लाइंट संरचित प्रदान करता है, टाइपिंग त्रुटियां वेब सेवा क्लाइंट पर आसानी से उपलब्ध होती हैं , जैसे:
try {
var client = new JsonServiceClient(BaseUri);
var response = client.Send<UserResponse>(new User());
} catch (WebServiceException webEx) {
/*
webEx.StatusCode = 400
webEx.ErrorCode = ArgumentNullException
webEx.Message = Value cannot be null. Parameter name: Name
webEx.StackTrace = (your Server Exception StackTrace - if DebugMode is enabled)
webEx.ResponseDto = (your populated Response DTO)
webEx.ResponseStatus = (your populated Response Status DTO)
webEx.GetFieldErrors() = (individual errors for each field if any)
*/
}
जावास्क्रिप्ट में त्रुटियों का उपभोग करने के लिए इसे तुच्छ बनाने के लिए, आप हल्के ss-validation.js जावास्क्रिप्ट पुस्तकालय का उपयोग करके कोड की एक पंक्ति के साथ अपने HTML प्रपत्र फ़ील्ड में अपनी प्रतिक्रिया त्रुटियों को तुच्छ रूप से बाँध सकते हैं। SocialBootstrapApi उदाहरण परियोजना इस का एक अच्छा प्रदर्शन प्रदान करता है।
ASP.NET और MVC के साथ समृद्ध एकीकरण
ServiceStack MVC पॉवर फिर से लेखन और सुधारों इसके लिए प्रतिस्थापन के साथ ASP.NET और MVC की बीमारी का एक बहुत गंभीर सत्र और ICacheClient और ISession एपीआई का अपना ही स्वच्छ और निर्भरता से मुक्त कार्यान्वयन के साथ कैशिंग एक्सएमएल-भारग्रस्त ASP.NET प्रदाताओं।
ServiceStack में अलग-अलग AuthProviders की संख्या के साथ एक नया और क्लीनर प्रमाणीकरण और ऑटोराइज़ेशन प्रदाता मॉडल भी शामिल है :
- क्रेडेंशियल - उपयोगकर्ता / पासवर्ड / क्रेडेंशियल सेवा में पोस्ट करके उपयोगकर्ता नाम / पासवर्ड क्रेडेंशियल्स के साथ प्रमाणित करने के लिए
- मूल प्रमाणीकरण - उपयोगकर्ताओं को मूल प्रमाणीकरण के साथ प्रमाणित करने की अनुमति देना
- Twitter OAuth - उपयोगकर्ताओं को ट्विटर के साथ पंजीकरण और प्रमाणीकरण करने की अनुमति दें
- फेसबुक OAuth - उपयोगकर्ताओं को फेसबुक के साथ पंजीकरण और प्रमाणीकरण करने की अनुमति दें
ऑथेंटिकेशन मॉड्यूल पूरी तरह से वैकल्पिक है और स्वच्छ ICacheClient / ISession API और OrmLite पर निर्मित है जो आपके सत्रों को मेमोरी, रेडिस या मेम्केच्ड में संग्रहीत करने की अनुमति देता है और आपकी UserAuth जानकारी ऑर्कलाइट के SQLServer, MySql, PostgreSQL, Sqlite के समर्थित RDBMS में बनी रहती है साथ ही रेडिस डेटा-स्टोर या इनमोरी (देव / परीक्षण के लिए उपयोगी)।
महान प्रलेखन
सर्विसस्टैक को बहुत अच्छी तरह से प्रलेखित किया गया है, जहां रूपरेखा के बारे में अधिकांश जानकारी GitHub wiki पर होस्ट की गई है । फ्रेमवर्क के अन्य भागों के लिए प्रलेखन (जैसे सीरियल, रेडिस, ऑर्मलाइट) servicestack.net/docs/ पर पाया जा सकता है
ServiceStack.Examples जबकि परियोजना ServiceStack के लाइव डेमो और स्टार्टर टेम्पलेट्स के सभी के लिए स्रोत कोड प्रदान करता SocialBoostsrapApi परियोजना ServiceStack और MVC के साथ एक Backbone.js एकल पृष्ठ अनुप्रयोग चहचहाना बूटस्ट्रैप टेम्पलेट के आधार पर विकसित करने का एक बड़ा प्रारंभिक बिंदु प्रदान करता है।
उपरोक्त जानकारी के अलावा खजाने की जानकारी Google समूह में शामिल है, जिसका हाल के वर्षों में काफी विस्तार हुआ है।
हर जगह दौड़ता है
ServiceStack एक .NET 3.5 फ्रेमवर्क है, जो ASP.NET और HttpListener होस्ट पर चलता है और इसे .NET या मोनो (trivia: www.servicestack.net , CentOS / मोनो द्वारा संचालित) पर होस्ट किया जा सकता है । इससे आपकी ServiceStack वेब सेवाओं को होस्ट किया जा सकता है:
.NET 3.5 और 4.0 के साथ विंडोज
- IIS 5/6/7 (IHttpHandler का उपयोग करता है)
- वी.एस.नेट वेबडेवर्स
- कंसोल ऐप या विंडोज जीयूआई
- विंडोज सेवा
मोनो के साथ लिनक्स / ओएसएक्स
- अपाचे + mod_mono
- नग्नेक्स + मोनोफ़ास्टसीजीआई
- XSP
- कंसोल ऐप
ओपन सोर्स डेवलपमेंट मॉडल के साथ विकसित
सर्विसस्टैक ओपन सोर्स डेवलपमेंट मॉडल का एक मजबूत विश्वासी है जहां यह सक्रिय रूप से खुले में विकसित होता है और इसकी स्थापना के बाद से हमेशा उदार ओएसएस लाइसेंस (न्यू बीएसडी) के तहत होस्ट किया गया है । आज तक इसे 47 से अधिक डेवलपर्स से योगदान मिला है और यह वर्तमान में GitHub पर 3 सबसे अधिक देखे जाने वाले C # प्रोजेक्ट में खड़ा है ।
नुकसान
मेरा मानना है कि सबसे बड़ा नुकसान अन्य OSS .NET प्रोजेक्ट्स के लिए समान है, जहां इसे Microsoft द्वारा विकसित (या यहां तक कि उपलब्ध विकल्प के रूप में सूचीबद्ध) नहीं किया गया था। इसका मतलब है कि किसी रूपरेखा का मूल्यांकन करते समय यह शायद ही कभी पहली पसंद है। ज्यादातर गोद लेने वाले केवल एक अंतिम उपाय के रूप में सर्विसस्टैक का मूल्यांकन करेंगे, जहां वे या तो डब्ल्यूसीएफ के थोपे गए घर्षण और भंगुरता या पसंदीदा माइक्रोसॉफ्ट स्टैक के प्रदर्शन से निराश हैं।
प्रतिक्रिया और सामुदायिक संसाधन
सर्विसस्टैक को ज्यादातर लोगों द्वारा प्रदान की गई सकारात्मक प्रतिक्रिया के साथ बहुत अच्छी तरह से प्राप्त किया गया है, जिन्होंने मेलिंग समूह में सकारात्मक भावना के अनुसार इसका मूल्यांकन किया है । इस वर्ष के रूप में @ServiceStack ट्विटर अकाउंट अपने पसंदीदा में उल्लेख और प्रतिक्रिया ट्रैक कर रहा है ।
सामुदायिक संसाधन विकि पृष्ठ एक अच्छी जगह लिंक पोस्ट, Pod निर्मोक, प्रस्तुतियाँ, gists और अधिक ब्लॉग करने के लिए जंगल की ServiceStack के बारे में और अधिक जानकारी प्राप्त करने के लिए है।