एप्लिकेशन प्रोग्राम इंटरफ़ेस. एपीआई क्या है? एपीआई कार्य

यह जल्दी या देर से होता है - कोई भी प्रोग्रामर ऐसी अवधारणाओं के सामने आता है एपीआई. हालाँकि, यदि ऐसी कोई प्रतिक्रिया उत्पन्न होती है, तो हर कोई नहीं जानता कि यह क्या है, और यह आवश्यक है और इसे कैसे समाप्त किया जाए। और इस लेख में मैं आपसे कर्मों के ज्ञान के इस अंतर को पूरा करने जा रहा हूं और साथ ही मैं अपना अभ्यास भी लागू करूंगा।

एपीआई (अप्लिकेशन प्रोग्रामिंग अंतरफलक) - त्से अप्लिकेशन प्रोग्रामिंग अंतरफलक. दूसरे शब्दों में, सरल शब्दों में, विभिन्न कार्यों, स्थिरांक, वर्गों, क्वेरी प्रारूपों का एक सेट होता है जिनका उपयोग अन्य कार्यक्रमों में किया जा सकता है।

आप मुझे बता सकते हैं क्या एपीआई- यह किसी प्रकार की वस्तु है, जिसके कार्यान्वयन के बारे में हम नहीं जानते, हम केवल इसका विकोराइज़ कर सकते हैं। उदाहरण के लिए, एक कंप्यूटर एक वस्तु है, जिसके कार्यान्वयन के बारे में बहुत कम लोग जानते हैं, हालाँकि, इसे सभी प्रकार से खोजा जा सकता है: वीडियो देखना, इंटरनेट पर सर्फिंग, अन्य पाठ आदि। सब कुछ कैसे काम करता है - कम ही लोग जानते हैं, लेकिन हर कोई काम नहीं कर सकता।

बट एपीआईє विंडोज़ एपीआई, ओपनजीएल एपीआई, Direct3D एपीआईऔर इसी तरह।

उदाहरण के लिए, हाल ही में मैंने खुद को बीच में फंसा हुआ पाया एपीआई. मैंने डाक सेवा के लिए पंजीकरण करा लिया है स्मार्टरेस्पॉन्डर.ruऔर मेलिंग सूची लॉन्च करने के बाद, लोगों ने सदस्यता लेना शुरू कर दिया। चुनौती आ गई है: पहुंच कर और सदस्यता लेकर लोग कम लागत वाला वीडियो कोर्स प्राप्त कर सकते हैं। स्मार्टरेस्पॉन्डर.ru", फिर प्राथमिक पहुंच (उदाहरण के लिए, के माध्यम से डाटाबेस) मैं इन आंकड़ों से परिचित नहीं हूं, लेकिन इन्हें लागू करना जरूरी था। शुक्र है, " स्मार्टरेस्पॉन्डर.ruєआपका शक्तिशाली एपीआई, मैं इसी तरह जल्दी हूं।

में उन्हें जानता हूँ एपीआईपूर्वभुगतान तिथि दर्ज करने के लिए प्रारूप दर्ज करें। डाली के माध्यम से कर्लमैंने आवश्यक प्रविष्टि भर दी है और किसी विशिष्ट के लिए आवश्यक पूर्व भुगतान तिथि हटा दी है मेल पता. परिणाम को संसाधित करने और प्रदर्शित करने के लिए निम्नलिखित एक मानक प्रक्रिया है।

लियोनिद याकूबोविच 26 नवंबर 2012 लगभग 13:59 बजे

एपीआई क्या है?

  • लकड़ी कमरा *

मैं उड़ रहा हुं!
इस लेख में, हम देखेंगे कि एपीआई क्या है, यह कैसे है और इसका उपयोग क्यों किया जाता है। आइए यह भी देखें कि एपीआई का उपयोग आपके वेब अनुप्रयोगों में कैसे किया जा सकता है और आप एक प्रोग्रामर के लिए जीवन को कैसे आसान बना सकते हैं।

खैर, चलिए नियुक्ति समाप्त करते हैं। एपीआई (एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस) - यह एक प्रोग्रामिंग इंटरफ़ेस, एक निर्माण प्रोग्राम इंटरफ़ेस है। जैसा कि वे मेरे समझदारों से कहते हैं, एपीआई प्रोग्राम के जीवन को आसान बनाने के लिए एक तैयार कोड है। एपीआई को प्रोग्रामर के लिए वास्तव में अन्य प्रोग्रामों के लिए कोड लिखना (उदाहरण के लिए, फ़ंक्शन) आसान बनाने के लिए बनाया गया था। jQuery का सारा ज्ञान, जावास्क्रिप्ट में लेखन, और एक प्रकार का एपीआई भी। जैसा कि आप देख सकते हैं, jQuery कोड लिखना बहुत आसान बना देता है। जिन्हें 30 पंक्तियों में बुनियादी जावास्क्रिप्ट का उपयोग करके तैयार किया जा सकता है, उन्हें 5-6 में jQuery का उपयोग करके लिखा जा सकता है। यदि आप एपीआई को एक नज़र में देखें, तो आप बहुत सी सेवाओं का पता लगा सकते हैं जिन्हें विकसित किया जा सकता है। आज सबसे लोकप्रिय सेवा Code.google.com है, जो लगभग सैकड़ों विभिन्न API प्रदान करती है! इसमें एंड्रॉइड ऐड-ऑन बनाने के लिए एक इंटरफ़ेस, AJAX के साथ काम करने के लिए विभिन्न एपीआई और विभिन्न एपीआई ऐड-ऑन शामिल हैं जिन्हें आपकी आवश्यकताओं के अनुरूप आसानी से समायोजित किया जा सकता है।

अपने हाथों से कोड लिखना कैसा लगता है? क्या जो पहले ही बन चुका है उस पर काम करना ज़रूरी है? क्या वेब विकास से लागत-मुक्त समाधान (और वास्तव में, लागत-मुक्त सहायता) देखना संभव है? यदि आपने इस प्रश्न का उत्तर "НІ" दिया है, तो कृपया ध्यान दें कि आप एपीआई का सार समझ गए हैं।

मैं अब भी खुद को धोना चाहता हूं. टुकड़ों को तैयार समाधानों से परेशान नहीं होना चाहिए, भविष्य में टुकड़े वास्तविक कार्यों में हस्तक्षेप नहीं करेंगे। इसलिए, यदि आप एक नौसिखिया प्रोग्रामर हैं, तो फ़ैक्टरी का दुरुपयोग न करें! अपने दिमाग से सोचना शुरू करें, प्रोग्रामिंग के सार को समझने के लिए अलग-अलग एल्गोरिदम होंगे। मैं यह भी कहना चाहूंगा कि हर कोई पहले से ही आश्वस्त है कि एपीआई एक तैयार समाधान नहीं है, बल्कि एक बीच का रास्ता है, अपनी खुद की परियोजनाएं बनाने के लिए एक इंटरफ़ेस है। क्या आप दुकान से जमे हुए कटलेट नहीं खाते? आपको उन्हें तुरंत चिकना करना चाहिए, है ना? यह सादृश्य एपीआई के सार को स्पष्ट रूप से दर्शाता है।

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

विंडोज़ एपीआई - ऑपरेटिंग सिस्टम फ़ंक्शंस का एक सेट

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

विकास प्रक्रिया के दौरान, अंतिम उपयोगकर्ता के लिए विशिष्ट आंतरिक कार्यों का एक सेट बनाया जाता है, जो किसी विशेष कार्यक्रम के कार्यान्वयन के लिए आवश्यक होते हैं, जिसे MyApplication API कहा जाता है। हालाँकि, यह अक्सर पाया गया है कि इन फ़ंक्शंस का उपयोग अन्य प्रोग्राम सहित अन्य प्रोग्राम बनाने के लिए प्रभावी ढंग से किया जा सकता है। लेखक अपने उत्पाद को बेचने की रणनीति के आधार पर किस प्रकार पोषण का चयन करते हैं: वे बाहरी ग्राहकों के लिए किस सेट तक पहुंच की अनुमति क्यों देते हैं? यदि पुष्टि की जाती है, तो सॉफ़्टवेयर पैकेज के विवरण में एक सकारात्मक विशेषता के रूप में वाक्यांश शामिल है: "पैकेज में एपीआई फ़ंक्शन का एक व्यापक सेट शामिल है" (या अतिरिक्त पैसे के लिए)।

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

जाहिरा तौर पर, विंडोज़ एपीआई फ़ंक्शंस का एक सेट है जो ऑपरेटिंग सिस्टम का ही हिस्सा है और साथ ही वीबी का उपयोग करके लिखे गए प्रोग्राम सहित किसी भी अन्य प्रोग्राम तक पहुंच योग्य है। यह योजना पूरी तरह से सिस्टम BIOS/DOS ओवरराइड के सेट के समान है, जो वास्तव में DOS API है।

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

वीबी प्रोग्रामर्स के लिए सबसे आवश्यक विन एपीआई

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

जब आप विन एपीआई से परिचित होते हैं, तो यह पता चलता है कि बहुत सारे उपयोग किए गए वीबी फ़ंक्शन हैं जो विशिष्ट सिस्टम प्रक्रियाओं तक विस्तारित होने से ज्यादा कुछ नहीं हैं, लेकिन केवल दी गई भाषा के समान वाक्यविन्यास में लागू होते हैं। त्वरित एपीआई की आवश्यकता के आधार पर, उपलब्ध विकल्प हैं:

  1. एपीआई फ़ंक्शंस जिन्हें आम तौर पर वीबी फ़ंक्शंस के रूप में कार्यान्वित किया जाता है। हालाँकि, समय भी कम नहीं है, ऐसी स्थिति में एपीआई ठहराव की ओर बढ़ना आवश्यक हो सकता है, ताकि यह आपको जल्दी से उत्पादकता बढ़ाने की अनुमति दे (स्थानांतरित किए गए मापदंडों में अनावश्यक परिवर्तनों की अनुपस्थिति को छोड़कर)।
  2. निर्मित वीबी फ़ंक्शंस केवल बाहरी एपीआई फ़ंक्शंस के परिणामस्वरूप कार्यान्वित किए जाते हैं। यहां एक आसान विकल्प है. उदाहरण के लिए, CreateDirectory API फ़ंक्शन में VB MkDir ऑपरेटर की तुलना में अधिक क्षमताएं हैं।
  3. बड़ी संख्या में एपीआई फ़ंक्शन हैं जिनका वीबी भाषा के वर्तमान संस्करण में कोई एनालॉग नहीं है। उदाहरण के लिए, VB का उपयोग करके किसी निर्देशिका को हटाना संभव नहीं है - इसके लिए आपको DeleteDirectory फ़ंक्शन का उपयोग करने की आवश्यकता है।

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

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

