flask api tutorial with example extending flask with apis
यह फ्लास्क एपीआई ट्यूटोरियल फ्लास्क ट्विटर ओम्बेडर, फ्लास्क एपीआई और फ्लास्क रेस्टफुल जैसे लोकप्रिय फ्लास्क एक्सटेंशन की व्याख्या करता है:
फ्लास्क ढांचे में काफी प्रचुर संख्या में एक्सटेंशन हैं। ये एक्सटेंशन काफी उपयोगी हैं और इन्हें विकसित किया जाना आसान है। हम जानते हैं कि फ्लास्क रूपरेखा बहुत पाइथोनिक है और इसमें एपीआई का न्यूनतम सेट है, और यह बहुत लचीला है, यही वजह है कि फ्लास्क समुदाय ने कई विशिष्ट कार्यों के लिए इतने सारे एक्सटेंशन बनाए हैं।
फ्लास्क ट्यूटोरियल श्रृंखला के एक भाग के रूप में, इस ट्यूटोरियल में कुछ फ्लास्क एक्सटेंशन का उदाहरण है। हम निम्नलिखित एक्सटेंशन पर चर्चा करेंगे।
- फ्लास्क ट्विटर Oembedder
- फ्लास्क एपीआई
- फ्लास्क रेस्टफुल
=> स्क्रैच से फ्लास्क जानने के लिए यहां जाएं
यद्यपि हमने अपने पिछले ट्यूटोरियल के एक हिस्से के रूप में कई एक्सटेंशनों पर चर्चा की है, यह ट्यूटोरियल फ्लास्क एक्सटेंशन के घटकों की जांच करने के परिप्रेक्ष्य के साथ अधिक व्याख्या करता है।
आप क्या सीखेंगे:
एक फ्लास्क एक्सटेंशन क्या है
एक फ्लास्क एक्सटेंशन एक इंस्टॉल करने योग्य पायथन मॉड्यूल या एक पैकेज है जो फ्लास्क एप्लिकेशन के लिए अतिरिक्त कार्यक्षमता लागू करता है। फ्लास्क विस्तार उतना ही सरल हो सकता है, जितना कि किसी बाहरी एपीआई जैसे कि वेब पेज पर ट्वीट को एम्बेड करने के लिए बाहरी एपीआई के उपभोग का समर्थन जोड़ा जाता है।
या, एक फ्लास्क एक्सटेंशन एक नया ढांचा हो सकता है जैसे कि फ्लास्क एपीआई या फ्लास्क-रेस्टफुल जो कि एक वास्तुशिल्प पैटर्न या एक विकास प्रतिमान का पालन करने वाले ऐप्स का निर्माण करते हैं।
फ्लास्क ट्विटर Oembedder
इस खंड में, हम एक मौजूदा ओपन-सोर्स सरल परियोजना का उदाहरण लेते हैं यहाँ
अपने स्थानीय मशीन में इस परियोजना को क्लोन करें और इसे नीचे बताए गए कमांड की मदद से पाइप का उपयोग करके स्थापित करें।
# in an activated virtual environment pip install -e flask_twitter_oembedder/
यह एक्सटेंशन एक ट्वीट को जिन्जा 2 टेम्पलेट टैग की मदद से एम्बेड करने में मदद करता है। हालांकि, इस एक्सटेंशन का उपयोग करने के लिए, आपको ट्विटर पर डेवलपर खाते के लिए आवेदन करना होगा। एक बार जब आप एक डेवलपर खाता प्राप्त करते हैं, तो एक ऐप बनाएं, और आपको ट्विटर के एपीआई का उपभोग करने के लिए कुंजी और रहस्य मिलेंगे।
देव c ++ क्या है
एक बार जब आपके पास चाबियाँ और रहस्य हों, तो उन्हें एक सुरक्षित स्थान पर संग्रहीत करें ताकि एप्लिकेशन उन तक पहुंच सके। हमने उन्हें पर्यावरण चर में रखा है और फ्लास्क ऐप के विन्यास में जोड़ा है, जैसा कि नीचे दिखाया गया है। हमारा डेमो ऐप config.py फ़ाइल में कॉन्फ़िगरेशन मान रखता है।
# Twitter details import os TWITTER_ACCESS_TOKEN = os.environ.get('TWITTER_ACCESS_TOKEN', None) TWITTER_TOKEN_SECRET = os.environ.get('TWITTER_TOKEN_SECRET', None) TWITTER_CONSUMER_KEY = os.environ.get('TWITTER_CONSUMER_KEY', None) TWITTER_CONSUMER_SECRET = os.environ.get('TWITTER_CONSUMER_SECRET', None)
हमें पर्यावरण चर से आवश्यक चर के मूल्य मिलते हैं। यदि परिवेश चर में संबंधित मान मौजूद नहीं है, तो वह कोई भी संग्रहीत नहीं है।
एक बार जब आप विन्यास फाइल में उपरोक्त पंक्तियाँ जोड़ते हैं, तो फ्लास्क एप्लिकेशन के __init__.py पर जाएँ और इसे संशोधित करके प्रारंभ करें, जैसा कि नीचे दिखाया गया है।
from flask_caching import Cache from flask_twitter_oembedder import TwitterOEmbedder cache = Cache(app, config={'CACHE_TYPE': 'simple'}) twitter_oembedder = TwitterOEmbedder(app, cache)
ये लाइनें फ्लास्क एक्सटेंशन को इनिशियलाइज़ करेंगी। अब हम टेम्पलेट्स के तहत hello.html को संशोधित कर सकते हैं और नीचे दिखाए गए टैग को नीचे दिखाए अनुसार जोड़ सकते हैं।
{{ oembed_tweet('1277228221394587649') }}
हमने मौजूदा टेम्प्लेट में लूप के लिए इस टैग को जोड़ा है। वह बहुत लंबा अंक ट्वीट आईडी है। हमें ट्वीट करने के बाद ट्वीट आईडी से यह आईडी मिलती है। टेम्प्लेट फ़ाइल को सहेजने के बाद, हम / हेलो / अभिवादन समापन बिंदु पर नेविगेट करते हैं और परिणाम प्राप्त करते हैं, जैसा कि नीचे की छवि में दिखाया गया है।

