वेब फ्रेमवर्क

एक वेब फ्रेमवर्क (WF) या वेब अनुप्रयोग  फ्रेमवर्क (WAF) एक  सॉफ्टवेयर ढांचा  है जिसे वेब सेवाओं, वेब संसाधनों और वेब एपीआई सहित वेब एप्लिकेशन के विकास का समर्थन करने के लिए डिज़ाइन किया गया है। वेब फ्रेमवर्क वर्ल्ड वाइड वेब पर वेब एप्लिकेशन बनाने और तैनात करने का एक मानक तरीका प्रदान करते हैं। वेब ढांचे का उद्देश्य वेब विकास में की जाने वाली सामान्य गतिविधियों से जुड़े ओवरहेड को स्वचालित करना है। उदाहरण के लिए, कई वेब फ्रेमवर्क डेटाबेस एक्सेस, टेम्पलेट प्रोसेसर फ्रेमवर्क और सेशन (कंप्यूटर साइंस) प्रबंधन के लिए  पुस्तकालय (कम्प्यूटिंग)  प्रदान करते हैं, और वे अक्सर कोड के पुन: उपयोग को बढ़ावा देते हैं। हालांकि वे अक्सर गतिशील वेब पेजों के विकास को लक्षित करते हैं, वे स्थिर वेब पेजों पर भी लागू होते हैं।

इतिहास
जैसा कि वर्ल्ड वाइड वेब का डिज़ाइन स्वाभाविक रूप से गतिशील नहीं था, शुरुआती हाइपरटेक्स्ट में हाथ से कोडित HTML टेक्स्ट फ़ाइलें शामिल थीं जो वेब सर्वर पर प्रकाशित हुई थीं। प्रकाशित पृष्ठों में कोई भी संशोधन पृष्ठों के लेखक द्वारा किए जाने की आवश्यकता है। 1993 में, कॉमन गेटवे इंटरफ़ेस (CGI) मानक को वेब सर्वर के साथ बाहरी अनुप्रयोगों को इंटरफेस करने के लिए पेश किया गया था, ताकि एक गतिशील वेब पेज प्रदान किया जा सके जो उपयोगकर्ता इनपुट को प्रतिबिंबित करता हो। सीजीआई इंटरफ़ेस के मूल कार्यान्वयन का आमतौर पर सर्वर लोड पर प्रतिकूल प्रभाव पड़ता है, क्योंकि प्रत्येक अनुरोध ने एक अलग प्रक्रिया (कंप्यूटिंग) शुरू की थी। अधिक हाल के कार्यान्वयन सर्वर के संसाधनों में पदचिह्न को कम करने और सामान्य प्रदर्शन को बढ़ावा देने के लिए अन्य तकनीकों के बीच लगातार प्रक्रियाओं का उपयोग करते हैं।

1995 में, पूरी तरह से एकीकृत सर्वर/भाषा विकास वातावरण पहली बार उभरा और नई वेब-विशिष्ट भाषाएं पेश की गईं, जैसे कि ठंडा गलन, पीएचपी और सक्रिय सर्वर पेज

हालांकि गतिशील वेब पेज बनाने के लिए अधिकांश भाषाओं में सामान्य कार्यों में मदद के लिए लाइब्रेरी (कंप्यूटिंग) है, वेब एप्लिकेशन को अक्सर विशेष कार्यों के लिए विशिष्ट लाइब्रेरी की आवश्यकता होती है, जैसे कि HTML बनाना (उदाहरण के लिए, जकार्ता सर्वर चेहरे)।

