एपीआई: Difference between revisions
No edit summary |
No edit summary |
||
| (3 intermediate revisions by 3 users not shown) | |||
| Line 2: | Line 2: | ||
{{other uses}} | {{other uses}} | ||
{{redirect|Api.php|विकिपीडिया एपीआई|विशेष: एपीआई हेल्प|selfref=ट्रू}} | {{redirect|Api.php|विकिपीडिया एपीआई|विशेष: एपीआई हेल्प|selfref=ट्रू}} | ||
[[File:Screenshot of NASA API documentation.png|thumb|नासा द्वारा लिखित वेब एपीआई प्रलेखन का स्क्रीनशॉट।]]एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) दो या दो से अधिक कंप्यूटर प्रोग्रामों के लिए एक दूसरे के साथ संवाद करने का एक तरीका है। यह एक प्रकार का सॉफ़्टवेयर इंटरफ़ेस है, जो सॉफ़्टवेयर के अन्य भागों को सेवा प्रदान करता है।<ref>{{cite book |last=Reddy |first=Marathi |author-link= |date=2011 |title=सी ++ के लिए एपीआई डिजाइन|url=https://www.google.com/books/edition/API_Design_for_C++/IY29LylT85wC |publisher=Elsevier Science |page=1 |isbn=9780123850041}}</ref> एक दस्तावेज़ या मानक जो वर्णन करता है कि इस तरह के संबंध या इंटरफ़ेस को कैसे बनाया या उपयोग किया जाए, उसे एपीआई विनिर्देश कहा जाता है। एक कंप्यूटर प्रणाली जो इस मानक को पूरा करता है, उसे एपीआई को लागू करने या प्रदर्शित करने के लिए कहा जाता है। एपीआई शब्द विनिर्देश या कार्यान्वयन के लिए संदर्भित हो सकता है। | [[File:Screenshot of NASA API documentation.png|thumb|नासा द्वारा लिखित वेब एपीआई प्रलेखन का स्क्रीनशॉट।]]'''एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस''' (एपीआई) दो या दो से अधिक कंप्यूटर प्रोग्रामों के लिए एक दूसरे के साथ संवाद करने का एक तरीका है। यह एक प्रकार का सॉफ़्टवेयर इंटरफ़ेस है, जो सॉफ़्टवेयर के अन्य भागों को सेवा प्रदान करता है।<ref>{{cite book |last=Reddy |first=Marathi |author-link= |date=2011 |title=सी ++ के लिए एपीआई डिजाइन|url=https://www.google.com/books/edition/API_Design_for_C++/IY29LylT85wC |publisher=Elsevier Science |page=1 |isbn=9780123850041}}</ref> एक दस्तावेज़ या मानक जो वर्णन करता है कि इस तरह के संबंध या इंटरफ़ेस को कैसे बनाया या उपयोग किया जाए, उसे एपीआई विनिर्देश कहा जाता है। एक कंप्यूटर प्रणाली जो इस मानक को पूरा करता है, उसे एपीआई को लागू करने या प्रदर्शित करने के लिए कहा जाता है। एपीआई शब्द विनिर्देश या कार्यान्वयन के लिए संदर्भित हो सकता है। | ||
यूजर इंटरफेस के विपरीत, जो कंप्यूटर को व्यक्ति से जोड़ता है, एप्लिकेशन प्रोग्रामिंग इंटरफेस कंप्यूटर या सॉफ्टवेयर के भागों को एक दूसरे से जोड़ता है। यह एक कंप्यूटर प्रोग्रामर के अलावा किसी अन्य व्यक्ति (अंतिम उपयोगकर्ता) द्वारा सीधे उपयोग किए जाने के लिए अभिप्रेत नहीं है जो इसे सॉफ्टवेयर में सम्मिलित कर रहा है। एक एपीआई प्रायः विभिन्न भागों से बना होता है जो प्रोग्रामर के लिए उपलब्ध उपकरण या सेवाओं के रूप में कार्य करता है। एक प्रोग्राम या प्रोग्रामर जो इन भागों में से एक का उपयोग करता है, उसे एपीआई के उस हिस्से को कॉल करने के लिए कहा जाता है। एपीआई बनाने वाली कॉल को सबरूटीन्स, विधियों, अनुरोधों या समापन बिंदुओं के रूप में भी जाना जाता है। एक एपीआई विनिर्देश इन कॉलों को परिभाषित करता है, जिसका अर्थ है कि यह बताता है कि उनका उपयोग कैसे करें या उन्हें कैसे कार्यान्वित करें। | यूजर इंटरफेस के विपरीत, जो कंप्यूटर को व्यक्ति से जोड़ता है, एप्लिकेशन प्रोग्रामिंग इंटरफेस कंप्यूटर या सॉफ्टवेयर के भागों को एक दूसरे से जोड़ता है। यह एक कंप्यूटर प्रोग्रामर के अलावा किसी अन्य व्यक्ति (अंतिम उपयोगकर्ता) द्वारा सीधे उपयोग किए जाने के लिए अभिप्रेत नहीं है जो इसे सॉफ्टवेयर में सम्मिलित कर रहा है। एक एपीआई प्रायः विभिन्न भागों से बना होता है जो प्रोग्रामर के लिए उपलब्ध उपकरण या सेवाओं के रूप में कार्य करता है। एक प्रोग्राम या प्रोग्रामर जो इन भागों में से एक का उपयोग करता है, उसे एपीआई के उस हिस्से को कॉल करने के लिए कहा जाता है। एपीआई बनाने वाली कॉल को सबरूटीन्स, विधियों, अनुरोधों या समापन बिंदुओं के रूप में भी जाना जाता है। एक एपीआई विनिर्देश इन कॉलों को परिभाषित करता है, जिसका अर्थ है कि यह बताता है कि उनका उपयोग कैसे करें या उन्हें कैसे कार्यान्वित करें। | ||
| Line 267: | Line 267: | ||
{{Operating system}} | {{Operating system}} | ||
[[Category:Articles with hatnote templates targeting a nonexistent page]] | |||
[[Category:Articles with short description]] | |||
[[Category:CS1 English-language sources (en)]] | |||
[[Category:CS1 français-language sources (fr)]] | |||
[[Category:CS1 maint]] | |||
[[Category:CS1 Ελληνικά-language sources (el)]] | |||
[[Category:Citation Style 1 templates|W]] | |||
[[Category:Collapse templates]] | |||
[[Category:Created On 16/12/2022]] | |||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Missing redirects]] | |||
[[Category:Multi-column templates]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Pages using div col with small parameter]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates based on the Citation/CS1 Lua module]] | |||
[[Category:Templates generating COinS|Cite web]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates used by AutoWikiBrowser|Cite web]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Templates using under-protected Lua modules]] | |||
[[Category:Wikipedia fully protected templates|Div col]] | |||
[[Category:Wikipedia metatemplates]] | |||
[[Category:अनुप्रयोग प्रोग्रामिंग इंटरफेस| ]] | [[Category:अनुप्रयोग प्रोग्रामिंग इंटरफेस| ]] | ||
[[Category:तकनीकी संचार]] | [[Category:तकनीकी संचार]] | ||
Latest revision as of 16:48, 28 August 2023
एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (एपीआई) दो या दो से अधिक कंप्यूटर प्रोग्रामों के लिए एक दूसरे के साथ संवाद करने का एक तरीका है। यह एक प्रकार का सॉफ़्टवेयर इंटरफ़ेस है, जो सॉफ़्टवेयर के अन्य भागों को सेवा प्रदान करता है।[1] एक दस्तावेज़ या मानक जो वर्णन करता है कि इस तरह के संबंध या इंटरफ़ेस को कैसे बनाया या उपयोग किया जाए, उसे एपीआई विनिर्देश कहा जाता है। एक कंप्यूटर प्रणाली जो इस मानक को पूरा करता है, उसे एपीआई को लागू करने या प्रदर्शित करने के लिए कहा जाता है। एपीआई शब्द विनिर्देश या कार्यान्वयन के लिए संदर्भित हो सकता है।
यूजर इंटरफेस के विपरीत, जो कंप्यूटर को व्यक्ति से जोड़ता है, एप्लिकेशन प्रोग्रामिंग इंटरफेस कंप्यूटर या सॉफ्टवेयर के भागों को एक दूसरे से जोड़ता है। यह एक कंप्यूटर प्रोग्रामर के अलावा किसी अन्य व्यक्ति (अंतिम उपयोगकर्ता) द्वारा सीधे उपयोग किए जाने के लिए अभिप्रेत नहीं है जो इसे सॉफ्टवेयर में सम्मिलित कर रहा है। एक एपीआई प्रायः विभिन्न भागों से बना होता है जो प्रोग्रामर के लिए उपलब्ध उपकरण या सेवाओं के रूप में कार्य करता है। एक प्रोग्राम या प्रोग्रामर जो इन भागों में से एक का उपयोग करता है, उसे एपीआई के उस हिस्से को कॉल करने के लिए कहा जाता है। एपीआई बनाने वाली कॉल को सबरूटीन्स, विधियों, अनुरोधों या समापन बिंदुओं के रूप में भी जाना जाता है। एक एपीआई विनिर्देश इन कॉलों को परिभाषित करता है, जिसका अर्थ है कि यह बताता है कि उनका उपयोग कैसे करें या उन्हें कैसे कार्यान्वित करें।
एपीआई का एक उद्देश्य आंतरिक विवरणों को छिपाना है कि एक प्रणाली कैसे काम करती है, केवल उन हिस्सों को प्रकट करता है जो प्रोग्रामर को उपयोगी लगेगा और आंतरिक विवरण बाद में बदल जाने पर भी उन्हें सुसंगत बनाए रखेगा। एक एपीआई प्रणाली की एक विशेष जोड़ी के लिए कस्टम-निर्मित हो सकता है, या यह एक साझा मानक हो सकता है जो कई प्रणालियों के बीच अंर्तकार्यकारी को अनुमति देता है।
एपीआई शब्द का प्रयोग प्रायः वेब एपीआई को संदर्भित करने के लिए किया जाता है,[2] जो इंटरनेट से जुड़े कंप्यूटरों के बीच संचार की अनुमति देता है। प्रोग्रामिंग भाषाओं, सॉफ्टवेयर लाइब्रेरी, कंप्यूटर ऑपरेटिंग सिस्टम और कंप्यूटर हार्डवेयर के लिए एपीआई भी हैं। एपीआई की उत्पत्ति 1940 के दशक में हुई थी, हालांकि यह शब्द 1960 और 1970 के दशक तक सामने नहीं आया था। एपीआई में हाल के विकास ने माइक्रोसर्विसेज की लोकप्रियता में वृद्धि की है, जो सार्वजनिक एपीआई के माध्यम से अभिगम की जाने वाली शिथिल युग्मित सेवाएं हैं।[3]
उद्देश्य
अनुप्रयोगों के निर्माण में, एक एपीआई अंतर्निहित कार्यान्वयन को सारणित करके प्रोग्रामिंग को सरल बनाता है और केवल उन वस्तुओं या कार्यों को प्रकट करता है जिनकी डेवलपर को आवश्यकता होती है। जबकि एक ईमेल क्लाइंट के लिए ग्राफिकल इंटरफ़ेस उपयोगकर्ता को एक बटन प्रदान कर सकता है जो नए ईमेल लाने और स्पष्ट करने के लिए सभी चरणों का पालन करता है, फ़ाइल इनपुट/आउटपुट के लिए एक एपीआई डेवलपर को एक ऐसा फ़ंक्शन दे सकता है जो फ़ाइल को एक स्थान से दूसरे स्थान पर कॉपी करता है इस आवश्यकता के बिना कि डेवलपर दृश्यों के पीछे होने वाली फाइल प्रणाली संचालन को समझता है।[4]
शब्द का इतिहास
एपीआई शब्द प्रारम्भ में केवल एंड-यूज़र-फेसिंग प्रोग्राम के लिए एक इंटरफ़ेस का वर्णन करता है, जिसे एप्लिकेशन प्रोग्राम के रूप में जाना जाता है। यह उत्पत्ति अभी भी "एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस" के नाम से परिलक्षित होती है। आज, यह शब्द व्यापक है, जिसमें उपयोगिता (यूटिलिटी) सॉफ्टवेयर और यहां तक कि हार्डवेयर इंटरफेस भी सम्मिलित हैं।[6]
1940 और 1950 के दशक
एपीआई का विचार स्वयं शब्द से बहुत पुराना है। ब्रिटिश कंप्यूटर वैज्ञानिक मौरिस विल्क्स और डेविड व्हीलर ने 1940 के दशक में एक प्रारंभिक कंप्यूटर ईडीएसएसी (EDSAC) के लिए एक मॉड्यूलर सॉफ्टवेयर लाइब्रेरी पर काम किया। इस लाइब्रेरी में सबरूटीन्स को फाइलिंग कैबिनेट में व्यवस्थित पंच पेपर टेप पर संग्रहित किया गया था। इस कैबिनेट में यह भी सम्मिलित है कि विल्क्स और व्हीलर ने प्रत्येक सबरूटीन के बारे में नोट्स की एक "लाइब्रेरी कैटलॉग" को क्या कहा और इसे एक प्रोग्राम में कैसे सम्मिलित किया जाए। आज, इस तरह के कैटलॉग को एपीआई (या एपीआई विनिर्देश या एपीआई दस्तावेज) कहा जाएगा क्योंकि यह एक प्रोग्रामर को निर्देश देता है कि प्रोग्रामर को प्रत्येक सबरूटीन का उपयोग (या "कॉल") कैसे करें।[6]
विल्क्स एंड व्हीलर की 1951 की किताब एक इलेक्ट्रॉनिक डिजिटल कंप्यूटर के लिए प्रोग्राम तैयार करने में पहला प्रकाशित एपीआई विनिर्देश सम्मिलित है। जोशुआ बलोच का मानना है कि विल्क्स और व्हीलर ने "अव्यक्त रूप से एपीआई का आविष्कार" किया क्योंकि यह एक ऐसी अवधारणा है जिसे खोजा गया है न कि आविष्कार किया गया है।[6]
1960 और 1970 के दशक
शब्द "एप्लिकेशन प्रोग्राम इंटरफ़ेस" (बिना -आईएनजी प्रत्यय के) पहली बार 1968 में एएफआईपीएस (AFIPS) सम्मेलन में प्रस्तुत रिमोट कंप्यूटर ग्राफिक्स के लिए डेटा संरचना और तकनीक नामक एक पेपर में दर्ज किया गया था।[8][6] इस पेपर के लेखक इस स्थिति में बाकी कंप्यूटर प्रणाली के साथ एक ग्राफिक प्रोग्राम की परस्पर क्रिया का वर्णन करने के लिए इस शब्द का उपयोग करते हैं। एक सुसंगत एप्लिकेशन इंटरफ़ेस (फोरट्रान सबरूटीन कॉल्स से मिलकर) का उद्देश्य प्रोग्रामर को ग्राफिक्स डिस्प्ले डिवाइस विशिष्टताओं से निपटने से मुक्त करना और कंप्यूटर या डिस्प्ले को बदलने पर हार्डवेयर स्वतंत्रता प्रदान करना था।[7]
डेटाबेस के क्षेत्र में इस शब्द का परिचय सी.जे. डेट[9] ने 1974 में द रिलेशनल एंड नेटवर्क एप्रोचेज़- कम्पेरिज़न ऑफ़ द एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस नामक एक पेपर में किया था।[10] एक एपीआई डेटाबेस प्रबंधन प्रणालियों के लिए एएनएसआई/स्पार्क रूपरेखा का हिस्सा बन गया। इस रूपरेखा ने एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस को अन्य इंटरफेस, जैसे कि जांच इंटरफ़ेस से अलग से व्यवहार किया। 1970 के दशक में डाटाबेस पेशेवरों ने देखा कि इन विभिन्न इंटरफेसों को जोड़ा जा सकता है पर्याप्त रूप से समृद्ध एप्लिकेशन इंटरफ़ेस अन्य इंटरफेसों का भी समर्थन कर सकता है।[5]
इस अवलोकन ने एपीआई का नेतृत्व किया जो सभी प्रकार की प्रोग्रामिंग का समर्थन करता था, न कि केवल एप्लिकेशन प्रोग्रामिंग का।
1990 के दशक
1990 तक, प्रौद्योगिकीविद् कार्ल मलामुद द्वारा एपीआई को "कुछ कार्यों को करने के लिए एक प्रोग्रामर के लिए उपलब्ध सेवाओं का एक सेट" के रूप में परिभाषित किया गया था।[11]
दूरस्थ प्रक्रिया कॉल और वेब एपीआई का प्रारम्भ के साथ एपीआई के विचार को फिर से विस्तारित किया गया। चूंकि 1970 और 1980 के दशक में कंप्यूटर नेटवर्क सामान्य हो गए थे, प्रोग्रामर न केवल अपने स्थानीय कंप्यूटरों पर बल्कि अन्यत्र स्थित कंप्यूटरों पर स्थित लाइब्रेरी को कॉल चाहते थे ये दूरस्थ प्रक्रिया कॉल विशेष रूप से जावा भाषा द्वारा अच्छी तरह से समर्थित थे। 1990 के दशक में, इंटरनेट के प्रसार के साथ, कोरबा (CORBA), कॉम (COM), और डीकॉम (DCOM) जैसे मानकों ने एपीआई सेवाओं को प्रकट करने का सबसे सामान्य तरीका बनने के लिए प्रतिस्पर्धा की।[12]
2000 के दशक
2000 में यूसी इरविन में रॉय फील्डिंग के शोध प्रबंध आर्किटेक्चरल स्टाइल्स और नेटवर्क-आधारित सॉफ़्टवेयर आर्किटेक्चर के डिज़ाइन ने प्रतिनिधित्ववादी स्थिति में स्थानांतरण (आरईएसटी) को रेखांकित किया और "नेटवर्क-आधारित एप्लिकेशन प्रोग्रामिंग इंटरफेस" के विचार का वर्णन किया, जो फील्डिंग पारंपरिक "लाइब्रेरी-आधारित" एपीआई के विपरीत है।[13] एक्सएमएल (XML) और जेएसओएन (JSON) वेब एपीआई ने 2000 में व्यापक व्यावसायिक स्वीकृति देखी और 2022 तक जारी रही। वेब एपीआई अब एपीआई शब्द का सबसे सामान्य अर्थ है।[2]
2001 में टिम बर्नर्स-ली द्वारा प्रस्तावित सिमेंटिक वेब में "सिमेंटिक एपीआई" सम्मिलित था जो एपीआई को एक सॉफ्टवेयर व्यवहार इंटरफेस के स्थान पर एक खुले वितरित डेटा इंटरफेस के रूप में पुन: प्रस्तुत करता है।[14] स्वामित्व इंटरफेस और एजेंट खुले इंटरफेस की तुलना में अधिक व्यापक हो गए लेकिन डेटा इंटरफेस के रूप में एपीआई के विचार ने जोर पकड़ लिया। क्योंकि वेब एपीआई का व्यापक रूप से सभी प्रकार के ऑनलाइन डेटा के आदान-प्रदान के लिए उपयोग किया जाता है, एपीआई एक व्यापक शब्द बन गया है जो इंटरनेट पर अधिकांश संचार का वर्णन करता है।[12] जब इस तरह से उपयोग किया जाता है, तो एपीआई शब्द का अर्थ संचार प्रोटोकॉल शब्द के साथ अधिव्याप्त होता है।
उपयोग
लाइब्रेरी और रूपरेखा
सॉफ्टवेयर लाइब्रेरी का इंटरफ़ेस एक प्रकार का एपीआई है। एपीआई "अपेक्षित व्यवहार" (एक विनिर्देश) का वर्णन करता और निर्धारित करता है, जबकि लाइब्रेरी नियमों के इस सेट का "वास्तविक कार्यान्वयन" है।
एक ही प्रोग्रामिंग इंटरफेस को साझा करने वाली विभिन्न लाइब्रेरी के रूप में एक एकल एपीआई में कई कार्यान्वयन (या कोई नहीं, निराकार होने) हो सकते हैं।
एपीआई को इसके कार्यान्वयन से अलग करने से एक भाषा में लिखे गए प्रोग्राम को दूसरी भाषा में लिखी गई लाइब्रेरी का उपयोग करने की अनुमति मिल सकती है। उदाहरण के लिए, क्योंकि स्काला और जावा संगत बाइटकोड को संकलित करते हैं, स्काला डेवलपर्स किसी भी जावा एपीआई का लाभ उठा सकते हैं।[15]
एपीआई का उपयोग सम्मिलित प्रोग्रामिंग भाषा के प्रकार के आधार पर भिन्न हो सकता है। लुआ जैसी प्रक्रियात्मक भाषा के लिए एक एपीआई में मुख्य रूप से कोड को निष्पादित करने, डेटा में हेरफेर करने या त्रुटियों को संभालने के लिए बुनियादी दिनचर्या सम्मिलित हो सकती हैं, जबकि ऑब्जेक्ट-ओरिएंटेड भाषा के लिए एक एपीआई, जैसे कि जावा, कक्षाओं और इसकी कक्षा विधियों का एक विनिर्देश प्रदान करेगा।[16][17] हिरुम का नियम[18] कहता है कि "एपीआई के उपयोगकर्ताओं की पर्याप्त संख्या के साथ इससे कोई फर्क नहीं पड़ता कि आप अनुबंध में क्या वादा करते हैं- आपकी प्रणाली के सभी अवलोकन योग्य व्यवहार किसी के द्वारा निर्भर होंगे।" इस बीच, कई अध्ययनों से पता चलता है कि एपीआई का उपयोग करने वाले अधिकांश एप्लिकेशन एपीआई के एक छोटे से हिस्से का उपयोग करते हैं।[19] एपीआई का उपयोग वास्तव में उपयोगकर्ताओं की संख्या के साथ-साथ एपीआई की लोकप्रियता पर निर्भर करता है।[20]
भाषा बंधन (लैंग्वेज बाइंडिंग) भी एपीआई हैं। भाषा की विशेषताओं और क्षमताओं को दूसरी भाषा में कार्यान्वित इंटरफ़ेस से मैप करके, भाषा बंधन एक भाषा में लिखी गई लाइब्रेरी या सेवा को दूसरी भाषा में विकसित करते समय उपयोग करने की अनुमति देता है।[21]
एसडब्ल्यूआईजी (SWIG) और एफ2पीवाई (F2PY) और जैसे फोरट्रान-से-पायथन इंटरफेस जनित्र ऐसे इंटरफेस के निर्माण की सुविधा प्रदान करते हैं।[22]
एक एपीआई एक सॉफ्टवेयर रूपरेखा से भी संबंधित हो सकता है- एक रूपरेखा कई लाइब्रेरी पर आधारित हो सकता है जो कई एपीआई को लागू करता है, लेकिन एक एपीआई के सामान्य उपयोग के विपरीत, रूपरेखा में निर्मित व्यवहार तक पहुंच की मध्यस्थता इसकी सामग्री को रूपरेखा में लगाए गए नए वर्गों के साथ विस्तारित करके की जाती है।
इसके अलावा, नियंत्रण का समग्र प्रोग्राम प्रवाह कॉल करने वाले के नियंत्रण से बाहर और नियंत्रण के व्युत्क्रम या इसी तरह के तंत्र द्वारा रूपरेखा के हाथों में हो सकता है।[23][24]
ऑपरेटिंग सिस्टम
एक एपीआई एप्लिकेशन और ऑपरेटिंग सिस्टम के बीच इंटरफेस को निर्दिष्ट कर सकता है।[25] पीओएसआईएक्स (POSIX), उदाहरण के लिए, सामान्य एपीआई विनिर्देशों का एक सेट प्रदान करता है जिसका उद्देश्य पीओएसआईएक्स (POSIX) अनुरूप ऑपरेटिंग सिस्टम के लिए लिखे गए एप्लिकेशन को अन्य पीओएसआईएक्स (POSIX) अनुरूप ऑपरेटिंग सिस्टम के लिए संकलित करने में सक्षम बनाना है।
लिनक्स और बर्कले सॉफ्टवेयर वितरण ऑपरेटिंग सिस्टम के उदाहरण हैं जो पीओएसआईएक्स (POSIX) एपीआई को लागू करते हैं।[26]
माइक्रोसॉफ्ट ने विशेष रूप से अपने विंडोज एपीआई (Win32) लाइब्रेरी के भीतर एक पिछड़े-संगत एपीआई के लिए एक मजबूत प्रतिबद्धता दिखाई है, इसलिए पुराने एप्लिकेशन "संगतता मोड" नामक निष्पादन योग्य-विशिष्ट सेटिंग का उपयोग करके विंडोज के नए संस्करणों पर चल सकते हैं।[27]
एपीआई एक एप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) से अलग है जिसमें एपीआई स्रोत कोड आधारित है जबकि एबीआई बाइनरी आधारित है। उदाहरण के लिए, पीओएसआईएक्स (POSIX) एपीआई प्रदान करता है जबकि लिनक्स मानक आधार एबीआई प्रदान करता है।[28][29]
रिमोट एपीआई
रिमोट एपीआई डेवलपर्स को प्रोटोकॉल के माध्यम से रिमोट संसाधनों में हेरफेर करने की अनुमति देते हैं, संचार के लिए विशिष्ट मानक जो भाषा या प्लेटफॉर्म की परवाह किए बिना विभिन्न तकनीकों को एक साथ काम करने की अनुमति देते हैं। उदाहरण के लिए, जावा डाटाबेस सम्बन्ध एपीआई डेवलपर्स को कार्यों के एक ही सेट के साथ कई अलग-अलग प्रकार के डेटाबेस को जांच करने की अनुमति देता है, जबकि जावा रिमोट विधि आह्वान एपीआई जावा रिमोट विधि प्रोटोकॉल का उपयोग करता है जो रिमोट रूप से संचालित होने वाले कार्यों के आह्वान की अनुमति देता है। लेकिन डेवलपर को स्थानीय दिखाई देते हैं।[30][31]
इसलिए, रिमोट एपीआई ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में ऑब्जेक्ट को निराकार बनाए रखने में उपयोगी होते हैं प्रतिनिधि संबंधी ऑब्जेक्ट पर स्थानीय रूप से निष्पादित एक विधि कॉल, रिमोटिंग प्रोटोकॉल का उपयोग करके रिमोट ऑब्जेक्ट पर संबंधित विधि को आमंत्रित करता है, और परिणाम को स्थानीय रूप से वापसी मान के रूप में उपयोग करने के लिए प्राप्त करता है।
प्रतिनिधि संबंधी ऑब्जेक्ट के एक संशोधन के परिणामस्वरूप रिमोट ऑब्जेक्ट का एक संगत संशोधन भी होगा।[32]
वेब एपीआई
वेब एपीआई हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (एचटीटीपी) का उपयोग कर क्लाइंट डिवाइस (मोबाइल फोन, लैपटॉप इत्यादि) से वेब सर्वर तक पहुंचने वाली सेवा है। क्लाइंट डिवाइस एचटीटीपी (HTTP) अनुरोध के रूप में भेजते हैं, और प्रायः जावास्क्रिप्ट ऑब्जेक्ट नोटेशन (JSON) या एक्स्टेंसिबल मार्कअप लैंग्वेज (XML) प्रारूप में प्रतिक्रिया संदेश के साथ मिलती हैं। डेवलपर्स प्रायः वेब एपीआई का उपयोग उस सर्वर से डेटा के एक विशिष्ट सेट के लिए सर्वर जांच करने के लिए करते हैं।
उदाहरण एक शिपिंग कंपनी एपीआई हो सकती है जिसे शिपिंग सेवाओं को ऑर्डर करने की सुविधा के लिए ईकामर्स-केंद्रित वेबसाइट में जोड़ा जा सकता है और साइट डेवलपर को वेब डेटाबेस में शिपर की दर तालिका में प्रवेश किए बिना स्वचालित रूप से वर्तमान शिपिंग दरों को सम्मिलित किया जा सकता है। जबकि "वेब एपीआई" ऐतिहासिक रूप से वेब सेवा का वस्तुतः पर्याय रहा है, हाल की प्रवृत्ति (तथाकथित वेब 2.0) सिंपल ऑब्जेक्ट एक्सेस प्रोटोकॉल (SOAP) आधारित वेब सेवाओं और सेवा-उन्मुख आर्किटेक्चर (SOA) से अधिक प्रत्यक्ष प्रतिनिधित्वात्मक स्थिति स्थानांतरण (REST), शैली वेब संसाधन और संसाधन-उन्मुख आर्किटेक्चर (ROA) की ओर बढ़ रही है।[33] इस प्रवृत्ति का एक हिस्सा सिमेंटिक वेब गतिविधि से संसाधन विवरण रूपरेखा (RDF) से संबंधित है, जो वेब-आधारित ऑन्टोलॉजी इंजीनियरिंग तकनीकों को बढ़ावा देने के लिए एक अवधारणा है। वेब एपीआई मैशअप के रूप में ज्ञात नए अनुप्रयोगों में कई एपीआई के संयोजन की अनुमति देता है।[34]
सोशल मीडिया स्पेस में, वेब एपीआई ने वेब समुदायों को समुदायों और एप्लिकेशन के बीच सामग्री और डेटा साझा करने की सुविधा प्रदान करने की अनुमति दी है। इस प्रकार, एक स्थान पर गतिशील रूप से बनाई गई सामग्री को वेब पर कई स्थानों पर पोस्ट और अपडेट किया जा सकता है।[35] उदाहरण के लिए, ट्विटर का रेस्ट एपीआई डेवलपर्स को कोर ट्विटर डेटा तक पहुंचने की अनुमति देता है और सर्च एपीआई डेवलपर्स को ट्विटर सर्च और ट्रेंड डेटा के साथ बातचीत करने के तरीके प्रदान करता है।[36]
डिजाइन
एपीआई के डिजाइन का इसके उपयोग पर महत्वपूर्ण प्रभाव पड़ता है।[4] सबसे पहले, प्रोग्रामिंग इंटरफेस का डिजाइन सॉफ्टवेयर आर्किटेक्चर के एक महत्वपूर्ण हिस्से का प्रतिनिधित्व करता है, जो सॉफ्टवेयर के एक जटिल टुकड़े का संगठन है।[37] सूचना छिपाने का सिद्धांत मॉड्यूल के कार्यान्वयन विवरण को छिपाकर मॉड्यूलर प्रोग्रामिंग को सक्षम करने के रूप में प्रोग्रामिंग इंटरफेस की भूमिका का वर्णन करता है ताकि मॉड्यूल के उपयोगकर्ताओं को मॉड्यूल के अंदर की जटिलताओं को समझने की आवश्यकता न हो।[38] पिछले अंतर्निहित सिद्धांत के अलावा, एपीआई की उपयोगिता को मापने के लिए अन्य मेट्रिक्स में कार्यात्मक दक्षता, समग्र शुद्धता और नौसिखियों के लिए सीखने की क्षमता जैसे गुण सम्मिलित हो सकते हैं।[39] एपीआई डिजाइन करने का एक सीधा और प्रायः अपनाया जाने वाला तरीका नीलसन के अनुमानी मूल्यांकन दिशानिर्देशों का पालन करना है। फ़ैक्टरी विधि पैटर्न भी उनके पुन: प्रयोज्य प्रकृति के कारण एपीआई को डिजाइन करने में विशिष्ट है।[40] इस प्रकार, एक एपीआई का डिज़ाइन केवल उन उपकरणों को प्रदान करने का प्रयास करता है जिनकी उपयोगकर्ता अपेक्षा करता है।[4]
तुल्यकालिक बनाम अतुल्यकालिक
एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस तुल्यकालिक या अतुल्यकालिक हो सकता है। तुल्यकालिक एपीआई कॉल एक डिज़ाइन पैटर्न है जहां कॉल साइट को कॉल किए गए कोड के समाप्त होने की प्रतीक्षा करते समय अवरुद्ध कर दिया जाता है।[41] अतुल्यकालिक एपीआई कॉल के साथ, हालांकि, कॉल साइट को कॉल किए गए कोड के समाप्त होने की प्रतीक्षा करते समय अवरुद्ध नहीं किया जाता है, और उत्तर आने पर कॉलिंग थ्रेड को अधिसूचित किया जाता है।
सुरक्षा
पब्लिक फेसिंग एपीआई विकसित करते समय एपीआई सुरक्षा बहुत महत्वपूर्ण होती है। सामान्य खतरों में एसक्यूएल (SQL) इंजेक्शन, डेनियल-ऑफ़-सर्विस अटैक (DoS), टूटा प्रमाणीकरण, और संवेदनशील डेटा को प्रकट करना सम्मिलित है।[42] उचित सुरक्षा अभ्यासों को सुनिश्चित किए बिना खराब अभिनेता उस जानकारी तक पहुंच प्राप्त कर सकते हैं जो उनके पास नहीं होनी चाहिए या यहां तक कि आपके सर्वर में बदलाव करने के लिए विशेषाधिकार भी प्राप्त कर सकते हैं। कुछ सामान्य सुरक्षा अभ्यासों में एचटीटीपीएस (HTTPS) का उपयोग करके उचित संपर्क सुरक्षा, डेटा इंजेक्शन हमलों को कम करने के लिए सामग्री सुरक्षा, और आपकी सेवा का उपयोग करने के लिए एपीआई कुंजी की आवश्यकता सम्मिलित है।[43] कई पब्लिक एपीआई सेवाओं के लिए आपको निर्दिष्ट एपीआई कुंजी का उपयोग करने की आवश्यकता होती है, और आपके अनुरोध के साथ कुंजी भेजे बिना डेटा की सेवा करने से मना कर दिया जाएगा।[44]
जारी नीतियां
एपीआई अधिक सामान्य तरीकों में से एक है जिसे प्रौद्योगिकी कंपनियां एकीकृत करती हैं। जो एपीआई प्रदान और उपयोग करते हैं उन्हें एक व्यापार पारिस्थितिकी तंत्र के सदस्य के रूप में माना जाता है।[45]
एपीआई जारी करने की मुख्य नीतियां हैं।[46]
- निजी- एपीआई आंतरिक कंपनी के उपयोग के लिए ही है।
- भागीदार- केवल विशिष्ट व्यावसायिक भागीदार ही एपीआई का उपयोग कर सकते हैं। उदाहरण के लिए, किराए पर लेने वाली कंपनियां जैसे ऊबर और लिफ़्ट (Lyft), स्वीकृत तृतीय-पक्ष डेवलपर्स को उनके ऐप के भीतर से सीधे सवारी का आदेश देने की अनुमति देती हैं। यह कंपनियों को गुणवत्ता नियंत्रण करने की अनुमति देता है कि किस ऐप्स की एपीआई तक पहुंच है और उन्हें एक अतिरिक्त राजस्व धारा प्रदान करता है।[47]
- सार्वजनिक- एपीआई जनता द्वारा उपयोग के लिए उपलब्ध है। उदाहरण के लिए, माइक्रोसॉफ्ट विंडोज एपीआई को सार्वजनिक करता है, और एप्प्ल अपना एपीआई कोको जारी करता है ताकि सॉफ़्टवेयर को उनके प्लेटफ़ॉर्म के लिए लिखा जा सके। सभी सार्वजनिक एपीआई प्रायः सभी के लिए उपलब्ध नहीं होते हैं। उदाहरण के लिए, क्लाउडफ्लेयर या वोक्सिलिटी जैसे इंटरनेट सेवा प्रदाता, ग्राहकों और पुनर्विक्रेताओं को उनकी बुनियादी सुविधाओं की जानकारी, डीडॉस (DDoS) आँकड़े, नेटवर्क प्रदर्शन, या डैशबोर्ड नियंत्रणों तक पहुँचने की अनुमति देने के लिए रेस्टफुल (RESTful) एपीआई का उपयोग करते हैं।[48] ऐसे एपीआई तक पहुंच या तो "एपीआई टोकन", या ग्राहक स्थिति सत्यापन द्वारा प्रदान की जाती है।[49]
पब्लिक एपीआई निहितार्थ
एक महत्वपूर्ण कारक जब एक एपीआई सार्वजनिक हो जाता है तो इसकी "इंटरफ़ेस स्थिरता" होती है। एपीआई में परिवर्तन - उदाहरण के लिए एक फ़ंक्शन कॉल में नए पैरामीटर जोड़ने से - उस एपीआई पर निर्भर क्लाइंट के साथ संगतता टूट सकती है।[50]
जब सार्वजनिक रूप से प्रस्तुत एपीआई के भाग परिवर्तन के अधीन होते हैं और इस प्रकार स्थिर नहीं होते हैं, तो किसी विशेष एपीआई के ऐसे भागों को स्पष्ट रूप से "अस्थिर" के रूप में प्रलेखित किया जाना चाहिए। उदाहरण के लिए, गूगल गुआवा लाइब्रेरी में, जिन भागों को अस्थिर माना जाता है, और जो जल्द ही बदल सकते हैं, उन्हें जावा एनोटेशन @Beta के साथ चिह्नित किया गया है।[51]
एक सार्वजनिक एपीआई कभी-कभी खुद के कुछ भागों को पदावनत या रद्द करने की घोषणा कर सकता है। प्रायः इसका मतलब यह है कि एपीआई के भाग को हटाए जाने या पिछड़े असंगत तरीके से संशोधित किए जाने के लिए एक उम्मीदवार माना जाना चाहिए। इसलिए, ये परिवर्तन डेवलपर्स को एपीआई के उन भागों से दूर जाने की अनुमति देते हैं जिन्हें हटा दिया जाएगा या भविष्य में समर्थित नहीं किया जाएगा।[52]
क्लाइंट कोड में नवीन या अवसरवादी उपयोग हो सकते हैं जो एपीआई डिजाइनरों द्वारा अभीष्ट नहीं थे। दूसरे शब्दों में, एक महत्वपूर्ण उपयोगकर्ता आधार वाली लाइब्रेरी के लिए, जब कोई तत्व सार्वजनिक एपीआई का हिस्सा बन जाता है, तो इसका उपयोग विविध तरीकों से किया जा सकता है।[53] 19 फरवरी, 2020 को, अकामाई ने अपनी वार्षिक "स्टेट ऑफ़ द इंटरनेट" रिपोर्ट प्रकाशित की, जिसमें दुनिया भर में वित्तीय सेवाओं पर सार्वजनिक एपीआई प्लेटफार्मों को लक्षित करने वाले साइबर अपराधियों की बढ़ती प्रवृत्ति को दर्शाया गया है। दिसंबर 2017 से नवंबर 2019 तक, अकामाई ने 85.42 बिलियन क्रेडेंशियल उल्लंघन के हमले देखे। लगभग 20%, या 16.55 बिलियन, एपीआई अंतिमबिंदुओं के रूप में परिभाषित होस्टनामों के विरुद्ध थे। इनमें से 473.5 मिलियन ने वित्तीय सेवा क्षेत्र के संगठनों को लक्षित किया है।[54]
प्रलेखन
एपीआई प्रलेखन उन सेवाओं का वर्णन करता है जो एक एपीआई प्रदान करता है और उन सेवाओं का उपयोग कैसे करना है, जिसका उद्देश्य व्यावहारिक उद्देश्यों के लिए एक क्लाइंट को जानने की आवश्यकता होगी।
एपीआई का उपयोग करके अनुप्रयोगों के विकास और रखरखाव के लिए प्रलेखन महत्वपूर्ण है।[55] एपीआई प्रलेखन परंपरागत रूप से प्रलेखन फाइलों में पाया जाता है, लेकिन सोशल मीडिया जैसे ब्लॉग, मंचों और प्रश्नोत्तर वेबसाइटों में भी पाया जा सकता है।[56]
परम्परागत प्रलेखन फ़ाइलें प्रायः एक प्रलेखन प्रणाली के माध्यम से प्रस्तुत की जाती हैं, जैसे कि जावाडॉक (Javadoc) या पायडॉक (Pydoc), जिसमें एक सुसंगत रूप और संरचना होती है। हालांकि, प्रलेखन में सम्मिलित सामग्री के प्रकार एपीआई से एपीआई में भिन्न होते हैं।[57]
स्पष्टता के हित में, एपीआई प्रलेखन में एपीआई में वर्गों और विधियों के विवरण के साथ-साथ "विशिष्ट उपयोग परिदृश्य, कोड स्निपेट्स, डिज़ाइन तर्कसंगतता, प्रदर्शन चर्चाएँ और अनुबंध" सम्मिलित हो सकते हैं, लेकिन स्वयं एपीआई सेवाओं के कार्यान्वयन विवरण को प्रायः छोड़ दिया जाता है।
एपीआई का उपयोग कैसे किया जा सकता है, इस पर प्रतिबंध और सीमाएं भी प्रलेखन द्वारा आवृत की गई हैं। उदाहरण के लिए, एक एपीआई फ़ंक्शन के लिए प्रलेखन यह नोट कर सकता है कि इसके पैरामीटर शून्य नहीं हो सकते हैं, या यह कि फ़ंक्शन स्वयं थ्रेड सुरक्षित नहीं है।[58] क्योंकि एपीआई प्रलेखन व्यापक होता है, इसलिए लेखकों के लिए प्रलेखन को अद्यतन (अपडेटेड) रखना एक चुनौती और उपयोगकर्ताओं के लिए इसे ध्यान से पढ़ने के लिए संभावित रूप से उत्पन्न करने वाले बग है।[50] आरईएसटी (REST) एपीआई के लिए संदर्भ लेख एक ओपेन एपीआई लेख से स्वचालित रूप से उत्पन्न हो सकते हैं, जो एक मशीन-पठनीय पाठ फ़ाइल है जो ओपेन एपीआई विशिष्टता में परिभाषित एक निर्धारित प्रारूप और वाक्य रचना (सिंटैक्स) का उपयोग करता है। ओपेन एपीआई लेख बुनियादी जानकारी को परिभाषित करता है जैसे कि एपीआई का नाम और विवरण, साथ ही उन कार्यों का वर्णन करता है जिन तक एपीआई पहुँच प्रदान करता है।[59]
एपीआई प्रलेखन को जावा एनोटेशन जैसी मेटाडेटा जानकारी से समृद्ध किया जा सकता है। इस मेटाडेटा का उपयोग संकलक, टूल्स और रन-टाइम परिवेश द्वारा कस्टम व्यवहार या कस्टम हैंडलिंग को लागू करने के लिए किया जा सकता है।[60]
डेटा-संचालित तरीके से एपीआई प्रलेखन उत्पन्न करना संभव है। किसी दिए गए एपीआई का उपयोग करने वाले कई प्रोग्रामों को देखकर, विशिष्ट उपयोगों के साथ-साथ आवश्यक अनुबंधों और निर्देशों का अनुमान लगाना संभव है।[61] फिर, खनन किए गए डेटा से प्राकृतिक भाषा उत्पन्न करने के लिए टेम्प्लेट का उपयोग किया जा सकता है।
एपीआई के लिए कॉपीराइट सुरक्षा पर विवाद
2010 में, ओरेकल कॉर्पोरेशन ने एंड्रॉयड ऑपरेटिंग सिस्टम में अंतर्निहित किए गए जावा के एक नए कार्यान्वयन को वितरित करने के लिए गूगल पर मुकदमा दायर किया।[62] गूगल ने जावा एपीआई को पुन: उत्पन्न करने के लिए कोई अनुमति प्राप्त नहीं की थी, हालाँकि समान ओपेन जेडीके (OpenJDK) प्रोजेक्ट को अनुमति दी गई थी। गूगल ने अपने एपीआई के लिए एक लाइसेंस के लिए बातचीत करने के लिए ओरेकल से संपर्क किया था, लेकिन भरोसे के मुद्दों के कारण इसे ठुकरा दिया गया था। असहमति के बावजूद, गूगल ने ओरेकल के कोड का उपयोग करना चुना। न्यायाधीश विलियम अलसुप ने ओरेकल बनाम गूगल मामले में फैसला सुनाया कि एपीआई को अमेरिका में कॉपीराइट नहीं किया जा सकता है और ओरेकल की जीत से "प्रतीकों के कार्यात्मक सेट" के लिए व्यापक रूप से कॉपीराइट सुरक्षा का विस्तार होगा और सरल सॉफ़्टवेयर कमांड के कॉपीराइट की अनुमति होगी।
ओरेकल के दावे को स्वीकार करने के लिए किसी को भी कमांड की एक प्रणाली को चलाने के लिए कोड के एक संस्करण को कॉपीराइट करने की अनुमति देना होगा और इस तरह अन्य सभी को इसके अलग-अलग संस्करणों को लिखने से रोकना होगा ताकि सभी या एक ही कमांड को पूरा किया जा सके।