याक विचति विन एपीआई

यह याद रखना इतना आसान नहीं है कि Win32 API के कार्यों की संख्या लगभग 10 हजार होने का अनुमान है (Microsoft की तरह कोई भी सटीक आंकड़ा नहीं जानता है)।

वीबी वेयरहाउस (संस्करण 4-6) में विन एपीआई - WIN32API.TXT के विवरण के साथ एक फ़ाइल शामिल है (इसके कार्यान्वयन पर एक रिपोर्ट बाद में घोषित की जाएगी)। अले, पर्शेर में, एक योगो के साथ, विकोरिस्टोवानी मेनेमोनी इज़मेन के लिए समान मापदंडों की पहचान के बारे में विडोमोस्टी को त्याग दिया जा सकता है, और दूसरी ओर-त्सोमो फ़ाइल के कार्यों का पेरीपास अब तक नहीं हुआ है। आजकल (जैसा कि किस्मत में था), VB 3.0 में Win16 API फ़ंक्शंस का वर्णन करने वाली विशेष प्रूफ़-ऑफ़-कॉन्सेप्ट फ़ाइलें थीं। V.4.0 में, यह बहुमूल्य जानकारी मैन्युअल इंटरफ़ेस के माध्यम से पहले से ही उपलब्ध है।

Win32 API के बारे में अतिरिक्त जानकारी पिछले प्लेटफ़ॉर्म सॉफ़्टवेयर डेवलपमेंट किट में पाई जा सकती है, जो VB 5.0, 6.0 एंटरप्राइज़ संस्करण और Office 2000 डेवलपर संस्करण के साथ शामिल MSDN लाइब्रेरी सीडी पर भी उपलब्ध है। हालाँकि, वहां आपके लिए आवश्यक जानकारी ढूंढना और उस तक पहुंचना बिल्कुल भी आसान नहीं है। यह बताए बिना कि वहां मौजूद सभी विवरण पूरी तरह से सी द्वारा बनाए गए हैं।

वीबी वातावरण में एपीआई प्रोग्रामिंग का दुनिया का सबसे परिचित परिचय प्रसिद्ध अमेरिकी विशेषज्ञ डैनियल एप्पलमैन की पुस्तक है। डैन एप्पलमैन की विज़ुअल बेसिक प्रोग्रामर गाइड टू विंडोज एपीआई (Win16, Win32, VB के सैकड़ों विभिन्न संस्करणों के लिए) की यह श्रृंखला 1993 से लगातार VB प्रोग्रामर्स के लिए बेस्ट-सेलर बन गई है। 1997 में प्रकाशित पुस्तक डैन एप्पलमैन की वीबी 5.0 प्रोग्रामर गाइड टू द विन32 एपीआई, लेखक के लिए संयुक्त राज्य अमेरिका से एक मित्र द्वारा लाई गई थी जो एक छोटे प्रांतीय शहर की पहली किताबों की दुकान के बारे में जानता था।

1,500 से अधिक पृष्ठों वाली इस पुस्तक में वीबी में एपीआई प्रोग्रामिंग के लिए उन्नत तकनीकों के साथ-साथ 900 से अधिक कार्यों का विवरण शामिल है। सीडी में पुस्तक का पूरा पाठ और सभी सॉफ्टवेयर एप्लिकेशन, साथ ही कई अतिरिक्त खंड शामिल होंगे जो दूसरे संस्करण में शामिल नहीं हुए हैं। 1999 में, डैन एप्पलमैन ने विज़ुअल बेसिक प्रोग्रामर्स के लिए डैन एप्पलमैन की Win32 एपीआई पहेली बुक और ट्यूटोरियल नामक एक नई पुस्तक जारी की, जिसमें अन्य 7,600 कार्यों का अवलोकन शामिल है (हालांकि रिपोर्ट बोर्ड नहीं)।

विन एपीआई और डायनेमिक लिंक लाइब्रेरी (डीएलएल)

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

इस मामले में, डीएलएल के तहत, हम दो गुना गतिशील पुस्तकालयों के पारंपरिक संस्करण का सम्मान कर सकते हैं, जो आवश्यक प्रक्रियाओं - उपप्रोग्राम या फ़ंक्शंस में सीधे रूपांतरण सुनिश्चित करता है (लगभग वैसा ही जैसा कि वीबी प्रोजेक्ट के बीच में प्रक्रियाओं को कॉल करते समय अपेक्षित होता है) . ऐसी लाइब्रेरी अन्य टूल का उपयोग करके बनाई जा सकती हैं: वीसी++, डेल्फ़ी, फोरट्रान, और वीबी (जो संस्करण 7.0 में दिखाई देती है) - बाकी केवल ActiveX DLL का उपयोग करके काम कर सकते हैं, जिन्हें इंटरनेट OLE ऑटोमेशन फेस के माध्यम से एक्सेस किया जा सकता है।

डायनामिक लाइब्रेरी फ़ाइलों में एक्सटेंशन.DLL हो सकता है, लेकिन यह आवश्यक नहीं है (Win16 के लिए एक्सटेंशन.EXE अक्सर अटका रहता था); बाहरी उपकरणों के ड्राइवर अतिरिक्त डीआरवी के अंतर्गत सूचीबद्ध हैं।

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

और अब मैं खुश हूं.

कृपया 1. डीएल घोषणा की सही फॉर्मेटिंग का पालन करेंएल-प्रक्रियाएँ

डीएलएल प्रक्रियाओं तक प्रोग्राम का पदानुक्रम "प्राथमिक" विज़ुअल बेसिक प्रक्रियाओं के समान दिखता है, उदाहरण के लिए:

DllName पर कॉल करें ([तर्क सूची])

हालाँकि, बाहरी DLL फ़ंक्शंस (विन एपीआई सहित) का उपयोग करने के लिए, उन्हें डिक्लेयर स्टेटमेंट का उपयोग करके प्रोग्राम द्वारा कॉल किया जाना चाहिए, जो इस तरह दिखता है:

उप प्रक्रिया नाम घोषित करें लिब _ "लाइब्रेरी नाम" _ [([तर्कों की सूची])]

फ़ंक्शन फ़ंक्शन नाम घोषित करें _ लिब "लाइब्रेरी नाम" _ [([तर्क सूची])]

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

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

Win32 API कार्यान्वयन का सेट फ़ंक्शंस तक सीमित है (Win16 API में बहुत सारे उप प्रोग्राम थे)। यह लॉन्ग प्रकार के फ़ंक्शंस के लिए विशेष रूप से सच है, जो अक्सर किसी ऑपरेशन का समापन कोड लौटाते हैं।

डिक्लेयर ऑपरेटर पहले से ही डॉस के लिए एमएस बेसिक में दिखाई देता था, और इसका उपयोग प्रोजेक्ट में आंतरिक प्रक्रियाओं को संप्रेषित करने के लिए किया जाता था। विज़ुअल बेसिक को इसकी आवश्यकता नहीं है, क्योंकि आंतरिक प्रक्रियाओं की घोषणाएँ स्वचालित रूप से उनके उप और फ़ंक्शन विवरणों का वर्णन करती हैं। बेसिक/डॉस से अनुकूलित, नए विवरण में लाइब्रेरी फ़ाइल का नाम अवश्य दर्शाया जाना चाहिए, जहां प्रक्रिया स्थित है। विप एपीआई लाइब्रेरीज़ विंडोज़ सिस्टम निर्देशिका में स्थित हैं; बस एक फ़ाइल नाम की आवश्यकता है। यदि आप डीएलएल पर काम कर रहे हैं, तो सुनिश्चित करने के लिए आपको उस फ़ाइल के लिए एक नया पथ लिखना होगा।

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

फ़ंक्शन घोषित करें GetTempPath _ Lib "kernel32" उपनाम "GetTempPathA" _ (ByVal nBufferLength जितनी लंबी, _ ByVal lpBuffer स्ट्रिंग के रूप में) उतनी लंबी

और यहां विभिन्न पंक्तियों के विवरण के सभी मुख्य तत्वों का वर्णन किया गया है और यह पढ़ना अच्छा है।

कृपया 2. डीएलएल फ़ंक्शंस के साथ काम करते समय विशेष रूप से सम्मानजनक रहें

विन एपीआई और विभिन्न डीएलएल फ़ंक्शंस का उपयोग वीबी की कार्यात्मक क्षमताओं को महत्वपूर्ण रूप से विस्तारित करता है और, अक्सर, आपको प्रोग्राम उत्पादकता बढ़ाने की अनुमति देता है। हालाँकि, कीमत के लिए भुगतान करने की कीमत रोबोटिक कार्यक्रमों की विश्वसनीयता में कमी है, खासकर विकास प्रक्रिया के दौरान।

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

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

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

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

पोराडा 3. वीबी में विश्वसनीय एपीआई प्रोग्रामिंग के लिए डैन एप्पलमैन की दस सिफारिशें

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