1990 के दशक के अंत में, परिपक्व, पूर्ण स्टैक फ्रेमवर्क दिखाई देने लगे, जो अक्सर वेब विकास के लिए उपयोगी कई पुस्तकालयों को वेब डेवलपर्स के उपयोग के लिए एक एकल संसक्त सॉफ़्टवेयर स्टैक में इकट्ठा करते थे। इसके उदाहरणों में ASP.NET, Java Platform, Enterprise Edition, WebObjects, web2py, OpenACS, Catalyst (सॉफ़्टवेयर), Mojolicious, Ruby on Rails, Laravel, Grails (Framework), Django (वेब ​​फ़्रेमवर्क), Zend Framework, Sails.js शामिल हैं। यह, केकेपीएचपी, और सिम्फोनी

फ्रेमवर्क आर्किटेक्चर के प्रकार
अधिकांश वेब फ्रेमवर्क मॉडल-व्यू-कंट्रोलर (MVC) वास्तु पैटर्न  पर आधारित होते हैं।

मॉडल-व्यू-कंट्रोलर (एमवीसी)
डेटा मॉडल को व्यापार नियम (कंट्रोलर) और प्रयोक्ता इंटरफ़ेस  (व्यू) में अलग करने के लिए कई फ्रेमवर्क एमवीसी आर्किटेक्चरल पैटर्न (कंप्यूटर साइंस) का पालन करते हैं। यह आमतौर पर एक अच्छा अभ्यास माना जाता है क्योंकि यह चिंताओं को अलग करता है, कोड पुन: उपयोग को बढ़ावा देता है, और कई इंटरफेस को लागू करने की अनुमति देता है। वेब अनुप्रयोगों में, यह विभिन्न दृश्यों को प्रस्तुत करने की अनुमति देता है, उदाहरण के लिए मोबाइल बनाम डेस्कटॉप ब्राउज़रों के लिए विभिन्न  वेब पृष्ठ ों की सेवा करना, या मशीन-पठनीय वेब सेवा इंटरफेस प्रदान करना।

पुश-आधारित बनाम पुल-आधारित
अधिकांश एमवीसी ढांचे पुश-आधारित आर्किटेक्चर का पालन करते हैं जिसे क्रिया-आधारित भी कहा जाता है। ये ढाँचे उन क्रियाओं का उपयोग करते हैं जो आवश्यक प्रसंस्करण करते हैं, और फिर परिणाम प्रस्तुत करने के लिए डेटा को व्यू लेयर पर धकेलते हैं। Django (वेब ​​फ्रेमवर्क), रूबी ऑन रेल्स, सिम्फनी, स्प्रिंग MVC, पट्टियां (ढांचा), Sails.js, CodeIgniter इस वास्तुकला के अच्छे उदाहरण हैं। इसका एक विकल्प पुल-आधारित आर्किटेक्चर है, जिसे कभी-कभी घटक-आधारित भी कहा जाता है। ये ढांचे दृश्य परत से शुरू होते हैं, जो आवश्यकतानुसार कई नियंत्रकों से परिणाम खींच सकते हैं। इस आर्किटेक्चर में, एक दृश्य के साथ कई नियंत्रकों को शामिल किया जा सकता है। लिफ्ट (वेब ​​फ्रेमवर्क), टेपेस्ट्री (प्रोग्रामिंग),  जेबीएसएस सीम , जकार्ता सर्वर फेसेस और अपाचे विकेट पुल-आधारित आर्किटेक्चर के उदाहरण हैं। Play Framework, Apache Struts, RIFE, और ZK (ढांचे) में पुश- और पुल-आधारित एप्लिकेशन नियंत्रक कॉल दोनों के लिए समर्थन है।

त्रिस्तरीय संगठन
त्रि-स्तरीय वास्तुकला में तीन-स्तरीय संगठन, अनुप्रयोगों को तीन भौतिक स्तरों के आसपास संरचित किया जाता है: क्लाइंट, एप्लिकेशन और डेटाबेस।   डेटाबेस आमतौर पर एक  संबंधपरक डेटाबेस प्रबंधन प्रणाली  होता है। एप्लिकेशन में व्यापार तर्क शामिल है, सर्वर पर चल रहा है और HTTP का उपयोग कर क्लाइंट के साथ संचार करता है। वेब एप्लिकेशन पर क्लाइंट एक वेब ब्राउज़र है जो एप्लिकेशन लेयर द्वारा उत्पन्न HTML को चलाता है।  इस शब्द को एमवीसी के साथ भ्रमित नहीं होना चाहिए, जहां, त्रि-स्तरीय वास्तुकला के विपरीत, व्यावसायिक तर्क को नियंत्रक, मध्य परत से दूर रखने के लिए एक अच्छा अभ्यास माना जाता है।