फ्लास्क रेस्टफुल
हमारा फ्लास्क रेस्टफुल उदाहरण एप्लिकेशन वह है जो आरईएसटी आर्किटेक्चर की बाधाओं का सम्मान करता है। हालांकि, यह एक प्रोटोकॉल की तरह नहीं है, और डेवलपर्स REST बाधाओं के बाद सुविधाओं को लागू करते समय लचीले हैं।
कृपया रीस्ट आर्किटेक्चर की बाधाओं के बारे में अधिक पढ़ें यहाँ ।
आधुनिक वेब एप्लिकेशन क्लाइंट को आसान तरीके से संसाधनों को पढ़ने और स्थिर समापन बिंदुओं पर एक स्टेटलेस तरीके से अनुरोध करने की अनुमति देते हैं।
फ्लास्क रेस्टफुल उदाहरण
आइए कुछ विशेषताओं को हमारे फ्लास्क रेस्टफुल उदाहरण एप्लिकेशन में एक रीस्टफुल तरीके से लागू करें।
हमारे पास एल्बम और गानों से संबंधित डेटा को संग्रहीत और परोसने का एक तरीका है। फ्लास्क रेस्टफुल एक्सटेंशन का उपयोग करते हुए एक एपीआई को लागू करें।
सबसे पहले, फ्लास्क रेस्टफुल को नीचे कमांड का उपयोग करके इंस्टॉल करें।
pip install flask-restful
आसान रखरखाव और समझ के लिए, आइए हम ऐप डायरेक्टरी के अंदर एपीपीडोम नामक एक फाइल बनाएं और उसमें कोड की निम्नलिखित पंक्तियों का उल्लेख करें। अभी के लिए, एपीआई को फ्लास्क व्यू के समान मानें।
जब क्लाइंट एप्लिकेशन के सर्वर एंडपॉइंट को रिक्वेस्ट भेजता है तो हम प्रतिक्रिया देने के लिए HTTP वर्बस से संबंधित सुविधाओं को लागू करने जा रहे हैं।
from flask import request from flask_restful import Resource, reqparse, abort, Api from . import app api = Api(app, prefix='/myapi/v1') def abort_if_song_doesnt_exist(song_name): if song_name not in SONGS: abort(404, message='Song {} doesn't exist'.format(song_name)) parser = reqparse.RequestParser() parser.add_argument('title') parser.add_argument('singer') SONGS = { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' } } class Songs(Resource): def get(self): return {'songs': SONGS} def post(self): args = parser.parse_args(strict=True) song_name = int(max(SONGS.keys()).lstrip('Song')) + 1 song_name = 'Song%d' % song_name SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return { song_name:SONGS(song_name) }, 201 api.add_resource(Songs, '/songs') class Song(Resource): def get(self, song_name): abort_if_song_doesnt_exist(song_name) return { song_name: SONGS(song_name) } def delete(self, song_name): abort_if_song_doesnt_exist(song_name) del SONGS(song_name) return '', 204 def put(self, song_name): args = parser.parse_args(strict=True) abort_if_song_doesnt_exist(song_name) SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return { song_name: SONGS(song_name) }, 201 api.add_resource(Song, '/songs/')
हमने फ्लास्क-रेस्टफुल के रिसोर्स एब्सट्रैक्ट क्लास को सॉन्ग और सॉन्ग नाम से दो संसाधन बनाए हैं। सोंग्स नामक कक्षा में दो HTTP वर्ब के लिए दो तरीके मिलते हैं और पोस्ट होते हैं; क्रमशः GET और POST।
गीत संसाधन पंजीकृत एंडपॉइंट पर सभी गानों की सेवा देता है जब क्लाइंट इसका अनुरोध करता है और मौजूदा गानों की सूची में एक गाना जोड़ता है जब डेटा उसी एंडपॉइंट पर पोस्ट किया जाता है।
इसी तरह, क्लास सॉन्ग के मामले में, HTTP GET, DELETE और PUT लागू होते हैं, डिलीट, और पुट के तरीकों का इस्तेमाल करते हैं। विधि प्राप्त JSON के रूप में अनुरोधित गीत के साथ एक प्रतिक्रिया भेजता है, विधि हटाएं SONGS से एक गीत को हटाता है, और पुट विधि SONGS में एक मौजूदा गीत को अपडेट करती है।
अब हम इन संसाधनों को एप्लिकेशन फ़ोल्डर के अंतर्गत __init__.py फ़ाइल में आरंभ करके अपने नमूना अनुप्रयोग में जोड़ते हैं।
ग्रहण में एक नया जावा प्रोजेक्ट बनाएं
from . import api
आइए कर्ल स्थापित करें और बताए गए समापन बिंदु पर सुविधाओं का प्रयास करें।
sudo apt -y install curl
सभी गाने जाओ
curl -k https://localhost:8080/api/v1/songs
हमें प्रतिक्रिया मिलती है, जैसा कि नीचे दिखाया गया है।
{ 'songs': { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' } } }
अब एक गीत जोड़ने के लिए नीचे बताई गई कमांड का उपयोग करें।
curl -k -d 'title=Summer Days&singer=Martin Garrix' https://localhost:8080/api/v1/songs
हम अपने एपीआई से प्रतिक्रिया प्राप्त करते हैं, जैसा कि नीचे दिखाया गया है।
{ 'Song2': { 'title': 'Summer Days', 'singer': 'Martin Garrix2' } }
अब फिर से, यदि हम पिछले कमांड में किए गए गानों की सूची को क्वेरी करते हैं, और हम दोनों गानों को प्रतिक्रिया में प्राप्त करेंगे।
{ 'songs': { 'Song1': { 'title': 'Past Life', 'singer': 'Selena Gomez' }, 'Song2': { 'title': 'Summer Days', 'singer': 'Martin Garrix2' } } }
इसी तरह, HTTP DELETE और PUT काम करता है। आइए हम इस सरल एपीआई के संस्करण v1 के लिए कुछ परीक्षण जोड़ते हैं जो हमने बनाया है।
def test_myapi_v1_songs(client): resp = client.get('/api/v1/songs/') #import pdb;pdb.set_trace() assert 200 == resp.status_code def test_myapi_v1_add_song(client): ''' The application can store the same data multiple times''' data = { 'title': 'Summer Days', 'singer': 'Martin Garrix' } resp = client.post( '/api/v1/songs/', data=data ) assert 201 == resp.status_code
अब इन परीक्षणों को कमांड-लाइन से चलाएं, जैसा कि नीचे दिखाया गया है।
pytest app/tests/test_api.py
इसी तरह, हम अधिक कवरेज के लिए अन्य तरीकों के लिए परीक्षण लिख सकते हैं।
ध्यान देने वाली एक महत्वपूर्ण बात यह है कि हमारे द्वारा जोड़े गए गाने एकल प्रक्रिया के एक हिस्से के रूप में बने रहते हैं जिसके तहत विकास सर्वर चल रहा है। इसका मतलब यह है कि जैसे ही प्रक्रिया बंद हो जाएगी, सभी नए डेटा खो जाएंगे।
इसके अलावा, एपीआई का संस्करण v1 बनाने का कार्य बेमानी लगता है, और यह उस तरीके से अलग है जिस तरह से हम एप्लिकेशन को फॉर्म और व्यू की मदद से डेटा सेव कर रहे थे।
आमतौर पर, रेस्टफुल एपीआई के कार्यान्वयन के लिए क्लाइंट से डेटा प्राप्त करना होता है, क्लाइंट और सर्वर के बीच मेलिंग होती है, और डेटाबेस मॉडल की मदद से दृढ़ता बनी रहती है, जिसे हमने बनाया है।
इसके अलावा, समापन बिंदु अनपेक्षित और तैयार किए गए इनपुट के लिए सुरक्षित हैं।
इसलिए, हम अनुशंसा करते हैं कि ऊपर दिए गए उदाहरण केवल HTTP विधियों का उपयोग करके अवधारणाओं और REST आर्किटेक्चर की बाधाओं को सीखने के लिए हैं। कृपया याद रखें कि यह केवल वेब सेवाओं के कई तरीकों में से एक है, सामान्य तौर पर, बनाए जाते हैं। इसके अलावा, ऐसे कई तरीके हैं जिनमें REST आर्किटेक्चर को लागू किया जा सकता है।
हम पाठकों को यह पता लगाने के लिए प्रोत्साहित करते हैं कि कैसे अन्य प्रोटोकॉल और JSON और HTTP का उपयोग करके REST के पास अलग-अलग फ़ाइल प्रारूप और कस्टम तरीके हो सकते हैं। बस एक उत्पादन उपयोग की झलक देने के लिए, हम नीचे दिए गए उदाहरण प्रदान करते हैं।
हम अलग-अलग समापन बिंदुओं के तहत समान सुविधाओं को लागू करने के लिए एक फ्लास्क-एपिल्डर बेसअपी का उपयोग करते हैं। Api.py फ़ाइल खोलें और इसे नीचे दिए गए कोड के साथ अपडेट करें।
APIs using appbuilder from flask_appbuilder.api import BaseApi, expose from . import appbuilder class SongsApi(BaseApi): resource_name = 'songs' @expose('/', methods=('POST', 'GET')) def songs(self): if request.method == 'GET': return self.response(200, songs=SONGS) else: args = parser.parse_args(strict=True) song_name = int(max(SONGS.keys()).lstrip('Song')) + 1 song_name = 'Song%d' % song_name SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return self.response(201, song=SONGS(song_name)) appbuilder.add_api(SongsApi) class SongApi(BaseApi): resource_name = 'songs' @expose('/', methods=('GET', 'DELETE', 'PUT')) def song(self, song_name): if request.method == 'GET': abort_if_song_doesnt_exist(song_name) return self.response(200, song_name=SONGS(song_name) ) elif request.method == 'DELETE': abort_if_song_doesnt_exist(song_name) del SONGS(song_name) return self.response(204, message='OK') elif request.method == 'PUT': args = parser.parse_args(strict=True) abort_if_song_doesnt_exist(song_name) SONGS(song_name) = {'title': args('title'), 'singer': args('singer')} return self.response(201, song_name=SONGS(song_name)) else: self.response_404() appbuilder.add_api(SongApi)
अब फ्लास्क-एपलिडर का उपयोग करके बनाए गए एंडपॉइंट्स का परीक्षण करने के लिए कुछ और परीक्षण जोड़ें। हम PyTest का उपयोग करके इन परीक्षणों को चलाएंगे।
def test_v1_songs(client): resp = client.get('/api/v1/songs/', follow_redirects=True) #import pdb;pdb.set_trace() assert 200 == resp.status_code def test_v1_add_song(client): ''' The application can store the same data multiple times''' # Get the existing number of songs resp = client.get('/api/v1/songs/', follow_redirects=True) data = { 'title': 'Summer Days', 'singer': 'Martin Garrix' } resp = client.post( '/api/v1/songs/', data=data, follow_redirects=True ) assert 201 == resp.status_code
फ्लास्क-एपीबिल्डर स्वैगर यूआई को प्रकाशित एपीआई की सूची और प्रयास करने में मदद करता है। कॉन्फ़िगरेशन को खोलें और नीचे दिखाए गए कॉन्फ़िगरेशन के साथ इसे अपडेट करें।
FAB_API_SWAGGER_UI=True
अब https: // localhost: 8080 / swaggerview / v1 पर नेविगेट करें और आप नीचे दिखाए गए अनुसार स्वैगर दृश्य देख पाएंगे।

अब हमारे पास मौजूद डेटाबेस मॉडल के लिए एपीआई बनाएं। हमें फ्लास्क-एपलिडर के मॉडलएपीआई का उपयोग करने की आवश्यकता है।
कोड की निम्न पंक्तियों के साथ api.py फ़ाइल को अपडेट करें।
from flask_appbuilder.models.sqla.interface import SQLAInterface from flask_appbuilder.api import ModelRestApi from .models import Song as SongModel class MySongModelApi(ModelRestApi): resource_name = 'newsongs' datamodel = SQLAInterface(SongModel) appbuilder.add_api(MySongModelApi)
ModelRestApi पर आधारित एक क्लास को परिभाषित करने के बाद, हमें फिर से add_api विधि का उपयोग करके फ्लास्क-ऐपलिडर के साथ इसे पंजीकृत करना होगा।
अब पहले की तरह Swagger UI पर नेविगेट करें, और आपको नीचे दिखाए गए के समान एक एपीआई संदर्भ दिखाई देगा।

आप स्वैगर दृश्य से एपीआई की कोशिश कर सकते हैं या पहले की तरह समापन बिंदु को कर्ल भेज सकते हैं।
फ्लास्क एपीआई
फ्लास्क एपीआई एक फ्रेमवर्क है जो कि Django REST फ्रेमवर्क से काफी मिलता-जुलता है। आप फ्लास्क एपीआई प्रलेखन का उपयोग कर सकते हैं यहाँ । यह फ्लास्क ढांचे के लिए ड्रॉप-इन प्रतिस्थापन है।
हम अपने आवेदन में फ्लास्क रेस्ट एपीआई संचालित सुविधाओं को लागू करने के लिए ऊपर दिए गए उदाहरणों में से कोई भी चुन सकते हैं।
अब स्रोत को कमिट करें और Git का उपयोग करके मूल रेपो में परिवर्तन प्रकाशित करें। जैसे ही हम शाखा नाम के साथ मूल के लिए प्रतिबद्ध होते हैं और एक पुल अनुरोध भेजते हैं, यूनिट परीक्षण स्वचालित रूप से पुल अनुरोध जांच के एक भाग के रूप में गिट क्रियाओं के तहत ट्रिगर हो जाएगा।
बोतल रेस्टप्लस
फ्लास्क रेस्टप्लस एक और फ्लास्क एक्सटेंशन है जो फ्लास्क का उपयोग करके आरईएसटी एपीआई के निर्माण में मदद करता है। इस परियोजना को फ्लास्क-आरईएसटीएक्स नामक एक और विस्तार में कांटा गया है और अब इसे बनाए नहीं रखा गया है।
इस परियोजना में एपीआई का वर्णन करने के लिए डेकोरेटर का एक अच्छा संग्रह है और स्वैगर का उपयोग करके इसके प्रलेखन को उजागर करता है। आप इस परियोजना का विवरण देख सकते हैं यहाँ ।
बार बार पूछे जाने वाले प्रश्न
Q # 1) मैं फ्लास्क के साथ REST API कैसे बनाऊं?
उत्तर: हम अन्य फ्लास्क एक्सटेंशन जैसे कि फ्लास्क-रेस्टफुल, फ्लास्क एपीआई, फ्लास्क आरईएक्सएक्स, कॉननेक्सियन इत्यादि के साथ फ्लास्क फ्रेमवर्क का उपयोग कर सकते हैं, ताकि आरईएसटी आधारित वेब अनुप्रयोगों को बनाया जा सके। अधिकांश एक्सटेंशन फ्लास्क फ्रेमवर्क की अन्य अंतर्निहित विशेषताओं और किसी अन्य मौजूदा ORM / लाइब्रेरी के साथ काम करते हैं।
Q # 2) REST API उदाहरण क्या है?
उत्तर: एक उदाहरण अनुप्रयोग जो RESTFul API को लागू करता है, इस ट्यूटोरियल में दिया गया है। नमूना आवेदन बनाने के लिए फ्लास्क-रेस्टफुल का उपयोग किया गया है। इस ट्यूटोरियल में फ्लास्क रेस्टफुल उदाहरण अनुभाग के बारे में पढ़ें।
Q # 3) RESTful API क्या है?
उत्तर: एक अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस जो आमतौर पर HTTP अनुरोधों का उपयोग करता है और क्लाइंट, सर्वर के बीच संचार की अनुमति देने के लिए HTTP क्रियाओं जैसे GET, POST, PUT, आदि के लिए बैकएंड विधियां हैं।
कैसे .torrent फ़ाइल का उपयोग करें
इस तरह के एक अनुप्रयोग अपनी सुविधाओं को लागू करने के लिए REST वास्तुकला सिद्धांतों और बाधाओं का अनुसरण करता है।
निष्कर्ष
हमने फ्लास्क-ट्विटर-ओमेबेडर, फ्लास्क एपीआई और फ्लास्क-रेस्टफुल जैसे तीन एक्सटेंशन की मदद से फ्लास्क एक्सटेंशन की अवधारणाओं को कवर किया।
फ्लास्क-ट्विटर-एचएमबेडर की मदद से, हमने ट्विटर एपीआई की अवधारणाओं को भी कवर किया। सामान्य तौर पर, हमने एक RESTful वेब सेवा को लागू करने के विचारों को भी शामिल किया है, जो कि REST वास्तुकला सिद्धांतों और बाधाओं का पालन करता है।
हमारे अगले ट्यूटोरियल में, हम अपने पाठकों को दोनों रूपरेखाओं की ताकत और कमजोरियों को समझने में मदद करने के लिए Django और फ्लास्क ढांचे के बीच तुलना को कवर करेंगे। यह विशेष परियोजना आवश्यकताओं के आधार पर दूसरे के खिलाफ एक रूपरेखा चुनने में भी मदद करेगा।
=> यहाँ सरल फ्लास्क प्रशिक्षण श्रृंखला का अन्वेषण करें
अनुशंसित पाठ
- एपीआई परीक्षण ट्यूटोरियल: शुरुआती के लिए एक पूर्ण गाइड
- बाकी एपीआई ट्यूटोरियल: बाकी एपीआई वास्तुकला और बाधाओं
- Parasoft SOAtest ट्यूटोरियल: स्क्रिप्टलेस एपीआई टेस्टिंग टूल
- पोस्टमैन में एपीआई डॉक्यूमेंटेशन कैसे बनाएं?
- GitHub REST API Tutorial - GitHub में REST API सपोर्ट
- विभिन्न एपीआई प्रारूपों के परीक्षण के लिए पोस्टमैन का उपयोग कैसे करें?
- पोस्टमैन ट्यूटोरियल: एपीआई टेस्ट पोस्टमैन का उपयोग करना
- शीर्ष 31 लोकप्रिय पायथन फ्लास्क साक्षात्कार प्रश्न उत्तर के साथ