1. बायवैल के बारे में याद रखें।सबसे आम समस्या जो तब होती है जब फ़ंक्शन से पहले एपीआई और डीएलएल लागू किया जाता है, बायवैल कीवर्ड के गलत शब्दकोश में निहित है: वे या तो इसे डालना भूल जाते हैं, या अंत में, इसे तब डालते हैं जब इसकी कोई आवश्यकता नहीं होती है।

ये उदाहरण पैरामीटर ट्रांसफर करने के लिए बायवैल ऑपरेटर का इनपुट दिखाते हैं

पैरामीटर प्रकार जेड बायवैल बायवैल के बिना
पूर्णांक स्टैक की क्षमता 16-बिट है स्टैक 16-बिट पूर्णांक के 32-बिट पते को समायोजित कर सकता है
लंबा स्टैक में 32-बिट क्षमता है स्टैक 32-बिट पूर्णांक के 32-बिट पते को समायोजित कर सकता है
डोरी अनुक्रम को उस प्रारूप में परिवर्तित कर दिया जाता है जिसका उपयोग C में किया जाता है (अनुगामी नल बाइट दिया गया है)। नई पंक्ति के 32-बिट पते स्टैक पर रखे गए हैं स्टैक में पंक्ति का VB डिस्क्रिप्टर होता है। (ऐसे डिस्क्रिप्टर को विंडोज़ एपीआई द्वारा कभी भी पहचाना नहीं जाता है और केवल वीबी के लिए विशेष रूप से कार्यान्वित डीएलएल में पहचाना जाता है।)

यहां यह उल्लेखनीय है कि वीबी समेत किसी भी प्रोग्रामिंग सिस्टम में पैरामीटर का स्थानांतरण दो मुख्य चरणों द्वारा निर्धारित किया जाता है: भेजना (ByRef) या मान (ByVal)। पहला विकल्प एक्सचेंज का पता प्राप्त करता है (यह विकल्प एक्सचेंज के लिए वीबी में उपयोग किया जाता है), दूसरा इसका मूल्य प्राप्त करता है। वैधता का सिद्धांत इस तथ्य में निहित है कि एक अतिरिक्त संदेश के बाद यह सुनिश्चित किया जाता है कि कॉल करने वाला प्रोग्राम पारित पैरामीटर के बदले हुए मान पर वापस आ जाता है।

आरंभ करने के लिए, निम्नलिखित कार्यक्रमों का उपयोग करके एक प्रयोग करें:

मंद v पूर्णांक के रूप में v = 2 कॉल MyProc(v) MsgBox "v = " और v उप MyProc (v पूर्णांक के रूप में) v = v + 1 अंतिम उप

विकोन्या, विकमिमा के बट को लॉन्च करने के बाद, ज़िन्स्याम ज़मीने, रिव्ने 3 के मान। दाईं ओर, डेनिश विपैड में, ज़मिनिनो वी के पते, फ़िज़िक रूप से उथले अनुमान, विक्लिकाє, दानस को प्रेषित होते हैं। अब प्रक्रिया विवरण को इसमें बदलें

उप MyProc (ByVal बनाम पूर्णांक के रूप में)

परिणामस्वरूप, जब आप परीक्षण चलाते हैं, तो आप v = 2 को हटा देते हैं, जिसका अर्थ है कि केवल चर का आउटपुट मान प्रक्रिया में पारित किया जाता है - इससे जुड़े संचालन का परिणाम कॉल करने वाले प्रोग्राम में वापस नहीं आता है। कॉल ऑपरेटर की मदद से वैल्यू ट्रांसमिशन मोड को निम्नलिखित तरीके से भी बदला जा सकता है:

उप MyProc (v पूर्णांक के रूप में) ... MyProc को कॉल करें ((v)) '(v) - भुजाएँ मानों के पीछे ट्रांसमिशन मोड _ को इंगित करती हैं।

हालाँकि, आंतरिक VB-प्रक्रियाओं में विस्तार करते समय, कॉल स्टेटमेंट में ByVal कीवर्ड का उपयोग दबा दिया जाता है - इसके बजाय, गोल भुजाएँ अवरुद्ध हो जाती हैं। यहाँ एक स्पष्टीकरण है.

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

डीएलएल फ़ंक्शन "शास्त्रीय" सिद्धांतों के अनुसार कार्यान्वित किए जाते हैं और इसलिए प्रत्येक तर्क के साथ डेटा का आदान-प्रदान कैसे किया जाता है इसका स्पष्ट विवरण आवश्यक है। यह स्वयं डिक्लेयर विवरण (अधिक सटीक रूप से, पारित किए गए तर्कों की सूची) के माध्यम से एक डिक्लेयर फ़ंक्शन के रूप में कार्य कर सकता है। अक्सर, Windows API फ़ंक्शन या DLL में पैरामीटर पास करना ByVal कीवर्ड का उपयोग करके निर्दिष्ट किया जाता है। इसके अलावा, इसे या तो डिक्लेयर ऑपरेटर में या सीधे फ़ंक्शन को कॉल करते समय निर्दिष्ट किया जा सकता है।

गलत पैरामीटर स्थानांतरण की विरासत को स्थानांतरित करना आसान है। यदि आप स्पष्ट रूप से अमान्य पता चुनते हैं, तो आपको एक GPF (सामान्य सुरक्षा दोष) अधिसूचना दिखाई देगी। चूँकि फ़ंक्शन उन मानों को पुनः प्राप्त करता है जो एक वैध पते से बचते हैं, एपीआई फ़ंक्शन सभी प्रकार के विनाशकारी परिणामों के साथ एक विदेशी क्षेत्र (उदाहरण के लिए, विंडोज कर्नेल में) में प्रवेश करता है।

2. स्थानांतरित किए जा रहे पैरामीटर के प्रकार को बदलें।पारित किए गए पैरामीटरों की सही संख्या और प्रकार भी उतना ही महत्वपूर्ण है। यह आवश्यक है कि डिक्लेयर में घोषित तर्क एपीआई फ़ंक्शन के मापदंडों के अनुरूप हों। पैरामीटर पास करने में सबसे बड़ी समस्या NULL और शून्य की एक पंक्ति - मेमोरी ट्रेस, जो एक और एक ही है, के बीच अंतर से संबंधित है।

3. घुमाए जा रहे मान के प्रकार की जाँच करें।

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

  • एक डीएलएल फ़ंक्शन जो मानों को घुमाता नहीं है ('सी' में शून्य के अनुरूप) को वीबी सब की तरह कम किया जा सकता है।
  • एक एपीआई फ़ंक्शन जो किसी मान (पूर्णांक या लंबा) को घुमाता है, उसे या तो एक उप या एक फ़ंक्शन के रूप में नामित किया जा सकता है जो एक विशिष्ट प्रकार के मानों को घुमाता है।
  • यह एपीआई फ़ंक्शन फ़्लोटिंग पॉइंट नंबरों को घुमाता नहीं है, लेकिन डीएलएल इस प्रकार के डेटा को घुमा सकता है।

4. बहुत सावधानी से, ऐज़ एनी निर्माण का उपयोग करें।कई विंडोज़ एपीआई फ़ंक्शंस में विभिन्न प्रकार के मापदंडों को स्वीकार करने और उन्हें किसी भी तरह के निर्माण के आधार पर उपयोग करने की क्षमता होती है (प्रकार की व्याख्या पारित किए गए अन्य मापदंडों के अर्थ पर निर्भर करती है)।

अच्छे समाधानों में कई उपनाम (एलियास) फ़ंक्शन हो सकते हैं, और उनमें से दो या अधिक समान फ़ंक्शन साझा करते हैं, और प्रत्येक विवरण में एक पैरामीटर और गायन प्रकार होता है।

5. पंक्तियों को आरंभ करना न भूलें.विन एपीआई में एक सरल फ़ंक्शन है जो एक पैरामीटर के रूप में पारित किए गए पंक्ति बफ़र्स से डेटा एकत्र करके जानकारी को घुमाता है। आपके प्रोग्राम में, आप सब कुछ सही ढंग से कर सकते हैं: ByVal के बारे में न भूलें, फ़ंक्शन में पैरामीटर सही ढंग से पास करें। लेकिन विंडोज़ इस बात पर विश्वास नहीं कर सकता कि देखे गए स्टोरेज स्पेस का आकार कितना बड़ा है। पंक्ति का आकार उसमें रखे जा सकने वाले सभी डेटा को समायोजित करने के लिए पर्याप्त होना चाहिए। आवश्यक आकार के बफर को आरक्षित करने की जिम्मेदारी वीबी प्रोग्रामर की है।

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

अधिकांश विन एपीआई फ़ंक्शन आपको अधिकतम ब्लॉक आकार स्वयं सेट करने की अनुमति देते हैं। उदाहरण के लिए, आपको ब्लॉक के आकार को इंगित करने के लिए किसी अन्य एपीआई फ़ंक्शन को कॉल करने की आवश्यकता है। उदाहरण के लिए, GetWindowTextLength आपको GetWindowText फ़ंक्शन में शामिल विंडो का शीर्षक रखने के लिए आवश्यक पंक्ति का आकार निर्धारित करने की अनुमति देता है। इस कारण से, विंडोज़ गारंटी देता है कि आप सीमा से आगे नहीं जाएंगे।

6. विकोराइज़ विकल्प दोनों भाषाओं में स्पष्ट।

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

विंडोज़ 9x में अधिकांश एपीआई फ़ंक्शंस के मापदंडों की जाँच के लिए एक परिष्कृत प्रणाली है। इसलिए, इन आंकड़ों में क्षमा की उपस्थिति का मतलब घातक निवारण नहीं है, लेकिन यह निर्धारित करना इतना आसान नहीं है कि इसका कारण क्या है।

यहां आप इस प्रकार के दूध को बेहतर बनाने के कई तरीके पा सकते हैं:

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

इसके अलावा, एपीआई फ़ंक्शन के परिणाम को सावधानीपूर्वक जांचना आवश्यक है।