फ्रेमवर्क एप्लिकेशन
एक प्रोग्रामिंग भाषा के आधार पर इंटरनेट अनुप्रयोगों के निर्माण का समर्थन करने के लिए फ्रेमवर्क बनाए गए हैं, जिसमें ज़ेंड फ्रेमवर्क और रूबी ऑन रेल्स जैसे सामान्य प्रयोजन के उपकरण शामिल हैं, जो एक विशिष्ट भाषा की क्षमताओं को बढ़ाते हैं, मूल भाषा प्रोग्राम करने योग्य पैकेजों के आसपास निर्मित होते हैं। एक विशिष्ट उपयोगकर्ता अनुप्रयोग, जैसे सामग्री प्रबंधन प्रणाली, कुछ मोबाइल विकास उपकरण और कुछ पोर्टल उपकरण।

सामान्य-उद्देश्य वाली वेबसाइट फ्रेमवर्क
वेब फ्रेमवर्क को ब्राउजर के वास्तु नियमों और हाइपरटेक्स्ट परहस्त शिष्टाचार  जैसे संचार प्रोटोकॉल के अनुसार कार्य करना चाहिए, जो कि स्टेटलेस प्रोटोकॉल है। वेबपेज एक सर्वर (कंप्यूटिंग) द्वारा सर्व किए जाते हैं और फिर जावास्क्रिप्ट का उपयोग करके ब्राउज़र द्वारा संशोधित किए जा सकते हैं। किसी भी दृष्टिकोण के अपने फायदे और नुकसान हैं।

सर्वर-साइड पृष्ठ परिवर्तनों के लिए आमतौर पर पृष्ठ को ताज़ा करने की आवश्यकता होती है, लेकिन किसी भी भाषा का उपयोग करने और अधिक कंप्यूटिंग शक्ति का उपयोग करने की अनुमति देता है। क्लाइंट-साइड परिवर्तन पेज को छोटे टुकड़ों में अपडेट करने की अनुमति देते हैं जो एक डेस्कटॉप एप्लिकेशन की तरह लगता है, लेकिन जावास्क्रिप्ट तक सीमित है और उपयोगकर्ता के ब्राउज़र में चलता है, जिसमें सीमित कंप्यूटिंग शक्ति हो सकती है। दोनों के कुछ मिश्रण का आमतौर पर उपयोग किया जाता है। एप्लिकेशन जो जावास्क्रिप्ट का भारी उपयोग करते हैं और केवल पृष्ठ के कुछ हिस्सों को रीफ्रेश करते हैं, उन्हें एक पेज का आवेदन  कहा जाता है और आमतौर पर कोड को व्यवस्थित करने के लिए क्लाइंट-साइड जावास्क्रिप्ट वेब फ्रेमवर्क का उपयोग करते हैं।

सर्वर-साइड

 * अपाचे विकेट
 * एएसपी.नेट कोर
 * केकेपीएचपी
 * उत्प्रेरक (सॉफ्टवेयर)
 * कोडइग्निटर
 * सीपीपीसीएमएस
 * Django (वेब ​​फ्रेमवर्क)
 * फ्लास्क (वेब ​​फ्रेमवर्क)
 * Jam.py (वेब ​​फ्रेमवर्क)|Jam.py
 * यी
 * लारवेल
 * मोजोलिशियस
 * रूबी ऑन रेल्स
 * पाल.जे.एस
 * सिम्फनी
 * वसंत MVC
 * Wt (वेब ​​टूलकिट)
 * ज़ेंड फ्रेमवर्क

