Cato एपीआई के लिए एक पायथन स्क्रिप्ट की व्याख्या

यह लेख Cato एपीआई का परिचय कराता है और एक नमूना पायथन एप्लिकेशन का विश्लेषण करता है।

परिचय

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

ध्यान दें

ध्यान दें:

यह उम्मीद की जाती है कि पाठक निम्नलिखित की मूल समझ रखता है:

  • स्क्रिप्टिंग या प्रोग्रामिंग (उदाहरण के लिए, आप वेरिएबल्स और कोड लाइब्रेरी जैसी अवधारणाओं से परिचित हैं)

  • JSON विशिष्टता (उदाहरण के लिए, आपने JSON दस्तावेजों के साथ काम किया है)

  • नेटवर्किंग (उदाहरण के लिए, आप HTTP प्रो토कोल के अस्तित्व और सर्वर क्या होता है, जानते हैं)

पायथन भाषा का कुछ अनुभव लाभकारी हो सकता है, लेकिन इसके बिना भी लेख को समझना संभव होना चाहिए।

मूल Cato एपीआई एप्लिकेशन का वॉकथ्रू

यहां प्रस्तुत एप्लिकेशन पायथन में लिखा गया है और खाते के लिए परिभाषित कुल प्रशासकों को पुनः प्राप्त करने के लिए Cato एपीआई admins कॉल का उपयोग करता है।  पायथन और admins एपीआई कॉल को चुना गया है क्योंकि:

  • पायथन एक बहुत ही सामान्य भाषा है जो पढ़ने और समझने में सरल है

  • admins एपीआई कॉल का उपयोग Cato GraphQL एपीआई को कॉल करने के एक बहुत साधारण उदाहरण को बनाने के लिए किया जा सकता है

नमूना कार्यक्रम मूल है और इसमें कोई त्रुटि जांच शामिल नहीं है।  कार्यक्रम खाते के लिए परिभाषित प्रशासकों की कुल संख्या को प्रिंट करने से अधिक कुछ नहीं करता है। 

ध्यान दें

ध्यान दें: Cato एपीआई किसी भी विशिष्ट प्रोग्रामिंग भाषा से बंधा नहीं है।  किसी भी भाषा का उपयोग करके एप्लिकेशन को लागू करना संभव है जो HTTP POST फ़ंक्शन का उपयोग कर सकता है और JSON दस्तावेज़ों को प्रोसेस कर सकता है।  

नमूना प्रोग्राम का अवलोकन

यह नमूना कार्यक्रम छोटा है और इसमें निर्णय लेने के किसी भी लॉजिक या क्रियाओं को दोहराने के कोड को शामिल नहीं करता है।  कुछ कोड की लाइनों को एक लाइन में मिलाकर इसे और भी छोटा रखा जा सकता था।  कोड की अतिरिक्त लाइनों को शामिल किया गया है ताकि समझाना आसान हो सके कि क्या चल रहा है।

# Python लाइब्रेरी कोड आयात करें
import os
import urllib.request
import ssl
import json

# वातावरण चर से Cato एपीआई कुंजी प्राप्त करें
cato_api_key = os.getenv("CATO_API_KEY")

# भेजे जाने वाले GraphQL अनुरोध बनाएँ
get_total_admins = '''{
    admins (accountID: 12345) {
        total        
    }
}'''
graphql_query = {'query': get_total_admins}

# HTTP अनुरोध बनाएं
cato_api_url = "https://api.catonetworks.com/api/v1/graphql2"
headers = {'x-api-key': cato_api_key,
           'Content-Type':'application/json'}
unverified_ctx = ssl._create_unverified_context()
json_post = json.dumps(graphql_query)
json_post_encoded = json_post.encode()
request = urllib.request.Request(url=cato_api_url, data=json_post_encoded, headers=headers)

