MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

EVE का उपयोग करके REST API का निर्माण

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

फ्लास्क एक पायथन वेब एप्लिकेशन फ्रेमवर्क है जो पायथन के शुरुआती लोगों के लिए इसके उपयोग में आसानी के कारण लोकप्रियता प्राप्त कर रहा है। इस ट्यूटोरियल में, हम EVE पर एक नज़र डालेंगे, फ्लास्क, MongoDB और Redis पर आधारित एक REST API बिल्डिंग फ्रेमवर्क। आधिकारिक दस्तावेज़ों से:

फ्लास्क, मोंगोडीबी, रेडिस और अच्छे इरादों द्वारा संचालित ईव आसानी से उच्च अनुकूलन योग्य, पूरी तरह से फीचर्ड रीस्टफुल वेब सेवा बनाने और तैनात करने की अनुमति देता है।

हम क्या बनाएंगे

इस ट्यूटोरियल में, हम देखेंगे कि ईव फ्रेमवर्क का उपयोग करके आरईएसटी एपीआई कैसे बनाया जाता है। इसके बाद, AngularJS का उपयोग करके हम एक साधारण ऐप के लिए फ्रंट एंड डिज़ाइन करेंगे और EVE का उपयोग करके बनाए गए REST API का उपभोग करके इसे कार्यात्मक बना देंगे। इस ट्यूटोरियल में, हम निम्नलिखित कार्यक्षमता को लागू करेंगे:

  • उपयोगकर्ता API बनाएं
  • उपयोगकर्ता API की पुष्टि करें
  • आइटम जोड़ें API
  • आइटम एपीआई हटाएं
  • आइटम एपीआई अपडेट करें

आरंभ करना

इंस्टॉलेशन

हम ईवीई को स्थापित करने के लिए पाइप का उपयोग करेंगे।

pip install eve

हम MongoDB . का उपयोग करेंगे डेटाबेस के रूप में। अपने सिस्टम के अनुसार इंस्टालेशन के लिए आधिकारिक दस्तावेज़ देखें।

बुनियादी API बनाना

PythonAPI called नाम का प्रोजेक्ट फोल्डर बनाएं . PythonAPI पर नेविगेट करें और api.py . नाम की एक फाइल बनाएं . अंदर api.py आयात EVE और एक ईव ऑब्जेक्ट बनाएं।

from eve import Eve
app = Eve()

इसके बाद, appचलाएं जब प्रोग्राम को मुख्य प्रोग्राम के रूप में निष्पादित किया जाता है।

from eve import Eve
app = Eve()

if __name__ == '__main__':
    app.run()

अपना MongoDB चलाएं निम्न आदेश का उपयोग कर:

mongod --dbpath= <PATH-TO> /data/db/

जैसा कि आप देख सकते हैं, हमें डीबी फाइलों के लिए पथ निर्दिष्ट करने की आवश्यकता है। बस data/db बनाएं अपने फाइल सिस्टम में और उपरोक्त कमांड चलाएँ।

MongoDB . के उदाहरण के साथ चल रहा है, ईवीई को एपीआई संसाधनों के बारे में जानकारी के साथ एक कॉन्फ़िगरेशन फ़ाइल की आवश्यकता है। तो PythonAPI . में फ़ोल्डर settings.py नामक एक अन्य फ़ाइल बनाता है और निम्नलिखित कोड जोड़ें:

DOMAIN = {'user': {}}

उपरोक्त कोड EVE को सूचित करता है कि user . के लिए एक संसाधन उपलब्ध है।

सभी फ़ाइलें सहेजें और api.pyचलाएँ :

python api.py

दिखाए गए अनुसार एपीआई ऑनलाइन होना चाहिए:

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

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

उपयोगकर्ता API बनाएं और सत्यापित करें

उपयोगकर्ता API बनाएं

हम अपने एप्लिकेशन के लिए उपयोगकर्ता बनाने या पंजीकृत करने के लिए एक एपीआई बनाकर शुरू करेंगे। उपयोगकर्ता के पास कुछ निश्चित फ़ील्ड होंगे जैसे First Name , Last Name , Username , Password और Phone Number

तो सबसे पहले हमें उपयोगकर्ता के लिए एक स्कीमा परिभाषित करने की आवश्यकता होगी। स्कीमा प्रमुख क्षेत्रों के क्षेत्रों और डेटा प्रकारों को परिभाषित करता है। settings.pyखोलें और DOMAIN को संशोधित करें दिखाए गए अनुसार एक स्कीमा परिभाषित करके:

DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

जैसा कि आप उपरोक्त कोड में देख सकते हैं, हमने उन प्रमुख क्षेत्रों को परिभाषित किया है जो एक उपयोगकर्ता और उसके डेटा प्रकार को स्कीमा में परिभाषित करने के लिए आवश्यक हैं। परिवर्तन सहेजें और निष्पादित करें api.py . पोस्टमैन क्लाइंट से http://127.0.0.1/user पर आवश्यक पैरामीटर के साथ POST अनुरोध करने का प्रयास करें जैसा कि दिखाया गया है:

उपयोगकर्ता के लिए POST अनुरोध पर, इसने एक 405 Method Not Allowed . फेंक दी त्रुटि। डिफ़ॉल्ट रूप से EVE केवल GET अनुरोध स्वीकार करता है। यदि हम किसी अन्य विधि का उपयोग करना चाहते हैं तो हमें इसे स्पष्ट रूप से परिभाषित करने की आवश्यकता है। settings.pyखोलें और दिखाए गए अनुसार संसाधन विधियों को परिभाषित करें:

RESOURCE_METHODS = ['GET', 'POST']

परिवर्तन सहेजें और निष्पादित करें api.py . अब POST के लिए पुन:प्रयास करें उपयोगकर्ता के लिए और आपके पास नीचे दी गई प्रतिक्रिया होनी चाहिए:

जैसा कि आप देख सकते हैं कि उपरोक्त POST अनुरोध सफल रहा। हमने अपने settings.py . में डेटाबेस कॉन्फ़िगरेशन को परिभाषित नहीं किया है , इसलिए EVE ने MongoDB . के चल रहे उदाहरण का उपयोग करके अनुरोध पूरा किया . आइए MongoDB में लॉग इन करें खोल और नव निर्मित रिकॉर्ड देखें। MongoDB इंस्टेंस चलने के साथ, mongo शेल ट्रिगर करें:

mongo

एक बार mongo . के अंदर खोल, सभी उपलब्ध डेटाबेस को सूचीबद्ध करें।

show databases;

एक eve . होना चाहिए डेटाबेस। eve पर स्विच करें डेटाबेस।

use eve;

show निष्पादित करें eve . के अंदर तालिकाओं को सूचीबद्ध करने का आदेश डेटाबेस।

show tables;

सूचीबद्ध तालिकाओं में user . नामक एक तालिका होनी चाहिए . user . से रिकॉर्ड की सूची बनाएं निम्न आदेश का उपयोग कर तालिका:

db.user.find()

उपयोगकर्ता तालिकाओं से चयनित रिकॉर्ड यहां दिए गए हैं:

उपयोगकर्ता API की पुष्टि करें