क्लाइंट-साइड
उदाहरणों में Backbone.js, AngularJS, Angular (एप्लीकेशन प्लेटफॉर्म), EmberJS, React (जावास्क्रिप्ट लाइब्रेरी), jQuery UI, Svelte, और Vue.js शामिल हैं।

चर्चा मंच, विकी और वेबलॉग

 * विकीबेस/विकीविकिवेब

विशेषताएं
फ्रेमवर्क आमतौर पर एक प्रोग्राम के नियंत्रण प्रवाह को सेट करते हैं और फ्रेमवर्क के उपयोगकर्ता को विभिन्न घटनाओं को उजागर करके उस प्रवाह में शामिल होने की अनुमति देते हैं। नियंत्रण डिजाइन पैटर्न के इस व्युत्क्रम को एक ढांचे के परिभाषित सिद्धांत के रूप में माना जाता है, और एक टीम के लिए एक सामान्य प्रवाह को लागू करके कोड को लाभ पहुंचाता है जिसे हर कोई समान तरीकों से अनुकूलित कर सकता है। उदाहरण के लिए, कुछ लोकप्रिय माइक्रोफ़्रेमवर्क जैसे रूबी सिनात्रा (सॉफ़्टवेयर) (जो Express.js से प्रेरित है) HTTP अनुरोधों से पहले और बाद में मिडलवेयर हुक की अनुमति देता है। ये मिडलवेयर फ़ंक्शंस कुछ भी हो सकते हैं, और उपयोगकर्ता को लॉगिंग, प्रमाणीकरण और सत्र प्रबंधन और पुनर्निर्देशन को परिभाषित करने की अनुमति देते हैं।

कैशिंग
बैंडविड्थ (कंप्यूटिंग) उपयोग, वेब सर्वर लोड (कंप्यूटिंग), और कथित विलंबता (इंजीनियरिंग) को कम करने के लिए वेब कैशिंग वर्ल्ड वाइड वेब इलेक्ट्रॉनिक दस्तावेज़ का वेब कैश है। एक वेब कैश इसके माध्यम से गुजरने वाले दस्तावेज़ों की प्रतियों को संग्रहीत करता है; यदि कुछ शर्तों को पूरा किया जाता है तो बाद के अनुरोध कैश से संतुष्ट हो सकते हैं। कुछ एप्लिकेशन फ्रेमवर्क दस्तावेज़ों को कैशिंग करने और पृष्ठ की तैयारी के विभिन्न चरणों, जैसे डेटाबेस एक्सेस या टेम्प्लेट व्याख्या, को दरकिनार करने के लिए तंत्र प्रदान करते हैं।

सुरक्षा
कुछ वेब ढाँचे प्रमाणीकरण और प्राधिकरण ढाँचे के साथ आते हैं, जो वेब सर्वर को एप्लिकेशन के उपयोगकर्ताओं की पहचान करने में सक्षम बनाते हैं, और कुछ परिभाषित मानदंडों के आधार पर कार्यों तक पहुँच को प्रतिबंधित करते हैं। Drupal एक ऐसा उदाहरण है जो पृष्ठों तक भूमिका-आधारित पहुँच प्रदान करता है, और उपयोगकर्ताओं को बनाने और उन्हें भूमिकाएँ सौंपने के लिए एक वेब-आधारित इंटरफ़ेस प्रदान करता है।