# क्वेरी भेजें और प्रतिक्रिया को पाय?स?क्ट?शन पूकर अर्धवाली पूरत्वौ विद बनने वाली-पायथन डिक्शनरी में परिवर्तित करें
response = urllib.request.urlopen(request, context=unverified_ctx, timeout=30)
json_response_encoded = response.read()
json_response = json_response_encoded.decode()
get_admins_total_result = json.loads(json_response)

# लौटाए गए डेटा से कुल निकालें और इसे प्रिंट करें
total = get_admins_total_result['data']['admins']['total']
print('आपके खाते के साथ परिभाषित प्रशासकों की कुल संख्या है: {}'.format(total))

ध्यान दें

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

सभी प्रश्न या फीडबैक api@catonetworks.com पर भेजे जाने चाहिए

नीचे दिया गया आरेख यह दिखाता है कि जब कार्यक्रम चलाया जाता है तो कौन-कौन से घटनाएँ होती हैं:

  1. कार्यक्रम एक JSON दस्तावेज़ बनाता है जो Cato एपीआई GraphQL सर्वर को भेजा जाता है।

  2. Cato एपीआई GraphQL सर्वर यह सुनिश्चित करता है कि JSON दस्तावेज़ में परिभाषित एपीआई कॉल सही है और Cato सेवा से अनुरोधित डेटा प्राप्त करता है।

  3. Cato एपीआई GraphQL सर्वर डेटा को JSON फ़ाइल में कार्यक्रम को वापस करता है।

Cato_API_FLow.jpeg

पायथन लाइब्रेरी कोड आयात करना

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

import os
  • os लाइब्रेरी एक फ़ंक्शन प्रदान करती है जो कोड को ऑपरेटिंग सिस्टम के परिवेश चर में निहित डेटा तक पहुँचा सकता है।

import urllib.request
  • urllib लाइब्रेरी से request मॉड्यूल Request वर्ग को परिभाषित करता है जो वस्तुएँ बनाता है जो दूरस्थ सर्वरों के साथ संचार को संभाल सकते हैं जिन्हें एक URL के माध्यम से एक्सेस किया जाता है।

  • यह Cato एपीआई अनुरोध को Cato GraphQL एपीआई सर्वर को भेजना संभव बनाएगा

import ssl
  • ssl लाइब्रेरी अनुरोधों को Cato GraphQL एपीआई सर्वर को भेजने के लिए एक अनुकूलित अप्रशिक्षित संदर्भ बनाने के लिए आवश्यक है।

import json
  • यह लाइब्रेरी उन कार्यों को समाहित करती है जो पायथन डिक्शनरी को JSON स्ट्रिंग में और इसके विपरीत परिवर्तित करना संभव बनाती हैं।

  • दोनों प्रारूपों के बीच रूपांतर करने की यह क्षमता JSON दस्तावेजों के साथ काम करने के लिए कोड लिखना बहुत आसान बनाती है।

Cato API Key प्राप्त करना

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

cato_api_key = os.getenv("CATO_API_KEY")

Cato GraphQL सर्वर को अपेक्षा है कि यह कुंजी HTTP हैडर में प्राप्त हो।  कुंजी JSON दस्तावेज़ में प्रदान नहीं की जाती है क्योंकि GraphQL विशिष्टता मानकीकरण के हिस्से के रूप में प्रमाणीकरण शामिल नहीं करती है।  JSON दस्तावेज़ में प्रमाणीकरण को शामिल करना विशिष्टता का उल्लंघन होगा।  Cato एपीआई कुंजी Cato प्रबंधन एप्लिकेशन के माध्यम से उत्पन्न होती है।  एपीआई कुंजी बनाने के बारे में अधिक जानकारी के लिए, देखें Generating API Keys for the Cato API

ध्यान दें

चेतावनी! हालांकि यह Cato API कुंजी को अपने कोड में हार्ड-कोड करना संभव है, यह दृढ़ता से अनुशंसा की जाती है कि ऐसा न किया जाए।

GraphQL अनुरोध को भेजा जाए बनाना