8. याद रखें कि वीबी और विंडोज़ में संख्याएँ समान नहीं हैं।आइए पहले याद रखें कि वीबी में "इंटेगर" शब्द का अर्थ 16-बिट संख्या है, जबकि विन 32 दस्तावेज़ में इसका अर्थ 32-बिट संख्या है। दूसरे तरीके से, वीबी में पूर्णांक संख्याएं (पूर्णांक और दीर्घ) बिना चिह्न के मान नहीं हैं (एक अंक चिह्न के रूप में उपयोग किया जाता है, दूसरा किसी संख्या के मंटिसा के रूप में), विंडोज़ में - यहां तक ​​​​कि अज्ञात संख्याओं का भी उपयोग किया जाता है। यदि आप अतिरिक्त अंकगणितीय परिचालनों का उपयोग करके एक पैरामीटर बनाते हैं (उदाहरण के लिए, आधार और ऑफसेट के अतिरिक्त प्रतिस्थापन का उपयोग करके किसी पते की गणना करना) तो इस स्थिति को ध्यान में रखा जाना चाहिए। जिसके लिए मानक VB अंकगणितीय फ़ंक्शन उपयुक्त नहीं हैं। आप इस स्थिति से क्यों डरते हैं, आइए इस पर बात करते हैं।

9. फ़ंक्शन नामों से सावधान रहें. Win16 में, सभी Win32 API फ़ंक्शंस के नाम छोटे और बड़े अक्षरों की सटीक भिन्नता के प्रति संवेदनशील हैं (Win16 में यह नहीं था)। यदि आप एक बड़े लेखक के स्थान पर एक छोटा लेखक रख रहे हैं, तो आवश्यक कार्य नहीं मिलेगा। पंक्ति पैरामीटर सेट करने के लिए फ़ंक्शंस में सही प्रत्यय ए या डब्ल्यू का भी पालन करें। (इसके बारे में रिपोर्ट - div. नीचे।)

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

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

इससे पहले, हमने पहले डीएलएल की एक विस्तृत श्रेणी के लिए "पानी के नीचे" पत्थरों के बारे में सोचा था। विन एपीआई के साथ, सब कुछ बहुत सरल है, क्योंकि इन कार्यों के कार्यान्वयन का रूप स्पष्ट रूप से एकीकृत है। माँ के सम्मान को ध्यान में रखने योग्य मुख्य बातें इस प्रकार हैं:

  1. Win32 API के फ़ंक्शंस फ़ंक्शन प्रकार के फ़ंक्शंस या प्रक्रियाएं हैं (Win16 API में बहुत सारे उप प्रोग्राम थे)। सभी फ़ंक्शन लॉन्ग प्रकार के होते हैं, इसलिए उनका विवरण इस रूप में लिखा जाता है: फ़ंक्शन नाम घोषित करें... जैसे लॉन्ग 'फ़ंक्शन प्रकार _ को स्पष्ट रूप में दर्शाया गया है

    फ़ंक्शन नाम घोषित करें और 'फ़ंक्शन प्रकार _ अतिरिक्त प्रत्यय द्वारा इंगित किया गया है

    एपीआई फ़ंक्शन में रूपांतरण इस तरह दिखता है:

परिणाम& = ApiName& ([ तर्कों की सूची]
  1. सबसे महत्वपूर्ण फ़ंक्शन जिसे घुमाया जाता है वह ऑपरेशन पूर्णता कोड है। इसके अलावा, गैर-शून्य मान का अर्थ सामान्य समापन है, जबकि शून्य मान का अर्थ निष्पादन है। एक बार फिर (या पहले नहीं), आप GetLastError फ़ंक्शन का उपयोग करके संशोधन की प्रकृति को स्पष्ट कर सकते हैं। इस फ़ंक्शन का विवरण इस तरह दिखता है: डिक्लेयर फ़ंक्शन GetLastError&Lib "kernel32" ()

    उवागा!क्षमा के वैध कोड के राइनेट के लिए मध्य-चेहरे वाले वीबी में रोबोट पर, विकोरिस्टोवती शक्ति शक्तिशाली लास्टडलरर ओप्टा एरर है, एपीआई विकुनो विकॉनन के लिए MIZh के औद्योगिक में गेटलास्टररर फ़ंक्शन के बीबी इनोडी वेन, बाड़ के विकुनोम के विकंक।

    आप उस कोड की व्याख्या कर सकते हैं जो ERROR_ प्रत्यय से शुरू होने वाले नामों के साथ API32.TXT फ़ाइल में लिखे गए अतिरिक्त स्थिरांक का उपयोग करके जेललास्टएरर उत्पन्न करता है।

    सबसे आम प्रकार के हमले निम्नलिखित कोड हैं:

    • ERROR_INVALID_HANDLE = 6& - गलत हैंडल
    • ERROR_CALL_NOT_IMPLEMENTED = 120& - Windows 9x फ़ंक्शंस के लिए कॉल केवल Windows NT के लिए उपलब्ध है
    • ERROR_INVALID_PARAMETER = 87& - गलत पैरामीटर मान

    हालाँकि, किसी दिए गए पैरामीटर के मानों को घुमाने के लिए बहुत सारे फ़ंक्शन हैं (उदाहरण के लिए, ओपनफ़ाइल फ़ाइल विवरण के मानों को घुमाता है)। इस मामले में, मान कुछ अन्य विशेष रिटर्न और मानों को सौंपा गया है, अक्सर 0 -1।

  2. Win32 API में सबसे सरल प्रकार के डेटा को स्थानांतरित करने के लिए सख्ती से निश्चित तरीके हैं। ए) बायवैल...एज़ लॉन्ग

    कम से कम 80% तर्क पासिंग लॉन्ग प्रकार से की जाती है। तर्क को संशोधित करें सबसे पहले ByVal कीवर्ड के साथ है, और इसका, अन्य बातों के अलावा, मतलब है कि एक तरफ़ा डेटा ट्रांसफर जुड़ा हुआ है - वीबी प्रोग्राम से एपीआई फ़ंक्शन तक।

    बी) बायवैल...स्ट्रिंग के रूप में

    इस प्रकार का प्रसारण भी अक्सर होता रहता है, और इसी तर्क के साथ सबसे पहलेबायवैल अटक जाता है. जब एक एपीआई फ़ंक्शन को कॉल किया जाता है, तो पंक्ति पते स्टैक पर लिखे जाते हैं, जिससे दो-तरफ़ा डेटा विनिमय की अनुमति मिलती है। पंक्तियों में कार्य करते समय कुछ समस्याओं का ध्यान रखना आवश्यक है।

    सबसे पहले, पंक्तियों के लिए मेमोरी आरक्षण कॉल करने वाले प्रोग्राम द्वारा किया जाता है, इसलिए यदि एपीआई फ़ंक्शन पंक्तियों को संग्रहीत करेगा, तो कॉल करने से पहले आवश्यक आकार की एक पंक्ति बनाना आवश्यक है। उदाहरण के लिए, GetWindowsDirectory फ़ंक्शन Windows निर्देशिका के पथ को घुमाता है, जिसके लिए 144 से अधिक वर्ण लेने की आवश्यकता नहीं होती है। जाहिर है, इस फ़ंक्शन का कार्यान्वयन कुछ इस तरह दिख सकता है:

    WinPath$ = Space$(144) ' आरक्षित पंक्ति _ 144 वर्णों में परिणाम& = GetWindowsDirectory& (WinTath$, 144) _ ' बफ़र भरना ' परिणाम& - नाम में वर्णों की वास्तविक संख्या _ निर्देशिका WinPath$ = बायां$(WinPath, परिणाम&)

    एक और समस्या इस तथ्य में निहित है कि जब एक एपीआई फ़ंक्शन को एपीआई फ़ंक्शन में परिवर्तित किया जाता है, तो आउटपुट पंक्ति को उसके आंतरिक डिस्प्ले पर फिर से बनाया जाता है, और फ़ंक्शन से बाहर निकलने पर - उसी तरह से। जैसे Win16 के शुरुआती दिनों में इस ऑपरेशन के लिए केवल एक शून्य बाइट जोड़ने की आवश्यकता होती थी, उदाहरण के लिए, एक पंक्ति, फिर Win32 के आगमन के साथ, यूनिकोड के डबल-बाइट एन्कोडिंग को ANSI में परिवर्तित किया गया, और इसी तरह . (यह लेख "वीबी में पंक्ति परिवर्तन के साथ रोबोट की विशेषताएं", कंप्यूटर प्रेस 10'99 और 01'2000) में बताया गया था। यह केवल महत्वपूर्ण है कि ByVal... स्ट्रिंग निर्माण की सहायता से प्रतीकात्मक डेटा की पंक्तियों का आदान-प्रदान संभव है।

    बी) ... किसी के रूप में

    इसका मतलब यह है कि मेमोरी बफ़र पते का मान स्टैक पर रखा जाएगा, उदाहरण के लिए, एपीआई फ़ंक्शन क्या संभालेगा इसके बजाय व्याख्या, अन्य तर्कों के अर्थ से स्वतंत्र है। हालाँकि, As Any का उपयोग केवल डिक्लेयर ऑपरेटर में किया जा सकता है - जब एक विशिष्ट फ़ंक्शन लागू किया जाता है, तो तर्क को एक विशिष्ट मान सौंपा जा सकता है।

    डी) ... उपयोगकर्ता परिभाषित प्रकार के रूप में

    ऐसी संरचना अक्सर तब भी अटक जाती है जब किसी अन्य संरचना के लिए डेटा (आपत्तिजनक पक्ष का वादा) का आदान-प्रदान करना आवश्यक होता है। वास्तव में, यह डिज़ाइन एज़ एनी ट्रांसमिशन फॉर्म का एक सरल प्रकार का विशिष्ट कार्यान्वयन है, यह सिर्फ इतना है कि प्रत्येक फ़ंक्शन की एक निश्चित संरचना होती है।

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

एपीआई फ़ंक्शन तक बट