डेटाबेस एक्सेस, मैपिंग और कॉन्फ़िगरेशन
कई वेब फ्रेमवर्क एक डेटाबेस बैकएंड के लिए एक एकीकृत एपीआई बनाते हैं, जिससे वेब एप्लिकेशन विभिन्न प्रकार के डेटाबेस के साथ बिना किसी कोड परिवर्तन के काम कर सकते हैं, और प्रोग्रामर को उच्च-स्तरीय अवधारणाओं के साथ काम करने की अनुमति देते हैं। इसके अतिरिक्त, कुछ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग  | ऑब्जेक्ट-ओरिएंटेड फ्रेमवर्क में ऑब्जेक्ट-रिलेशनल मैपिंग प्रदान करने के लिए मैपिंग टूल होते हैं, जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को टुपल्स में मैप करते हैं। कुछ ढांचे आत्मनिरीक्षण (कंप्यूटर विज्ञान) और/या प्रसिद्ध सम्मेलनों के उपयोग के माध्यम से वेब एप्लिकेशन कॉन्फ़िगरेशन को कम करते हैं। उदाहरण के लिए, कई जावा फ्रेमवर्क हाइबरनेट (जावा) को एक दृढ़ता परत के रूप में उपयोग करते हैं, जो आवश्यक जानकारी को बनाए रखने में सक्षम रनटाइम पर एक डेटाबेस स्कीमा उत्पन्न कर सकता है। यह एप्लिकेशन डिज़ाइनर को डेटाबेस स्कीमा को स्पष्ट रूप से परिभाषित करने की आवश्यकता के बिना व्यावसायिक वस्तुओं को डिज़ाइन करने की अनुमति देता है। रूबी ऑन रेल्स जैसे फ्रेमवर्क रिवर्स में भी काम कर सकते हैं, यानी डेटाबेस स्कीमा के आधार पर रनटाइम पर मॉडल ऑब्जेक्ट्स के गुणों को परिभाषित करते हैं।

वेब फ्रेमवर्क प्रदान कर सकने वाली अन्य सुविधाओं में डेटाबेस लेनदेन शामिल हैं और आंकड़ों का विस्थापन

यूआरएल मानचित्रण
एक फ्रेमवर्क की यूनिफ़ॉर्म रिसोर्स लोकेटर मैपिंग या रूटिंग सुविधा वह तंत्र है जिसके द्वारा फ्रेमवर्क URL की व्याख्या करता है। कुछ ढाँचे, जैसे Drupal और Django, नियमित अभिव्यक्ति का उपयोग करते हुए पूर्व-निर्धारित पैटर्न के विरुद्ध प्रदान किए गए URL से मेल खाते हैं, जबकि कुछ अन्य प्रदान किए गए URL को एक ऐसे URL में अनुवाद करने के लिए पुनर्लेखन तकनीकों का उपयोग करते हैं जिसे अंतर्निहित इंजन पहचान लेगा। एक अन्य तकनीक ग्राफ ट्रैवर्सल की है जैसे ज़ोप द्वारा उपयोग की जाती है, जहां एक यूआरएल चरणों में विघटित होता है जो ऑब्जेक्ट ग्राफ़ (मॉडल और विचारों के) को पार करता है।

एक URL मैपिंग सिस्टम जो रूट और हैंडल अनुरोधों के लिए पैटर्न मिलान या पुनर्लेखन का उपयोग करता है, URL को अधिक अनुकूल URL को छोटा करने की अनुमति देता है, साइट की सादगी को बढ़ाता है और खोज इंजन द्वारा बेहतर अनुक्रमण की अनुमति देता है। उदाहरण के लिए, /page.cgi?cat=science&topic=physics से समाप्त होने वाले URL को केवल /page/science/physics में बदला जा सकता है। यह URL को लोगों के लिए याद रखना, पढ़ना और लिखना आसान बनाता है, और साइट के संरचनात्मक लेआउट के बारे में बेहतर जानकारी के साथ सर्च इंजन प्रदान करता है। एक ग्राफ़ ट्रैवर्सल दृष्टिकोण भी अनुकूल URL के निर्माण में परिणत होता है। एक छोटा यूआरएल जैसे /पेज/साइंस डिफ़ॉल्ट रूप से मौजूद होता है क्योंकि यह /पेज/साइंस/फिजिक्स के लंबे ट्रैवर्सल का एक छोटा रूप है।