कोड की अगली पंक्तियाँ एक पायथन निर्देशिका बनाती हैं जिसमें एक कुंजी/मूल्य युग्म निहित होता है।  प्रविष्टि का मूल्य एक पायथन मल्टी-लाइन स्ट्रिंग का उपयोग करके बनाया गया है जो क्वेरी को परिभाषित करता है जिसे GraphQL सर्वर को भेजा जाएगा।

get_total_admins = '''{
    admins (accountID: 12345) {
        total    
    }
}'''
graphql_query = {'query': get_total_admins}

Cato GraphQL सर्वर इस स्ट्रिंग का अर्थ यह समझेगा: get_total_admins फ़ंक्शन को निष्पादित करें, इसमें दो तर्क पास करें (accountID और प्रकार) और केवल "कुल" संस्थाओं की संख्या लौटाएं।  या सीधे तौर पर कहें, "उदाहरण खाते संख्या 12345 के लिए परिभाषित प्रशासकों की संस्थाओं की कुल संख्या लौटाएं"।  admins एपीआई कॉल का यह विशिष्ट उदाहरण GraphQL एपीआई के एक महत्वपूर्ण लाभ को दर्शाता है

  • सर्वर केवल वही डेटा लौटाता है जो एप्लिकेशन ने अनुरोध किया था

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

HTTP अनुरोध बनाना

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

cato_api_url = "https://api.catonetworks.com/api/v1/graphql2"

ध्यान दें

ध्यान दें: GraphQL एपीआई केवल एक URL का उपयोग सभी एपीआई कॉल के लिए करता है।  कॉल का विवरण जैसे तर्क JSON दस्तावेज़ में प्रदान किए जाते हैं।  यह REST एपीआई के विपरीत है जो प्रत्येक एपीआई कॉल के लिए एक अलग URL का उपयोग करेगा और तर्कों को URL से जोड़कर कॉल करेगा।  यह एकमात्र URL का उपयोग करता है जिसमें तर्कों के साथ बिना घूमे है, इसे GraphQL एपीआई के एक अन्य लाभ के रूप में माना जाता है। 

अगला एक निर्देशिका बनाई जाती है जो दो HTTP हैडर को परिभाषित करती है।  ये हैडर अनुरोध वस्तु द्वारा एक HTTP POST अनुरोध को बनाने के लिए उपयोग किए जाते हैं जिसे GraphQL सर्वर स्वीकार करेगा।  इन हैडरों के बिना HTTP POST अनुरोधों को सर्वर द्वारा अस्वीकार कर दिया जाएगा।

headers = {'x-api-key': cato_api_key,           
           'Content-Type':'application/json'}

कोड की अगली पंक्ति एक SSL संदर्भ वस्तु बनाती है। पायथन इस वस्तु का उपयोग करता है यह निर्धारित करने के लिए कि उसे HTTP अनुरोधों को कैसे एन्क्रिप्ट करना चाहिए और उन्हें ट्रांसपोर्ट लेवल सुरक्षा (TLS) का उपयोग करके भेजना चाहिए। यहां हम SSL संदर्भ वस्तु बना रहे हैं जो प्रमाण पत्रों को मान्यता नहीं देती है। यह अपस्ट्रीम TLS निरीक्षण के अधीन नेटवर्क में प्रमाणपत्र त्रुटियों से बचने के लिए किया गया है।

unverified_ctx = ssl._create_unverified_context()

ध्यान दें

महत्वपूर्ण! एक अप्रशिक्षित SSL संदर्भ वस्तु का उपयोग करने का अर्थ है कि यह सुनिश्चित करने के लिए कोई चेक नहीं होंगे कि प्रमाण पत्र वैध हैं। Cato Networks अनुशंसा करता है कि आप इस तरह के दृष्टिकोण का कभी उत्पादन में उपयोग न करें। सुरक्षा को मजबूत करने का विवरण इस दस्तावेज़ के दायरे से बाहर है।

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

json_post = json.dumps(graphql_query)
json_post_encoded = json_post.encode()

अंत में, अनुरोध वस्तु बनाई गई है और प्रोग्राम अब सर्वर को get_total_admins कॉल करने के लिए तैयार है।