इसे फ़ाइलों के साथ काम करने के दो बुनियादी कार्यों - लोपेन और एलरीड के उदाहरण का उपयोग करके चित्रित किया गया है, जिनका वर्णन इस प्रकार है:

फ़ंक्शन लोपेन लिब "कर्नेल32" _ उपनाम "_लोपेन" (_ ByVal lpFileName As String, _ ByVal wReadWrite as long) लंबे समय तक घोषित करें Function lread Lib "kernel32" _ उपनाम "_lread" (_ ByVal hFile As Long, lpBuff _ ByVal wBytes जितनी लंबी) जितनी लंबी

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

किसी फ़ाइल को खोलने की प्रक्रिया इस प्रकार दिख सकती है:

स्थिरांक INVALID_HANDLE_VALUE = -1 ' अमान्य _ मान विवरण lpFileName$ = "D:\calc.bas" ' फ़ाइल का नाम wReadWrite& = 2 ' पढ़ने-लिखने का मोड hFile& = lopen(lpFileName$, wReadWrite&) _ 'मूल्य = INVALID_HANDLE _VALUE फिर _ ' फ़ाइल को ठीक करें 'फिक्स कोड निर्दिष्ट करें CodeError& = Err.LastDllError 'CodeError& = GetLastError _' यह निर्माण काम नहीं करता है यदि समाप्त हो

यहां हमें दो बिंदुओं पर जोर देना चाहिए:

  • फ़ंक्शन के मान के रूप में हम फ़ाइल विवरण का मान निर्धारित करते हैं। मान मान -1 की पुष्टि करता है;
  • इस मामले में, GetLastError फ़ंक्शन पर जाना आवश्यक नहीं है - त्रुटि के निर्दिष्ट मान को पुनः प्राप्त करने के लिए, हम एरर ऑब्जेक्ट पर गए (हमने ऐसी स्थिति की संभावना के बारे में अधिक बात की)।

फिर आप फ़ाइल के बजाय पढ़ सकते हैं, लेकिन यह यह भी बताता है कि प्रोग्राम इसकी संरचना को पहचानने के लिए ज़िम्मेदार है (जैसा कि एकाधिक डबल फ़ाइलों के साथ काम करते समय होता है)। इस स्थिति में, lread फ़ंक्शन के लिए कॉन्फ़िगरेशन इस तरह दिख सकता है:

मंद MyVar As Single wBytes = lread (hFile&, MyVar, Len(MyVar) ' वाचन संख्या का वाचन, 4 बाइट्स ' wBytes - वास्तव में पढ़े गए डेटा की संख्या, '-1 - समता... MyStruct x As Single i As Integer टाइप करें अंत प्रकार मंद MyVar As MyStruct wBytes = lread (hFile&, MyVar, Len(MyVar)) 'डेटा संरचना पढ़ें, 6 बाइट्स

एक बार फिर सम्मान दिखाएं: फ़ंक्शन का दूसरा तर्क प्रेषकों को दिया जाता है, और मानों पर वापस लौटाया जाता है।

स्ट्रिंग के रूप में मंद MyVar MyVar = Space$(10) '10 वर्णों के लिए आरक्षित स्थान wBytes = lread (hFile&, ByVal MyVar, Len(MyVar))' वर्ण स्ट्रिंग पढ़ें, 10 वर्ण

यहां आप पहले पेश किए गए बट के महत्व को देख सकते हैं - पंक्ति परिवर्तन आवश्यक रूप से ByVal कीवर्ड के साथ होता है।

किसी सरणी में फ़ाइल के बजाय पढ़ना (सरलता के लिए, हम एकल बाइट सरणी का उपयोग करेंगे) इस तरह संकलित किया गया है:

मंद MyArray(1 से 10) बाइट के रूप में wBytes = lread (hFile&, MyArray(1), _ लेन(MyArray(1))* 10) ' सरणी से 10 तत्व पढ़ें

सरणी के पहले तत्व को एक तर्क के रूप में निर्दिष्ट करते हुए, हम सरणी के लिए आरक्षित मेमोरी क्षेत्र के प्रमुख का पता पास करते हैं। जाहिर है, आप इस विधि का उपयोग करके किसी सरणी के किसी भी टुकड़े को संग्रहीत कर सकते हैं:

WBytes = lread (hFile&, MyArray(4), _ लेन(MyArray(1))* 5) 4 से 8 तक सरणी तत्वों को पढ़ना

पोराडा 5. स्थानांतरण के लिए विकरी उपनामकिसी भी रूप में सेटिंग्स

यहां, सामने वाले बट के आधार पर, हम डैन एप्पलमैन के लिए चौथे का सार प्रकट करते हैं।

Lread फ़ंक्शन के साथ काम करते समय, यह याद रखना महत्वपूर्ण है कि इसके पहले एक सामान्य चर चलाते समय, ByVal कीवर्ड का उपयोग करना आवश्यक है (अन्यथा अवैध ऑपरेशन के बारे में जानकारी खो नहीं जाएगी)। सुरक्षित रहने के लिए, आप केवल सामान्य परिवर्तनों के साथ काम करने के लिए इस फ़ंक्शन का एक अतिरिक्त विशेष विवरण बना सकते हैं:

फ़ंक्शन घोषित करें lreadString Lib “kernel32” _ उपनाम “_lread” (_ ByVal hFile जितनी लंबी, ByVal एलपीबफर स्ट्रिंग जितनी लंबी, _ ByVal wBytes जितनी लंबी) जितनी लंबी

इस विवरण के साथ काम करते समय, प्रिंट करते समय ByVal को इंगित करना अब आवश्यक नहीं है:

WBytes = lreadString(hFile&, MyVarString, _ Len(MyVarString))'

ऐसा प्रतीत होता है कि डिक्लेयर ऑपरेटर का सिंटैक्स आपको किसी सरणी के लिए ऐसा विशेष विवरण बनाने की अनुमति देता है:

फ़ंक्शन घोषित करें lreadString Lib "kernel32" उपनाम "_lread" (_ ByVal hFile जितनी लंबी, lpBuffer() बाइट जितनी, _ ByVal wBytes जितनी लंबी) जितनी लंबी

पशु की रक्षा करो

WBytes = lreadArray(hFile&, MyArray(), 10)

यह अनिवार्य रूप से प्रोग्राम द्वारा घातक निष्पादन का कारण बनेगा।

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

यहां मूल बात सरल है: आप वेरिएबल स्ट्रिंग्स की मदद से प्रतीकात्मक डेटा का आदान-प्रदान कर सकते हैं, लेकिन उनका उपयोग पर्याप्त रूप से दोहरी जानकारी का आदान-प्रदान करने के लिए नहीं किया जा सकता है (जैसा कि वीबी के 16-बिट संस्करणों के साथ काम करते समय मामला था)। एक-आयामी बाइट सरणी का उपयोग करना बेहतर है।

जाहिर है, संरचना की संरचना का वर्णन करने के लिए स्ट्रिंग प्रकार का उपयोग किया जा सकता है। इस मेमोरी से कनेक्शन इस प्रकार है:

  • विन एपीआई के विकास के लिए निम्नलिखित निर्माण का उपयोग करना स्पष्ट रूप से संभव नहीं है: MyStruct x As Single s As String टाइप करें

    परिवर्तन के क्रम में, पंक्ति विवरणक को प्रोग्राम की उपस्थिति में सभी विरासतों के साथ पारित किया जाता है।

  • यह निश्चित दोहरीकरण की एक पंक्ति के संरचना तत्व के रूप में संभव है: MyStruct x As Single s As String*8 ' निश्चित दोहरीकरण की पंक्ति अंत प्रकार टाइप करें

इस स्थिति में, कोड को दोबारा बनाना सुनिश्चित करें।

और सम्मान बना रहता है: एक ही समय में एपीआई फ़ंक्शन में अपग्रेड किए जाने पर पंक्ति परिवर्तनों (निश्चित और परिवर्तनीय दोनों) की श्रृंखला को समेकित करना संभव नहीं है। अन्यथा, "अवैध संचालन" के उद्भव की गारंटी दी जाएगी।

यह बिल्कुल स्पष्ट है कि यदि आपको अपनी लाइब्रेरी में DLL फ़ंक्शन लिखने की आवश्यकता है तो आप बुरी स्थिति में हैं। यदि आप मिश्रित प्रोग्रामिंग तकनीक का उपयोग करते हैं तो आवश्यकता अनिवार्य रूप से प्रकट होगी - एक कार्यक्रम को लागू करने के लिए दो या दो से अधिक कार्यक्रमों का संयोजन।

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

लेखक का विचार यह है: डेवलपर द्वारा दो टूल का उपयोग करके प्रोग्रामिंग में गंभीर भागीदारी पर जोर दिया जाता है। जाहिर है, आधुनिक दिमाग में, दो प्रणालियों में एक स्वतंत्र विशेषज्ञ होना बहुत मुश्किल है, जो "मुख्य और अतिरिक्त भाषा" योजना को अधिक तार्किक बनाता है। यहां विचार यह है कि "अतिरिक्त" भाषा (कई सरल प्रक्रियाओं के लिए लिखित) का ज्ञान लाने से "मुख्य" भाषा की प्रभावशीलता में काफी वृद्धि हो सकती है। यह महत्वपूर्ण है कि अतिरिक्त लाभ के रूप में वीबी का ज्ञान अब एक पेशेवर प्रोग्रामर के लिए एक व्यावहारिक आवश्यकता है। बोलने से पहले किसी भी प्रोग्रामर के लिए DOS के कोर्स के दौरान बेसिक पर नजर डालते हैं, असेंबलर के बेसिक्स को जानना बेहद जरूरी होगा।

तो यह अलग है, लेकिन समूह रोबोटों के दिमाग में, जब त्वचा प्रोग्रामर अपने विशिष्ट कार्य में लगा होता है, तो विभिन्न भाषाओं में प्रक्रियात्मक इंटरफ़ेस की ख़ासियत के बारे में बयान परियोजना में सभी प्रतिभागियों की गलती है। मुझे पता है कि बहुत सारे प्रोग्रामिंग सिस्टम हैं (वीबी सहित), इंटरफ़ेस के अलावा जिसे समझाने की आवश्यकता है, अन्य तरीकों को स्थापित करना संभव है, प्रसंस्करण विधियों को प्रक्रियाओं तक विस्तारित करना जो आपको इंटरफ़ेस को अन्य भाषाओं में अनुकूलित करने की अनुमति देता है .

अंतरप्रक्रियात्मक इंटरफ़ेस का उपयोग करते समय, निम्नलिखित संभावित नुकसानों से अवगत रहें:

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

इसके आधार पर, निम्नलिखित सिफारिशें तैयार की जा सकती हैं:

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

यदि डीएलएल फ़ंक्शन पहले से ही लिखा हुआ है, उदाहरण के लिए, फोरट्रान में, लेकिन इनपुट इंटरफ़ेस नए वीबी मानक के साथ अच्छी तरह से फिट नहीं होता है तो यह क्या करता है? यहां आप दो तारीखें दे सकते हैं. पहला: एक परीक्षण DLL फ़ंक्शन लिखें और इसकी सहायता से, VB प्रोग्रामों के लिए आवश्यक कार्यक्षमता का चयन करने के लिए परीक्षण और त्रुटि विधि का उपयोग करने का प्रयास करें। दूसरा: फोरट्रान में एक एडाप्टर प्रक्रिया लिखें जो एक वेयरहाउस में सरल डेटा संरचनाओं के परिवर्तन के साथ वीबी और एक डीएलएल फ़ंक्शन के बीच एक सरल इंटरफ़ेस प्रदान करेगा (उदाहरण के लिए, एक पंक्ति सरणी से एक बड़े बाइट सरणी का परिवर्तन)।

ओत्ज़े: वायकोरिस्ट डीएलएल फ़ंक्शन। साथ ही मिठास भी बचाकर रखें.

कंप्यूटरप्रेस 9"2000

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

सबसे पहले, यदि आप अभी भी पूरी तरह से नहीं समझ पाए हैं कि एपीआई (एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस) क्या है, तो स्किलक्रश में स्पष्टीकरण पढ़ें, और फिर इस लेख का पहला भाग पढ़ें ताकि आप इसका उपयोग कर सकें।

"एपीआई" एक अविश्वसनीय रूप से महान अवधारणा है - खासकर यदि आपका ऐड-ऑन किसी अन्य ऐड-ऑन के साथ बंडल किया गया है, तो इसे उस एपीआई के माध्यम से एक्सेस नहीं किया जा सकता है। आपके अपने प्रोग्राम के बीच के घटक, दूसरे शब्दों में, रेल के विभिन्न हिस्से भी एपीआई के माध्यम से एक साथ जुड़े हुए हैं। वे छोटे स्वतंत्र अधीनस्थ भी हैं जो विशिष्ट शक्ति कार्यों को पूरा करने के लिए त्वचा के लिए आवश्यक डेटा संचारित करते हैं। ऐड-ऑन की दुनिया में, सब कुछ एक एपीआई है!

यदि आप अधिक गतिशील फ्रंटएंड कार्यक्षमता (दोनों एक तरफा जावास्क्रिप्ट ऐड-ऑन और साइड-बाय-साइड AJAX कॉल के साथ सरल प्रोग्राम) के साथ प्रोग्राम बनाते हैं, तो वे आपके शक्तिशाली एपीआई के माध्यम से रेल बैकएंड से कनेक्ट होंगे, जो वास्तव में आसान डेनिश जोड़ी है- कोड की तीन पंक्तियाँ, आपको अपने नियंत्रकों को HTML के बजाय JSON या XML का उपयोग करने के लिए क्या कहना चाहिए?

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

चिंतन के लिए बिंदु

जानकारी देखें और देखें कि क्या आप उनके उत्तर जानते हैं। विजय के बाद फिर से अपने आप को सौंप दें।

  • जैसा कि रेल्स समझता है, जब आप HTTP अनुरोध को बाध्य करते हैं तो आप किस प्रकार की फ़ाइल देखेंगे।
  • #Response_to मेथड मेटा क्यों है?
  • मैं उपयोगकर्ता ऑब्जेक्ट (उपयोगकर्ता) को उन विशेषताओं को निर्दिष्ट करते समय कैसे घुमा सकता हूँ जिन्हें मैं उस ऑब्जेक्ट में शामिल नहीं करना चाहता (ताकि आप केवल User.first को घुमा न सकें)?
  • उन 2 शॉर्टकट के नाम बताइए जिन्हें #to_json विधि में जोड़ा जाएगा।
  • मैं नियंत्रक को कैसे बता सकता हूं कि संशोधन के बारे में अधिसूचना प्रस्तुत करना आवश्यक है?
  • मैं संशोधनों के बारे में अधिकारियों को कैसे सूचित कर सकता हूँ?
  • यदि आप अपने एपीआई के लिए प्रोग्रामेटिक कनेक्शन की अनुमति देना चाहते हैं तो आप सत्र-आधारित नियंत्रक प्रमाणीकरण विधियों का उपयोग क्यों नहीं कर सकते?
  • "सेवा-उन्मुख वास्तुकला" क्या है?

एपीआई मूल बातें

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

हालाँकि, अक्सर आप ब्राउज़र का उपयोग करने के सिरदर्द से जूझे बिना पैसा कमाना चाहते हैं। आपको पृष्ठ संरचना (एचटीएमएल) में रुचि नहीं हो सकती है, लेकिन आप केवल शुद्ध डेटा निकालना चाहते हैं। मान लीजिए कि आप सभी सफल ग्राहकों की सूची हटाना चाहते हैं। आप http://yourapplication.com/users पर जा सकते हैं और #index क्रिया चला सकते हैं और अपने सभी एप्लिकेशन की एक सूची प्रस्तुत कर सकते हैं।

इस सारी जानकारी से परेशान क्यों हों क्योंकि आप तो केवल ग्राहकों की सूची रद्द करना चाहते हैं? सबसे आसान विकल्प JSON या XML सामग्री प्रकार को दर्शाते हुए उसी URL पर अनुरोध भेजना होगा। एक बार जब आप अपने रेल नियंत्रक को सही ढंग से सेट कर लेते हैं, तो आपके पास अपने सभी उपयोगकर्ताओं को समायोजित करने के लिए एक सरल JSON सरणी ऑब्जेक्ट होता है। आश्चर्यजनक!

यदि आप बाहरी एपीआई का उपयोग करते हैं तो वही सिद्धांत स्थिर हो जाएगा। मान लीजिए कि आप ट्विटर पर किसी कोरिस्टुवाच के हालिया "ट्वीट्स" को पूर्ववत करना चाहते हैं। आपको केवल अपने रेल प्लगइन को यह बताना होगा कि ट्विटर एपीआई के साथ कैसे इंटरैक्ट करना है (स्वयं को प्रमाणित करने के लिए), एक क्वेरी सबमिट करें और लौटाए जाने वाले "उत्तर" के प्रकार को संसाधित करें।

निर्माण एपीआई

हो सकता है कि आप फ्रंटएंड वेब कहानियों के लिए बैकएंड एपीआई को साफ करके अपनी रेल उपयोगिता बनाना चाहें, या आप यह सीखना चाहें कि यदि फ्रंटएंड इसके लिए पूछ रहा है तो JSON कैसे लिखें। जब आप प्रमाणीकरण कार्यों के साथ एक पूर्ण RESTful API बनाते हैं तो यह अनुभाग दिखाई नहीं देता है। इसे आपके परिशिष्ट के संबंध में एक एपीआई के रूप में आसानी से पेश किया गया है।

मूल बातें

यदि आप चाहते हैं कि आपका रेल प्लगइन HTML के बजाय JSON को परिवर्तित करे, तो आपको ऐसा करने के लिए अपने नियंत्रक को बताना होगा। सबसे चमत्कारी बात यह है कि एक ही नियंत्रक आपके कंप्यूटर को ब्राउज़र से चलाकर या कमांड लाइन के माध्यम से एपीआई तक पहुंच कर विभिन्न प्रकारों को क्रम में घुमा सकता है। इसका मतलब है कि अनुरोधित फ़ाइल के एक्सटेंशन के आधार पर किस प्रकार का अनुरोध किया गया था, उदाहरण के लिए example.xml या example.json।

आप सर्वर लॉग की जाँच करके जाँच सकते हैं कि रेल्स फ़ाइल प्रकार के बारे में क्या "सोचता है":

2013-12-02 15:21:08 -0800 पर 127.0.0.1 के लिए "/पोस्ट/नया" प्राप्त करना शुरू किया, PostsController द्वारा प्रसंस्करण#HTML के रूप में नया

पहली पंक्ति आपको बताती है कि अनुरोध URL क्या है, और दूसरी पंक्ति आपको बताती है कि अनुरोध कहाँ हैं और रेल उन्हें कैसे संसाधित करती है। याकबी वि विकोरिस्टोवली विस्तारित.जेसन, यह इस तरह दिखेगा:

2013-12-04 12:02:01 -0800 PostsController#index पर JSON के रूप में 127.0.0.1 के लिए "/posts.json" प्राप्त करना प्रारंभ किया

यदि आप एक परीक्षण कार्यक्रम चला रहे हैं, तो विभिन्न URL क्वेरी करने का प्रयास करें। यदि आपका नियंत्रक उन्हें संसाधित नहीं कर सकता है, तो आप क्षमा को अक्षम कर सकते हैं, लेकिन फिर भी यह पता लगाना होगा कि रेल आपके अनुरोधों के बारे में क्या समझता है।

JSON या XML का प्रतिपादन

यदि आप तय करते हैं कि आप HTML के बजाय JSON या XML प्रस्तुत करना चाहते हैं, तो आपको अपने नियंत्रक को सूचित करना होगा कि आपको HTML के बजाय JSON या XML प्रस्तुत करना होगा। इसे अर्जित करने का एक तरीका #response_to पद्धति का उपयोग करना है:

क्लास उपयोगकर्ता नियंत्रक< ApplicationController def index @users = User.all respond_to do |format| format.html # index.html.erb format.xml { render xml: @users } format.json { render json: @users } end end end

इस मामले में, #respond_to ऑब्जेक्ट प्रारूप को ब्लॉक में स्थानांतरित करता है, जब तक कि आप रेंडरिंग में एक पुष्टिकरण प्रतिक्रिया नहीं जोड़ सकते। यदि आप एक मानक रेल टेम्पलेट (इस एप्लिकेशन ऐप/व्यू/index.html.erb में) का उपयोग करके HTML प्रस्तुत करते हैं तो आपको कुछ भी हासिल नहीं होगा।

#render फ़ंक्शन यह समझने में उपयोगी है कि प्रारूपों की एक विस्तृत श्रृंखला को कैसे प्रस्तुत किया जाए। यदि आप कुंजी पास करते हैं: json, तो आपको इस एप्लिकेशन @users में मान पर #to_json दिखाई देगा। यह आपके रूबी ऑब्जेक्ट को JSON पंक्तियों में परिवर्तित करता है जिसे उस परिशिष्ट में भेज दिया जाएगा जो इसके लिए पूछता है।

इस तरह आप अपना एपीआई हटा देंगे। बेशक, यदि आप कुछ गैर-नियमित भाषण पर काम करना चाहते हैं तो एपीआई निर्माण अधिक जटिल हो सकता है, लेकिन सब कुछ बुनियादी बातों तक ही सीमित रखें।

घूमने वाली विशेषताओं का संकेत

यह संभव है कि आप पुनः कनेक्ट करना चाहते हों, लेकिन उपयोगकर्ता के ऑब्जेक्ट (उपयोगकर्ता) के साथ ही क्लाइंट का ईमेल पता वापस न लौटाएँ। इस मामले में आप उन विशेषताओं को बदलना चाहेंगे जिन्हें घुमाया जाएगा, #to_json विधि चलाने वाली विशेषताओं को संशोधित करते हुए।

पहले, आप बस अपने संस्करण के साथ #to_json विधि का नाम बदल देते थे, लेकिन अब आपको इसकी आवश्यकता नहीं है - वास्तव में, आप इसके बजाय #as_json विधि का नाम बदल देंगे। #as_json विधि को #to_json विधि के स्थान पर प्रतिस्थापित किया जाता है, ताकि इसका संशोधन अंतर्निहित रूप से #to_json के परिणाम को बदल दे, लेकिन ऐसा एक विशिष्ट तरीके से करता है।

#to_json दो तरीकों से काम करता है: यह #as_json चलाता है और उन विशेषताओं के हैश को पुनः प्राप्त करता है जिन्हें JSON में प्रस्तुत किया जाएगा। फिर आप ActiveSupport::json.encode का उपयोग करके JSON का उपयोग करके रेंडर कर सकते हैं। फिर, #as_json को संशोधित करते समय, आप अधिक विशेष रूप से #to_json पद्धति का वह भाग बता रहे हैं जिसे आप वास्तव में बदलना चाहते हैं।

हमारे संस्करण में, हम अपने मॉडल में #as_json को संशोधित कर रहे हैं ताकि उन विशेषताओं को घुमाया जा सके जिनकी हमें आवश्यकता नहीं है:

# ऐप/मॉडल/यूजर.आरबी क्लास यूजर< ActiveRecord::Base # Вариант 1: Полное переопределение метода #as_json def as_json(options={}) { :name =>self.name ) # ईमेल फ़ील्ड अंत में शामिल नहीं है # विकल्प 2: विकोरिस्ट की मानक विधि #as_json def as_json(options=()) सुपर(केवल: [:नाम]) अंत अंत

फिर, हमारे नियंत्रक को पहले की तरह JSON प्रस्तुत करने की आवश्यकता नहीं होगी (नीचे दिए गए एप्लिकेशन में, JSON हमेशा प्रस्तुत किया जाएगा, भले ही HTML क्वेरी भेजी गई हो या नहीं):

# ऐप/नियंत्रक/उपयोगकर्ता_नियंत्रक.आरबी वर्ग उपयोगकर्ता नियंत्रक< ApplicationController def index render json: User.all end end

कृपया ध्यान दें कि यदि आप #render का उपयोग कर रहे हैं तो आपको स्वयं #to_json पर क्लिक करने की आवश्यकता नहीं है - हम आपके लिए यह कर सकते हैं।

सुधार के साथ पृष्ठों के सही प्रदर्शन के लिए हेरोकू इनोड अतिरिक्त शॉर्टकट निकाल सकते हैं। चमत्कार. आपको पहले ऐप/सार्वजनिक निर्देशिका से स्थिर पृष्ठों को हटाने की आवश्यकता हो सकती है।

सुरक्षा कॉल

शायद आप केवल लॉगिन उद्देश्यों के लिए एपीआई तक पहुंचने में सक्षम होना चाहते हैं। नियंत्रक में आपका प्रमाणीकरण पहले से ही इस रोबोट के लिए काम कर सकता है - बस जांचें कि आपके पास सही #before_action सेटिंग्स हैं (उदाहरण के लिए, before_action:require_login)। यदि आप लॉगिन का पक्ष देख सकते हैं तो आपको कार्यक्षमता की आवश्यकता हो सकती है, या आप भिन्न डेटा के लिए दोषी हो सकते हैं। आप नहीं चाहेंगे कि अनलॉग्ड क्लाइंट महत्वपूर्ण डेटा पुनर्प्राप्त करने के लिए एपीआई तक पहुंचने में असमर्थ हों। इसी तरह, आपको अनधिकृत उपयोगकर्ताओं को अपने HTML पेज पर गाने प्रदर्शित करने की अनुमति नहीं देनी चाहिए।

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

आने वाले दिन

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

  • बिल्डिंग विस्मयकारी रेल एपीआई लेख में गेमिंग अनुप्रयोगों और उद्योग एपीआई मानकों के विकास के लिए सर्वोत्तम तरीकों का विवरण शामिल है।

सेवा उन्मुख संरचना

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

यह कई कारणों से अच्छा है. हालाँकि, चूँकि आपका प्रोग्राम यह नहीं जानता है कि अन्य भाग कैसे काम करते हैं और केवल यह जानता है कि उनके एपीआई के माध्यम से डेटा का अनुरोध कैसे किया जाता है, आप सेवा कोड में बदलाव कर सकते हैं और पहले की तरह यह तय कर सकते हैं कि वटी कैसे करें। आप एक सेवा को पूरी तरह से दूसरी सेवा से बदल सकते हैं, और जब तक आप समान एपीआई विधियों का उपयोग करके संचार करते हैं, तब तक सब कुछ और भी आसान हो जाएगा। आप बाहरी एपीआई को ठीक से लिखने के बजाय अपने प्रोग्राम (उदाहरण के लिए, भुगतान प्रणाली) के हिस्से के रूप में उपयोग कर सकते हैं। आप एक PHP ऐड-ऑन बना सकते हैं जो पायथन ऐड-ऑन के साथ इंटरैक्ट करता है, जो रेल्स ऐड-ऑन के साथ इंटरैक्ट करता है, और सभी एक साथ काम करते हैं, भले ही वे एक अतिरिक्त एपीआई का उपयोग करके एक-दूसरे से लिंक हों।

एक नियम के रूप में, अपने कार्यक्रम के साथ अपनी त्वचा को यथासंभव मुक्त रखने का प्रयास करना एक अच्छा विचार है। SOA की अवधारणा आपको यह सोचने के लिए प्रोत्साहित करती है कि आप अपने प्रोग्राम के अन्य हिस्सों को क्या तरीके देना चाहते हैं, और साथ ही अपने कोड को साफ-सुथरा बनाते हैं। इसके अलावा, यह मानते हुए कि आपके कार्यक्रम का प्रत्येक प्रमुख घटक स्वतंत्र है, आप समस्याओं को अधिक आसानी से दूर करने और निर्णयों को अधिक सार्थक बनाने में सक्षम होंगे।

संपूर्ण कार्यक्रम के लिए एक सेवा-उन्मुख आर्किटेक्चर विकसित करना एक परिष्कृत वर्ग और विधि पर या बड़े पैमाने पर एक विशाल बंधने योग्य रूबी स्क्रिप्ट विकसित करने के बारे में है।

सेवा-उन्मुख वास्तुकला में परिवर्तन का सबसे लोकप्रिय उदाहरण Amazon.com है। जाहिर तौर पर 2002 में, जेफ बेजोस ने सीधे तौर पर कहा था कि सभी कार्य समूहों को SOA पर स्विच करना होगा, अन्यथा उन्हें निकाल दिया जाएगा। सुमनो विडोमी ब्लॉग भेजा Google का ब्राउज़र, आंतरिक कॉर्पोरेट उद्देश्यों के लिए, और SOA पर अमेज़ॅन के दबाव को प्रकट करके अचानक जनता के लिए खुला हो गया। यह एक अद्भुत पाठ है, इसलिए इसका मूल्यांकन करना आसान है, और बेजोस की शीट के मुख्य बिंदु पोस्ट के अगले उद्धरण में शामिल हैं:

1) सभी कमांड अब सेवा इंटरफेस के माध्यम से अपना डेटा और कार्यक्षमता प्रदान करते हैं।