आगे हम एक मौजूदा उपयोगकर्ता को मान्य करने के लिए एक एपीआई बनाएंगे। आम तौर पर, अगर हम get . करते हैं उपयोगकर्ता समापन बिंदु (http://127.0.0.1:5000/user) से अनुरोध करें, यह डेटाबेस से सभी पंजीकृत उपयोगकर्ताओं का विवरण देगा। हमें यहां दो चीजों को लागू करने की जरूरत है। पहले हमें पहले नाम और पासवर्ड का उपयोग करके उपयोगकर्ता को प्रमाणित करने की आवश्यकता है, और दूसरा हमें सफल प्रमाणीकरण पर डेटाबेस से उपयोगकर्ता विवरण वापस करने की आवश्यकता है।

प्रथम नाम के आधार पर विवरण प्राप्त करने के लिए, हमें DOMAIN में एक अतिरिक्त लुकअप फ़ील्ड जोड़ने की आवश्यकता है settings.py . में ।

'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

जैसा कि ऊपर दिए गए कोड में देखा गया है, हमने Username . के लिए एक लुक अप फ़ील्ड जोड़ा है . अब जब कोई GET अनुरोध http://127.0.0.1:5000/user/ पर भेजा जाता है <username> यह विशेष Username . के साथ उपयोगकर्ता का विवरण लौटाएगा . किसी विशिष्ट उपयोगकर्ता से अनुरोध करते समय, हम Username . भी भेजेंगे और Password प्रमाणीकरण के लिए।

हम उपयोगकर्ता नाम और पासवर्ड के आधार पर किसी विशेष उपयोगकर्ता को सत्यापित करने के लिए बुनियादी प्रमाणीकरण करेंगे। सबसे पहले, हमें Basic Auth . आयात करने की आवश्यकता है ईवीई से कक्षा। Authenticate . नाम की एक क्लास बनाएं दिखाए गए अनुसार प्रमाणीकरण लागू करने के लिए:

from eve.auth import BasicAuth

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
                   

अब, जब संसाधन user है और अनुरोध विधि है GET , हम उपयोगकर्ता को प्रमाणित करेंगे। सफल प्रमाणीकरण पर, एपीआई एंडपॉइंट में प्रथम नाम वाले उपयोगकर्ता का उपयोगकर्ता विवरण वापस कर दिया जाएगा। हम उपयोगकर्ता नाम और पासवर्ड प्रदान करके उपयोगकर्ता निर्माण को भी प्रतिबंधित करेंगे। इसलिए, यदि विधि POST है और API समापन बिंदु उपयोगकर्ता है, तो हम उपयोगकर्ता नाम और पासवर्ड की जांच और सत्यापन करेंगे। तो, यहाँ पूरा Authenticate है कक्षा:

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
        if resource == 'user' and method == 'GET':
            user = app.data.driver.db['user']
            user = user.find_one({'username': username,'password':password})
            if user:
                return True
            else:
                return False
        elif resource == 'user' and method == 'POST':
            return username == 'admin' and password == 'admin'
        else:
            return True

हमें Authenticate . पास करना होगा एपीआई शुरू करते समय कक्षा का नाम। इसलिए दिखाए गए अनुसार API आरंभ करने वाले कोड को संशोधित करें:

if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

सभी परिवर्तन सहेजें और api.py निष्पादित करें . पोस्टमैन से http://127.0.0.1/user/username पर उपयोगकर्ता नाम और पासवर्ड के साथ मूल प्रमाणीकरण अनुरोध भेजने का प्रयास करें (उपयोगकर्ता नाम को किसी अन्य मौजूदा उपयोगकर्ता नाम से बदलें)। सफल प्रमाणीकरण पर, आपको दिखाए गए अनुसार प्रतिक्रिया में उपयोगकर्ता विवरण प्राप्त करना चाहिए:

आइटम जोड़ें, हटाएं और अपडेट करें 

आइटम API जोड़ें

आइटम जोड़ें API बनाने के लिए, हमें केवल settings.py में आइटम के लिए एक नया स्कीमा बनाने की आवश्यकता है ।

'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

ऐड आइटम एपीआई प्रत्येक लॉग इन उपयोगकर्ता को एक आइटम जोड़ने में मदद करेगा। हम आइटम को दर्ज करने वाले उपयोगकर्ता के उपयोगकर्ता नाम के साथ आइटम को सहेजेंगे। परिवर्तनों को सहेजें और दिखाए गए अनुसार http://127.0.0.1/item पर POST अनुरोध करने का प्रयास करें:

आइटम API हटाएं

किसी उपयोगकर्ता द्वारा बनाए गए आइटम को हटाने के लिए, हमें केवल आइटम एंडपॉइंट को कॉल करना होगा /item_id . लेकिन केवल DELETE अनुरोध को कॉल करने से आइटम नहीं हटेगा। किसी आइटम को मिटाने के लिए, हमें एक _etag . भी देना होगा किसी विशेष वस्तु से संबंधित। एक बार item id और _etag मैच, आइटम डेटाबेस से हटा दिया गया है। यहां बताया गया है कि आइटम एंडपॉइंट में DELETE विधि को कैसे कहा जाता है।

आइटम API अपडेट करें

अपडेट एपीआई डिलीट एपीआई के समान है। हमें केवल item id . के साथ एक PATCH अनुरोध भेजना है और _etag और प्रपत्र फ़ील्ड जिन्हें अद्यतन करने की आवश्यकता है। यहां बताया गया है कि आइटम का विवरण कैसे अपडेट किया जाता है:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB असुरक्षा के स्तर और उनसे कैसे बचें

  2. MongoError:पहले कनेक्ट पर सर्वर से कनेक्ट करने में विफल

  3. DataImportHandler का उपयोग करके MongoDB और Solr को जोड़ने के चरण

  4. मोंगोडीबी कर्सर.गिनती ()

  5. MongoDB 3.0 जावा ड्राइवर के साथ परिणामों की गणना करें