request = urllib.request.Request(url=cato_api_url, data=json_post_encoded, headers=headers)

प्रश्न भेजना और प्रतिक्रिया को प्रोसेस करना

यहां कार्यक्रम urllib लाइब्रेरी के urlopen फ़ंक्शन को कॉल करके GraphQL सर्वर को अनुरोध भेजता है।  इस फ़ंक्शन को कॉल करना एक HTTPResponse वस्तु की वापसी के परिणामस्वरूप होगा।  

response = urllib.request.urlopen(request, context=unverified_ctx, timeout=30)

ध्यान दें

चेतावनी! urlopen फ़ंक्शन को कॉल करना त्रुटि उत्पन्न कर सकता है।  उदाहरण के लिए, GraphQL सर्वर अनुरोध का अस्वीकार कर सकता है क्योंकि यह एक सिंटैक्स त्रुटि है या नेटवर्क समस्या समयबद्धता में परिणाम कर सकती है (अर्थात 30 सेकंड के बाद कोई प्रतिक्रिया नहीं)।  ये त्रुटियाँ यहाँ संचालित नहीं हैं।

urlopen फ़ंक्शन द्वारा लौटाई गई वस्तु में एक बॉडी फ़ील्ड शामिल है जिसमें सर्वर द्वारा लौटाई गई JSON दस्तावेज़ निहित है।  इसे वस्तु के read विधि को निष्पादित करके निकाला जा सकता है जो बाइट्स वस्तु लौटाती है।  यह बाइट्स वस्तु फिर बाइट्स वस्तु की डीकोड विधि को कॉल करके स्ट्रिंग वस्तु में परिवर्तित की जाती है।

json_response_encoded = response.read()
json_response = json_response_encoded.decode()

यह डीकोडेड स्ट्रिंग एक JSON दस्तावेज़ निहित करती है जो इस तरह दिखेगी:

{    
    "data" : {
         "admins" : {
              "total": 4
         }
    }
}

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

कार्यक्रम के इस खंड की अंतिम पंक्ति json लाइब्रेरी फ़ंक्शन 'loads' का उपयोग लौटाए गए JSON स्ट्रिंग को एक पायथन नेस्टेड डिक्शनरी में परिवर्तित करने के लिए करती है।  

get_total_admin_result = json.loads(json_response)

लौटा हुआ डेटा से कुल निकालना और इसे प्रिंट करना

कोड की अंतिम दो पंक्तियाँ सर्वर द्वारा लौटाए गए total फ़ील्ड से मान को निकालती हैं और इसे कंसोल पर प्रिंट करती हैं। 

total = get_total_admins_result['data']['get_total_admins']['total']
print('आपके खाते के लिए परिभाषित प्रशासकों की कुल संख्या है: {}'.format(total)) 

आउटपुट इस प्रकार दिखेगा:

आपके खाते के लिए परिभाषित प्रशासकों की कुल संख्या है: 4

सारांश

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

  • Cato API कॉल बनाना और इसे एक JSON दस्तावेज़ में जोड़ना

  • Cato API कुंजी प्राप्त करना

  • HTTP हेडर्स बनाना जो Cato API कुंजी को समाहित करते हैं और भेजे जा रहे डेटा के डेटा प्रारूप (JSON) को परिभाषित करते हैं

  • HTTP POST कमांड का उपयोग करते हुए TLS के साथ एन्क्रिप्टेड Cato GraphQl API सर्वर को बाइट्स में कोडित JSON दस्तावेज़ भेजना

  • सर्वर द्वारा लौटाए गए प्रतिक्रिया ऑब्जेक्ट को JSON दस्तावेज़ में परिवर्तित करना

  • JSON दस्तावेज़ को एक ऐसे प्रारूप में परिवर्तित करना जिसका प्रोग्राम द्वारा उपयोग किया जा सके

क्या यह लेख उपयोगी था?

5 में से 5 के लिए उपयोगी रहा

0 टिप्पणियां