2) अन्य इंटरफेस के माध्यम से एक के साथ बातचीत करने के लिए कमांड की आवश्यकता होती है।

3) अंतर-प्रक्रिया संचार के अन्य रूप: समान प्रत्यक्ष संदेश, किसी अन्य कमांड से डेटा की समान सीधी रीडिंग, समान मेमोरी मॉडल, समान "बैकडोर", आदि। बातचीत का एकमात्र स्वीकार्य तरीका एक सीमा के माध्यम से सेवा इंटरफ़ेस तक पहुंच है।

4) क्या तकनीक से बदबू आ रही है. HTTP, कोरबा, पबसब, पावर प्रोटोकॉल - इससे कोई फर्क नहीं पड़ता। मैं बेजोस को बिल्कुल भी दोष नहीं देता।

5) सभी सेवा इंटरफ़ेस, बिना किसी दोष के, कॉल को नियंत्रित करने की क्षमता के साथ डिज़ाइन किए गए हैं। टीम को इस तरह से योजना और डिज़ाइन करना चाहिए ताकि कंपनी के डेवलपर्स को एक इंटरफ़ेस प्रदान करने में सक्षम हो सके। अच्छा दोष.

6) जिसने भी इन लाभों को नजरअंदाज किया है उसे राहत मिलेगी।