अजाक्स
अजाक्स (प्रोग्रामिंग), अतुल्यकालिक I/O जावास्क्रिप्ट और XML के लिए आशुलिपि, वेब अनुप्रयोग बनाने के लिए एक वेब विकास तकनीक है। पर्दे के पीछे सर्वर के साथ थोड़ी मात्रा में डेटा का आदान-प्रदान करके वेब पेजों को अधिक प्रतिक्रियाशील बनाने का इरादा है, ताकि उपयोगकर्ता द्वारा परिवर्तन का अनुरोध करने पर हर बार पूरे वेब पेज को फिर से लोड न करना पड़े। इसका उद्देश्य वेब पेज की अन्तरक्रियाशीलता, गति, रखरखाव और उपयोगिता को बढ़ाना है। जावास्क्रिप्ट पुस्तकालय अजाक्स प्रोग्रामिंग की जटिलता के कारण, कई अजाक्स ढांचे हैं जो विशेष रूप से अजाक्स समर्थन से निपटते हैं। कुछ अजाक्स ढांचे को बड़े ढांचे के हिस्से के रूप में भी एम्बेड किया गया है। उदाहरण के लिए, jQuery JavaScript लाइब्रेरी रूबी ऑन रेल्स में शामिल है।

वेब 2.0 समृद्ध वेब अनुप्रयोगों के विकास में बढ़ती रुचि के साथ, सीधे अजाक्स और जावास्क्रिप्ट में प्रोग्रामिंग की जटिलता इतनी स्पष्ट हो गई है कि कंपाइलर तकनीक ने डेवलपर्स को जावा, पायथन और रूबी जैसी उच्च-स्तरीय भाषाओं में कोड करने की अनुमति दी है। इन कंपाइलरों में से पहला जुड़ा हुआ था, जिसके बाद Google वेब टूलकिट, कुछ समय बाद पायज और रूबीजेएस के रूप में पायथन और रूबी के बंदरगाहों के साथ था। ये कंपाइलर और उनसे जुड़े विजेट सेट लाइब्रेरी समृद्ध मीडिया अजाक्स अनुप्रयोगों के विकास को डेस्कटॉप अनुप्रयोगों के विकास के समान बनाते हैं।

वेब सेवाएं
कुछ ढाँचे वेब सेवाएँ बनाने और प्रदान करने के लिए उपकरण प्रदान करते हैं। ये उपयोगिताएँ बाकी वेब एप्लिकेशन के समान उपकरण प्रदान कर सकती हैं।

वेब संसाधन
कई नए वेब 2.0 प्रतिनिधित्ववादी स्थिति में स्थानांतरण फ्रेमवर्क अब संसाधन विवरण ढांचा  (आरडीएफ) की अवधारणाओं के आधार पर सेमांटिक वेब ऑन्कोलॉजी इंजीनियरिंग के एक प्रकार के संसाधनों के संग्रह के निर्माण के लिए संसाधन-उन्मुख आर्किटेक्चर (आरओए) बुनियादी ढांचा प्रदान कर रहे हैं।

यह भी देखें

 * जावास्क्रिप्ट-आधारित वेब फ्रेमवर्क की तुलना (क्लाइंट-साइड)
 * सर्वर-साइड वेब फ्रेमवर्क की तुलना
 * अनुप्रयोग सर्वर
 * आवेदन ढांचा
 * आवेदन सुरक्षा
 * कॉन्फिगरेशन पर सम्मलेन
 * खुद को न दोहराएं (DRY)
 * वेब सेवा ढांचे की सूची
 * रिच वेब एप्लिकेशन (अप्रचलित)
 * समृद्ध वेब एप्लिकेशन फ्रेमवर्क की सूची
 * समाधान ढेर
 * मोबाइल विकास ढांचा