एसओए सही पक्ष पर गंभीर नहीं है। बेशक, इस विकी के साथ बहुत सारी समस्याएं आती हैं - अमेज़ॅन से "सबक छीनने" के बारे में इस पोस्ट को देखकर आश्चर्य होता है - लेकिन इसके कई फायदे भी हैं।

बेशक, जब आप अपने लिए "गेम" जोड़ बना रहे हों तो आपको SOA के बारे में चिंता नहीं करनी चाहिए, लेकिन यदि आप किसी आईटी कंपनी के लिए काम करना शुरू करते हैं तो यह भोजन निश्चित रूप से आपके सामने खड़ा होगा, इसलिए इसे जानना अच्छा है अभ्यास।

आपका मेटा

  1. JSON और XML रेंडरिंग के बारे में जानने के लिए रेल्स कंट्रोलर फ्रेमवर्क की धारा 7 पढ़ें।
  2. बदबू को देखना मुश्किल नहीं है (क्योंकि वे थोड़ी दूर हैं, वे तुरंत तैयार हो जाते हैं), लेकिन यदि आप चाहें, तो इसके बारे में अधिक जानने के लिए पाठ के नीचे अतिरिक्त संसाधन अनुभाग में रेलकास्ट पर एक नज़र डालें। एपीआई के फायदे.

विस्नोवोक

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

एपीआई के साथ इंटरैक्ट करने का सबसे अच्छा तरीका इसे बनाना और इंटरैक्ट करना है, जिस पर हम अपनी परियोजनाओं में ध्यान केंद्रित करते हैं।

शायद आपने "एपीआई" शब्द गढ़ा है। ऑपरेटिंग सिस्टम, वेब ब्राउज़र और अपडेटेड प्रोग्राम अक्सर उपभोक्ताओं के लिए नए एपीआई की घोषणा करते हैं। एपीआई क्या है?

अप्लिकेशन प्रोग्रामिंग अंतरफलक

एपीआई शब्द एक संक्षिप्त नाम है और इसका अर्थ "एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस" है।

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

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

यह एक आदर्श रूपक नहीं है, लेकिन कुछ डेवलपर्स को परिणाम निकालने के लिए एपीआई शक्ति देनी पड़ सकती है, जो शायद, एक चिमेरिकल रेस्तरां की तरह है, जहां आप अपने अवयवों से चीजें कर सकते हैं जो कि रसोई का उत्पादन करेगी।

एपीआई डेवलपर्स को मूल्यवान नौकरी अर्जित करने के लिए प्लेटफ़ॉर्म के संसाधनों का त्वरित उपयोग करके समय बचाने की अनुमति देता है। यह टूटे हुए कोड की मात्रा को बदलने में मदद करता है, और एक ही प्लेटफ़ॉर्म के लिए ऐड-ऑन के बीच अनुकूलता बनाने में भी मदद करता है। एपीआई हार्डवेयर और सॉफ्टवेयर संसाधनों तक पहुंच को नियंत्रित कर सकते हैं।

एपीआई खुदरा विक्रेताओं के लिए जीवन आसान बनाता है

मान लीजिए कि आप iPhone के लिए एक प्रोग्राम विकसित करना चाहते हैं। Apple iOS ऑपरेटिंग सिस्टम आपके लिए इसे आसान बनाने के लिए किसी भी अन्य ऑपरेटिंग सिस्टम की तरह बड़ी संख्या में एपीआई इंटरफेस प्रदान करता है।

उदाहरण के लिए, यदि आप एक या कई वेब पेज प्रदर्शित करने के लिए वेब ब्राउज़र का उपयोग करना चाहते हैं, तो आपको अपने प्रोग्राम के लिए किसी वेब ब्राउज़र को शुरू से प्रोग्राम करने की आवश्यकता नहीं है। में और
आप अपने प्रोग्राम में WebKit (Safari) वेब ब्राउज़र स्थापित करने के लिए WKWebView API का उपयोग कर सकते हैं।

यदि आप iPhone कैमरे से फ़ोटो या वीडियो लेना चाहते हैं, तो आपको कैमरा इंटरफ़ेस लिखने की आवश्यकता नहीं है। आप अपने प्रोग्राम में iPhone कैमरा स्थापित करने के लिए कैमरा API का उपयोग कर सकते हैं। यदि कोई एपीआई नहीं होती, तो सॉफ़्टवेयर डेवलपर्स को कैमरे का स्वयं का सॉफ़्टवेयर बनाना होता और कैमरे के हार्डवेयर के इनपुट की व्याख्या करनी होती। यदि Apple ऑपरेटिंग सिस्टम के डेवलपर्स ने रोबोट के लिए यह सभी महत्वपूर्ण कार्य विकसित कर लिया है, तो डेवलपर्स कैमरा जोड़ने के लिए कैमरा एपीआई इंटरफ़ेस का उपयोग कर सकते हैं, और फिर अपने प्रोग्राम लिखना जारी रख सकते हैं। और यदि Apple कैमरा एपीआई में सुधार करता है, तो इसका उपयोग करने वाले सभी प्रोग्राम स्वचालित रूप से इन परिवर्तनों को गति देंगे।

यह सभी प्लेटफ़ॉर्म पर लागू होता है. उदाहरण के लिए, क्या आप एक विंडोज़ डायलॉग बॉक्स बनाना चाहते हैं? एपीआई किसके लिए है. क्या आप Android पर फ़िंगरप्रिंट प्रमाणीकरण का समर्थन करना चाहते हैं? इस एपीआई के लिए आपको किसी एंड्रॉइड विक्रेता के फिंगर सेंसर का परीक्षण करने की आवश्यकता नहीं है। खुदरा विक्रेताओं को बार-बार यह काम दोहराने की जरूरत नहीं है।

एपीआई इंटरफेस संसाधनों तक पहुंच प्रदान करते हैं

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

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

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

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

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

एपीआई सेवाओं के बीच संचार के लिए विकिपीडिया है

अन्य कारणों से भी एपीआई की आलोचना की जाती है। उदाहरण के लिए, यदि आपने कभी Google मैप्स ऑब्जेक्ट डाउनलोड किया है, तो आपने इसे किसी वेबसाइट पर भेजा है, वह वेबसाइट उस मैप को लोड करने के लिए Google मैप्स एपीआई का उपयोग करती है। Google वेब ब्राउज़र के लिए इनके समान एपीआई प्रदान करता है, जो एपीआई का उपयोग सीधे अपनी वेबसाइट पर जटिल वस्तुओं को एकत्र करने के लिए कर सकते हैं। चूंकि ऐसी कोई एपीआई नहीं है, इसलिए खुदरा विक्रेताओं को किसी वेबसाइट पर एक छोटा इंटरैक्टिव मानचित्र रखने के लिए अपने स्वयं के कार्ड बनाने और जमा करने पड़ सकते हैं।

इस एपीआई के कारण, Google तृतीय-पक्ष वेबसाइटों पर Google मानचित्र तक पहुंच को नियंत्रित कर सकता है, यह सुनिश्चित करते हुए कि वे इसका उचित तरीके से दुरुपयोग करेंगे और उदाहरण के लिए, Google मानचित्र वेबसाइट द्वारा प्रदर्शित फ़्रेम को लापरवाही से लीक करने का प्रयास नहीं करेंगे।

बहुत सारी अलग-अलग ऑनलाइन सेवाएँ हैं। Google अनुवाद से पाठ का अनुवाद करने या वेबसाइटों पर फेसबुक टिप्पणियां या ट्विटर उत्तर प्रदर्शित करने के लिए एक एपीआई बनाएं।

OAuth मानक कई एपीआई को भी परिभाषित करता है जो आपको किसी अन्य सेवा के माध्यम से किसी साइट पर लॉग इन करने की अनुमति देता है, उदाहरण के लिए, उस विशेष साइट के लिए नया खाता खाता बनाए बिना किसी नई वेबसाइट में लॉग इन करने के लिए फेसबुक, Google या ट्विटर अकाउंट खातों का उपयोग करना। एपीआई मानक अनुबंध हैं जो यह निर्धारित करते हैं कि खुदरा विक्रेता सेवा के साथ कैसे बातचीत करते हैं, और खुदरा विक्रेता किस प्रकार के उत्पादों के उत्पादन के लिए जिम्मेदार हैं।

यदि आपने यह लेख पढ़ा है, तो आपके पास एपीआई जैसे उनके बारे में सर्वोत्तम कथन होंगे। वैसे, आपको यह जानने की ज़रूरत नहीं है कि एपीआई क्या है, क्योंकि आप डेवलपर नहीं हैं। यदि आप जानते हैं कि सॉफ़्टवेयर प्लेटफ़ॉर्म या सेवा ने विभिन्न हार्डवेयर या सेवाओं के लिए नए एपीआई जोड़े हैं, तो डेवलपर्स के लिए ऐसे फ़ंक्शंस का उपयोग करना आसान हो सकता है।