പൈത്തണും ഫ്ലാസ്കും ഉപയോഗിച്ച് ശക്തവും വിപുലീകരിക്കാവുന്നതുമായ റെസ്റ്റ്ഫുൾ എപിഐകൾ നിർമ്മിക്കാൻ പഠിക്കുക. ഈ സമഗ്ര ഗൈഡ് സെറ്റപ്പ് മുതൽ ആഗോള പ്രേക്ഷകർക്കായുള്ള നൂതന ആശയങ്ങൾ വരെ ഉൾക്കൊള്ളുന്നു.
പൈത്തൺ ഫ്ലാസ്ക് എപിഐ ഡെവലപ്മെന്റ്: റെസ്റ്റ്ഫുൾ സേവനങ്ങൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു സമഗ്ര ഗൈഡ്
ആധുനിക ഡിജിറ്റൽ ലോകത്ത്, ആപ്ലിക്കേഷൻ പ്രോഗ്രാമിംഗ് ഇന്റർഫേസുകൾ (എപിഐകൾ) വ്യത്യസ്ത സോഫ്റ്റ്വെയർ സിസ്റ്റങ്ങളെ പരസ്പരം ആശയവിനിമയം നടത്താൻ അനുവദിക്കുന്ന അടിസ്ഥാന ഘടകമാണ്. മൊബൈൽ ആപ്ലിക്കേഷനുകൾ മുതൽ സങ്കീർണ്ണമായ മൈക്രോസർവീസ് ആർക്കിടെക്ചറുകൾ വരെ പ്രവർത്തിക്കുന്നത് ഇവയുടെ സഹായത്താലാണ്. വിവിധ എപിഐ ഡിസൈൻ രീതികളിൽ, റെസ്റ്റ് (റെപ്രസെന്റേഷണൽ സ്റ്റേറ്റ് ട്രാൻസ്ഫർ) അതിന്റെ ലാളിത്യം, വിപുലീകരണം, സ്റ്റേറ്റ്ലെസ്സ്നസ് എന്നിവ കാരണം ഒരു പൊതുവായ മാനദണ്ഡമായി മാറിയിരിക്കുന്നു.
ശക്തവും കാര്യക്ഷമവുമായ ബാക്കെൻഡ് സേവനങ്ങൾ നിർമ്മിക്കാൻ ആഗ്രഹിക്കുന്ന ഡെവലപ്പർമാർക്ക്, പൈത്തണിന്റെയും ഫ്ലാസ്കിന്റെയും സംയോജനം ഒരു മികച്ച പ്ലാറ്റ്ഫോം നൽകുന്നു. പൈത്തണിന്റെ ലളിതമായ സിന്റാക്സും വിപുലമായ ലൈബ്രറികളും വികസനം വേഗത്തിലാക്കുന്നു, അതേസമയം ഭാരം കുറഞ്ഞതും വഴക്കമുള്ളതുമായ വെബ് ഫ്രെയിംവർക്കായ ഫ്ലാസ്ക്, ഒരു കർശനമായ ഘടന അടിച്ചേൽപ്പിക്കാതെ ശക്തമായ എപിഐകൾ നിർമ്മിക്കുന്നതിനുള്ള അവശ്യ ഉപകരണങ്ങൾ നൽകുന്നു. ബാക്കെൻഡ് വികസനത്തിൽ പുതിയവരായ ഡെവലപ്പർമാർ മുതൽ എപിഐ നിർമ്മാണത്തിനായി ഫ്ലാസ്ക് പഠിക്കാൻ ആഗ്രഹിക്കുന്ന പരിചയസമ്പന്നരായ പ്രോഗ്രാമർമാർ വരെയുള്ള ഒരു ആഗോള പ്രേക്ഷകർക്കായി ഈ ഗൈഡ് രൂപകൽപ്പന ചെയ്തിട്ടുള്ളതാണ്.
എന്താണ് ഒരു റെസ്റ്റ്ഫുൾ എപിഐ?
കോഡിലേക്ക് കടക്കുന്നതിന് മുമ്പ്, നമ്മുടെ വികസനത്തെ നയിക്കുന്ന തത്വങ്ങൾ മനസ്സിലാക്കേണ്ടത് അത്യാവശ്യമാണ്. റെസ്റ്റ്ഫുൾ എപിഐ എന്നത് റെസ്റ്റ് ആർക്കിടെക്ചറൽ ശൈലിയുടെ പരിമിതികൾ പാലിക്കുന്ന ഒരു എപിഐ ആണ്. ഇതൊരു കർശനമായ പ്രോട്ടോക്കോൾ അല്ല, മറിച്ച് വിപുലീകരിക്കാവുന്നതും, സ്റ്റേറ്റ്ലെസ്, വിശ്വസനീയവുമായ വെബ് സേവനങ്ങൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു കൂട്ടം മാർഗ്ഗനിർദ്ദേശങ്ങളാണ്.
റെസ്റ്റിന്റെ പ്രധാന തത്വങ്ങൾ ഇവയാണ്:
- ക്ലയിന്റ്-സെർവർ ആർക്കിടെക്ചർ: ക്ലയിന്റും (ഉദാഹരണത്തിന്, ഒരു മൊബൈൽ ആപ്പ് അല്ലെങ്കിൽ വെബ് ബ്രൗസർ) സെർവറും ഒരു നെറ്റ്വർക്കിലൂടെ ആശയവിനിമയം നടത്തുന്ന വെവ്വേറെ ഘടകങ്ങളാണ്. ഈ വേർതിരിവ് ഓരോ ഭാഗത്തിനും സ്വതന്ത്രമായി വികസിക്കാൻ അവസരം നൽകുന്നു.
- സ്റ്റേറ്റ്ലെസ്സ്നസ്: ഒരു ക്ലയിന്റിൽ നിന്ന് സെർവറിലേക്കുള്ള ഓരോ അഭ്യർത്ഥനയിലും, അത് മനസ്സിലാക്കുന്നതിനും പ്രോസസ്സ് ചെയ്യുന്നതിനും ആവശ്യമായ എല്ലാ വിവരങ്ങളും അടങ്ങിയിരിക്കണം. അഭ്യർത്ഥനകൾക്കിടയിൽ സെർവർ ക്ലയിന്റ് കോൺടെക്സ്റ്റോ സെഷൻ സ്റ്റേറ്റോ സംഭരിക്കുന്നില്ല.
- യൂണിഫോം ഇന്റർഫേസ്: ആർക്കിടെക്ചറിനെ ലളിതമാക്കുകയും വേർതിരിക്കുകയും ചെയ്യുന്ന പ്രധാന തത്വമാണിത്. ഇതിന് നാല് പരിമിതികളുണ്ട്:
- വിഭവങ്ങളെ അടിസ്ഥാനമാക്കിയത് (Resource-Based): വിഭവങ്ങളെ (ഉദാഹരണത്തിന്, ഒരു ഉപയോക്താവ്, ഒരു ഉൽപ്പന്നം) യുആർഐകൾ (യൂണിഫോം റിസോഴ്സ് ഐഡന്റിഫയറുകൾ) ഉപയോഗിച്ച് തിരിച്ചറിയുന്നു. ഉദാഹരണത്തിന്,
/users/123ഒരു നിർദ്ദിഷ്ട ഉപയോക്താവിനെ തിരിച്ചറിയുന്നു. - സ്റ്റാൻഡേർഡ് എച്ച്ടിടിപി മെത്തേഡുകൾ: ക്ലയിന്റുകൾ
GET(വീണ്ടെടുക്കുക),POST(സൃഷ്ടിക്കുക),PUT(അപ്ഡേറ്റ്/മാറ്റിസ്ഥാപിക്കുക),DELETE(നീക്കം ചെയ്യുക) പോലുള്ള ഒരു നിശ്ചിത കൂട്ടം സ്റ്റാൻഡേർഡ് മെത്തേഡുകൾ (ക്രിയകൾ) ഉപയോഗിച്ച് വിഭവങ്ങളെ കൈകാര്യം ചെയ്യുന്നു. - സ്വയം-വിവരണാത്മക സന്ദേശങ്ങൾ: ഓരോ സന്ദേശത്തിലും അത് എങ്ങനെ പ്രോസസ്സ് ചെയ്യണമെന്ന് വിവരിക്കാൻ ആവശ്യമായ വിവരങ്ങൾ അടങ്ങിയിരിക്കുന്നു, സാധാരണയായി
application/jsonപോലുള്ള മീഡിയ ടൈപ്പുകളിലൂടെ. - ഹൈപ്പർമീഡിയ ആസ് ദി എൻജിൻ ഓഫ് ആപ്ലിക്കേഷൻ സ്റ്റേറ്റ് (HATEOAS): എപിഐയുടെ പ്രതികരണങ്ങളിൽ നൽകിയിട്ടുള്ള ഹൈപ്പർലിങ്കുകളിലൂടെ ലഭ്യമായ എല്ലാ പ്രവർത്തനങ്ങളും വിഭവങ്ങളും ഒരു ക്ലയിന്റിന് കണ്ടെത്താൻ കഴിയണമെന്ന് ഈ നൂതന ആശയം നിർദ്ദേശിക്കുന്നു.
- വിഭവങ്ങളെ അടിസ്ഥാനമാക്കിയത് (Resource-Based): വിഭവങ്ങളെ (ഉദാഹരണത്തിന്, ഒരു ഉപയോക്താവ്, ഒരു ഉൽപ്പന്നം) യുആർഐകൾ (യൂണിഫോം റിസോഴ്സ് ഐഡന്റിഫയറുകൾ) ഉപയോഗിച്ച് തിരിച്ചറിയുന്നു. ഉദാഹരണത്തിന്,
- കാഷബിലിറ്റി: പ്രകടനവും വിപുലീകരണവും മെച്ചപ്പെടുത്തുന്നതിന്, പ്രതികരണങ്ങൾ അവ്യക്തമായോ വ്യക്തമായോ കാഷെ ചെയ്യാവുന്നവയാണോ അല്ലയോ എന്ന് നിർവചിക്കണം.
എന്തുകൊണ്ട് പൈത്തണും ഫ്ലാസ്കും തിരഞ്ഞെടുക്കണം?
നിരവധി കാരണങ്ങളാൽ പൈത്തൺ ബാക്കെൻഡ് വികസനത്തിൽ ഒരു പ്രധാന ശക്തിയായി മാറിയിരിക്കുന്നു:
- വായനാക്ഷമതയും ലാളിത്യവും: പൈത്തണിന്റെ ലളിതമായ സിന്റാക്സ് ഡെവലപ്പർമാരെ കുറഞ്ഞ കോഡ് എഴുതാനും ആശയങ്ങൾ കൂടുതൽ വ്യക്തമായി പ്രകടിപ്പിക്കാനും അനുവദിക്കുന്നു, ഇത് ദീർഘകാല മെയിന്റനൻസിന് വിലമതിക്കാനാവാത്തതാണ്.
- വിശാലമായ ഇക്കോസിസ്റ്റം: ലൈബ്രറികളുടെയും ഫ്രെയിംവർക്കുകളുടെയും (ഫ്ലാസ്ക്, ജാങ്കോ, ഫാസ്റ്റ്എപിഐ പോലുള്ളവ) സമ്പന്നമായ ഒരു ഇക്കോസിസ്റ്റവും ഡാറ്റാ സയൻസ്, മെഷീൻ ലേണിംഗ് എന്നിവയ്ക്കായുള്ള ഉപകരണങ്ങളും എളുപ്പത്തിൽ സംയോജിപ്പിക്കാൻ അനുവദിക്കുന്നു.
- ശക്തമായ കമ്മ്യൂണിറ്റി: ഒരു വലിയ, സജീവമായ ആഗോള കമ്മ്യൂണിറ്റി ഉള്ളതിനാൽ മികച്ച ഡോക്യുമെന്റേഷൻ, ട്യൂട്ടോറിയലുകൾ, പിന്തുണ എന്നിവ എല്ലായ്പ്പോഴും ലഭ്യമാണ്.
എപിഐ വികസനത്തിന് ഫ്ലാസ്ക് ഒരു അനുയോജ്യമായ തിരഞ്ഞെടുപ്പാണ്:
- മൈക്രോ-ഫ്രെയിംവർക്ക്: ഒരു പ്രത്യേക പ്രോജക്റ്റ് ഘടനയോ ഡിപൻഡൻസികളോ അടിച്ചേൽപ്പിക്കാതെ വെബ് ഡെവലപ്മെന്റിന്റെ (റൂട്ടിംഗ്, റിക്വസ്റ്റ് ഹാൻഡ്ലിംഗ്, ടെംപ്ലേറ്റിംഗ്) പ്രധാന ഘടകങ്ങൾ ഇത് നൽകുന്നു. നിങ്ങൾ ചെറുതായി ആരംഭിച്ച് ആവശ്യമുള്ളത് മാത്രം ചേർക്കുന്നു.
- വഴക്കം: ഫ്ലാസ്ക് നിങ്ങൾക്ക് പൂർണ്ണ നിയന്ത്രണം നൽകുന്നു, ഇത് കസ്റ്റം സൊല്യൂഷനുകളും മൈക്രോസർവീസുകളും നിർമ്മിക്കുന്നതിന് അനുയോജ്യമാക്കുന്നു.
- വിപുലീകരിക്കാവുന്നത്: ഡാറ്റാബേസ് ഇന്റഗ്രേഷൻ (Flask-SQLAlchemy), ഓതന്റിക്കേഷൻ (Flask-Login, Flask-JWT-Extended), എപിഐ ജനറേഷൻ (Flask-RESTX) പോലുള്ള പ്രവർത്തനങ്ങൾ ചേർക്കുന്നതിന് ധാരാളം ഉയർന്ന നിലവാരമുള്ള എക്സ്റ്റൻഷനുകൾ ലഭ്യമാണ്.
ഭാഗം 1: നിങ്ങളുടെ ഡെവലപ്മെന്റ് എൻവയോൺമെന്റ് സജ്ജീകരിക്കുന്നു
നമ്മുടെ വർക്ക്സ്പെയ്സ് തയ്യാറാക്കി തുടങ്ങാം. ഏതൊരു പ്രൊഫഷണൽ പ്രോജക്റ്റിനും വൃത്തിയുള്ളതും വേർതിരിച്ചതുമായ ഒരു എൻവയോൺമെന്റ് നിർണായകമാണ്.
ആവശ്യകതകൾ
നിങ്ങളുടെ സിസ്റ്റത്തിൽ പൈത്തൺ 3.6 അല്ലെങ്കിൽ പുതിയ പതിപ്പ് ഇൻസ്റ്റാൾ ചെയ്തിട്ടുണ്ടെന്ന് ഉറപ്പാക്കുക. നിങ്ങളുടെ ടെർമിനലിലോ കമാൻഡ് പ്രോംപ്റ്റിലോ ഇനിപ്പറയുന്ന കമാൻഡ് പ്രവർത്തിപ്പിച്ച് ഇത് പരിശോധിക്കാവുന്നതാണ്:
python --version അല്ലെങ്കിൽ python3 --version
ഒരു വെർച്വൽ എൻവയോൺമെന്റ് ഉണ്ടാക്കുന്നു
ഒരു വെർച്വൽ എൻവയോൺമെന്റ് നിങ്ങളുടെ പൈത്തൺ പ്രോജക്റ്റിന്റെ ഡിപൻഡൻസികൾക്കായി വേർതിരിച്ച ഒരു ഇടമാണ്. ഇത് ഒരേ മെഷീനിലെ വ്യത്യസ്ത പ്രോജക്റ്റുകൾ തമ്മിലുള്ള വൈരുദ്ധ്യങ്ങൾ തടയുന്നു. ഇത് ഒഴിച്ചുകൂടാനാവാത്ത ഒരു മികച്ച പരിശീലനമാണ്.
1. നിങ്ങളുടെ പ്രോജക്റ്റിനായി ഒരു പുതിയ ഡയറക്ടറി ഉണ്ടാക്കി അതിലേക്ക് പോകുക:
mkdir flask_api_project
cd flask_api_project
2. `venv` എന്ന് പേരുള്ള ഒരു വെർച്വൽ എൻവയോൺമെന്റ് ഉണ്ടാക്കുക:
python3 -m venv venv
3. വെർച്വൽ എൻവയോൺമെന്റ് ആക്ടിവേറ്റ് ചെയ്യുക. നിങ്ങളുടെ ഓപ്പറേറ്റിംഗ് സിസ്റ്റം അനുസരിച്ച് കമാൻഡ് വ്യത്യാസപ്പെടും:
- മാക്ഒഎസ്/ലിനക്സ്:
source venv/bin/activate - വിൻഡോസ്:
venv\Scripts\activate
ആക്ടിവേറ്റ് ചെയ്തുകഴിഞ്ഞാൽ, നിങ്ങളുടെ കമാൻഡ് പ്രോംപ്റ്റിന് മുന്നിൽ `(venv)` എന്ന് കാണാം, ഇത് നിങ്ങൾ ഇപ്പോൾ വെർച്വൽ എൻവയോൺമെന്റിനുള്ളിലാണ് പ്രവർത്തിക്കുന്നതെന്ന് സൂചിപ്പിക്കുന്നു.
ഫ്ലാസ്ക് ഇൻസ്റ്റാൾ ചെയ്യുന്നു
എൻവയോൺമെന്റ് ആക്റ്റീവ് ആയിരിക്കുമ്പോൾ, പൈത്തണിന്റെ പാക്കേജ് ഇൻസ്റ്റാളറായ `pip` ഉപയോഗിച്ച് നമുക്ക് ഫ്ലാസ്ക് ഇൻസ്റ്റാൾ ചെയ്യാം.
pip install Flask
ഭാഗം 2: നിങ്ങളുടെ ആദ്യത്തെ ഫ്ലാസ്ക് എപിഐ എൻഡ്പോയിന്റ്
നമ്മൾ ക്ലാസിക് "Hello, World!" ഉദാഹരണത്തിൽ നിന്ന് ആരംഭിക്കും, ഇത് ഒരു എപിഐക്കായി മാറ്റം വരുത്തിയതാണ്. നിങ്ങളുടെ പ്രോജക്റ്റ് ഡയറക്ടറിയിൽ app.py എന്ന പേരിൽ ഒരു പുതിയ ഫയൽ ഉണ്ടാക്കുക.
from flask import Flask, jsonify
# Create a Flask application instance
app = Flask(__name__)
# Define a route and its corresponding view function
@app.route('/')
def home():
# jsonify serializes a Python dictionary to a JSON response
return jsonify({'message': 'Hello, World!'})
# Run the app if the script is executed directly
if __name__ == '__main__':
app.run(debug=True)
കോഡ് വിശദീകരിക്കുന്നു
from flask import Flask, jsonify: നമ്മുടെ ആപ്ലിക്കേഷൻ നിർമ്മിക്കുന്നതിനായിFlaskക്ലാസും ജെസൺ ഫോർമാറ്റിലുള്ള പ്രതികരണങ്ങൾ ഉണ്ടാക്കുന്നതിനായിjsonify-യും നമ്മൾ ഇംപോർട്ട് ചെയ്യുന്നു.app = Flask(__name__): നമ്മൾ ഫ്ലാസ്ക് ആപ്ലിക്കേഷന്റെ ഒരു ഇൻസ്റ്റൻസ് ഉണ്ടാക്കുന്നു.__name__എന്നത് നിലവിലെ മൊഡ്യൂളിന്റെ പേര് ലഭിക്കുന്ന ഒരു പ്രത്യേക പൈത്തൺ വേരിയബിളാണ്.@app.route('/'): ഇത് ഒരു ഡെക്കറേറ്ററാണ്, ഏത് യുആർഎൽ നമ്മുടെ ഫംഗ്ഷനെ പ്രവർത്തനക്ഷമമാക്കണമെന്ന് ഫ്ലാസ്കിനോട് പറയുന്നു./എന്നത് നമ്മുടെ ആപ്ലിക്കേഷന്റെ റൂട്ട് യുആർഎല്ലിന് തുല്യമാണ്.def home()::/റൂട്ടിലേക്ക് ഒരു അഭ്യർത്ഥന വരുമ്പോൾ പ്രവർത്തിക്കുന്ന വ്യൂ ഫംഗ്ഷനാണിത്.return jsonify({'message': 'Hello, World!'}): എച്ച്ടിഎംഎൽ തിരികെ നൽകുന്നതിന് പകരം, നമ്മൾ ഒരു ജെസൺ ഒബ്ജക്റ്റ് തിരികെ നൽകുന്നു.jsonifyഎച്ച്ടിടിപിContent-Typeഹെഡർ ശരിയായിapplication/jsonആയി സജ്ജമാക്കുന്നു.if __name__ == '__main__': app.run(debug=True): ഈ സ്ക്രിപ്റ്റ് നേരിട്ട് പ്രവർത്തിപ്പിക്കുമ്പോൾ (ഒരു മൊഡ്യൂളായി ഇംപോർട്ട് ചെയ്യുമ്പോഴല്ല) മാത്രം ഡെവലപ്മെന്റ് സെർവർ ആരംഭിക്കുന്നുവെന്ന് ഈ ബ്ലോക്ക് ഉറപ്പാക്കുന്നു.debug=Trueഡീബഗ് മോഡ് പ്രവർത്തനക്ഷമമാക്കുന്നു, ഇത് സഹായകമായ പിശക് സന്ദേശങ്ങൾ നൽകുകയും കോഡിൽ മാറ്റങ്ങൾ വരുത്തുമ്പോൾ സെർവർ സ്വയമേവ റീലോഡ് ചെയ്യുകയും ചെയ്യുന്നു.
ആപ്ലിക്കേഷൻ പ്രവർത്തിപ്പിക്കുന്നു
നിങ്ങളുടെ ടെർമിനലിൽ (വെർച്വൽ എൻവയോൺമെന്റ് ഇപ്പോഴും ആക്റ്റീവ് ആയിരിക്കുമ്പോൾ), ആപ്ലിക്കേഷൻ പ്രവർത്തിപ്പിക്കുക:
python app.py
നിങ്ങൾക്ക് ഇതുപോലുള്ള ഔട്ട്പുട്ട് കാണാം:
* Serving Flask app "app" (lazy loading)
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
ഇപ്പോൾ, ഒരു വെബ് ബ്രൗസർ തുറന്ന് http://127.0.0.1:5000/ എന്നതിലേക്ക് പോകുക, അല്ലെങ്കിൽ curl അല്ലെങ്കിൽ Postman പോലുള്ള ഒരു ഉപകരണം ഉപയോഗിക്കുക. നിങ്ങൾക്ക് ജെസൺ പ്രതികരണം ലഭിക്കും:
{ "message": "Hello, World!" }
അഭിനന്ദനങ്ങൾ! നിങ്ങൾ ഫ്ലാസ്ക് ഉപയോഗിച്ച് നിങ്ങളുടെ ആദ്യത്തെ എപിഐ എൻഡ്പോയിന്റ് നിർമ്മിക്കുകയും പ്രവർത്തിപ്പിക്കുകയും ചെയ്തിരിക്കുന്നു.
ഭാഗം 3: ഒരു സമ്പൂർണ്ണ ക്രഡ് (CRUD) എപിഐ നിർമ്മിക്കുന്നു
ഒരു ക്രഡ് (ക്രിയേറ്റ്, റീഡ്, അപ്ഡേറ്റ്, ഡിലീറ്റ്) എപിഐ മിക്ക വെബ് സേവനങ്ങളുടെയും അടിസ്ഥാനമാണ്. ടാസ്ക്കുകളുടെ ഒരു ശേഖരം കൈകാര്യം ചെയ്യുന്നതിനായി നമ്മൾ ഒരു എപിഐ നിർമ്മിക്കും. കാര്യങ്ങൾ ലളിതമാക്കാൻ, നമ്മുടെ ഡാറ്റാബേസായി ഇൻ-മെമ്മറി ലിസ്റ്റ് ഓഫ് ഡിക്ഷണറികൾ ഉപയോഗിക്കും. ഒരു യഥാർത്ഥ ആപ്ലിക്കേഷനിൽ, നിങ്ങൾ ഇത് PostgreSQL അല്ലെങ്കിൽ MySQL പോലുള്ള ഒരു ശരിയായ ഡാറ്റാബേസ് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കും.
നിങ്ങളുടെ app.py ഫയൽ ഇനിപ്പറയുന്ന കോഡ് ഉപയോഗിച്ച് അപ്ഡേറ്റ് ചെയ്യുക:
from flask import Flask, jsonify, request
app = Flask(__name__)
# In-memory 'database'
tasks = [
{
'id': 1,
'title': 'Learn Python',
'description': 'Study the basics of Python syntax and data structures.',
'done': True
},
{
'id': 2,
'title': 'Build a Flask API',
'description': 'Create a simple RESTful API using the Flask framework.',
'done': False
}
]
# Helper function to find a task by ID
def find_task(task_id):
return next((task for task in tasks if task['id'] == task_id), None)
# --- READ --- #
# GET all tasks
@app.route('/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
# GET a single task
@app.route('/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = find_task(task_id)
if task is None:
return jsonify({'error': 'Task not found'}), 404
return jsonify({'task': task})
# --- CREATE --- #
# POST a new task
@app.route('/tasks', methods=['POST'])
def create_task():
if not request.json or not 'title' in request.json:
return jsonify({'error': 'The new task must have a title'}), 400
new_task = {
'id': tasks[-1]['id'] + 1 if tasks else 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(new_task)
return jsonify({'task': new_task}), 201 # 201 Created status
# --- UPDATE --- #
# PUT to update a task
@app.route('/tasks/<int:task_id>', methods=['PUT'])
def update_task(task_id):
task = find_task(task_id)
if task is None:
return jsonify({'error': 'Task not found'}), 404
if not request.json:
return jsonify({'error': 'Request must be JSON'}), 400
# Update fields
task['title'] = request.json.get('title', task['title'])
task['description'] = request.json.get('description', task['description'])
task['done'] = request.json.get('done', task['done'])
return jsonify({'task': task})
# --- DELETE --- #
# DELETE a task
@app.route('/tasks/<int:task_id>', methods=['DELETE'])
def delete_task(task_id):
task = find_task(task_id)
if task is None:
return jsonify({'error': 'Task not found'}), 404
tasks.remove(task)
return jsonify({'result': True})
if __name__ == '__main__':
app.run(debug=True)
ക്രഡ് എൻഡ്പോയിന്റുകൾ പരിശോധിക്കുന്നു
പ്രത്യേകിച്ച് POST, PUT, DELETE അഭ്യർത്ഥനകൾക്കായി ഈ എൻഡ്പോയിന്റുകൾ ഫലപ്രദമായി പരിശോധിക്കുന്നതിന് നിങ്ങൾക്ക് Postman പോലുള്ള ഒരു എപിഐ ക്ലയിന്റോ അല്ലെങ്കിൽ curl പോലുള്ള ഒരു കമാൻഡ്-ലൈൻ ടൂളോ ആവശ്യമാണ്.
1. എല്ലാ ടാസ്ക്കുകളും നേടുക (GET)
- രീതി:
GET - യുആർഎൽ:
http://127.0.0.1:5000/tasks - ഫലം: എല്ലാ ടാസ്ക്കുകളുടെയും ലിസ്റ്റ് അടങ്ങുന്ന ഒരു ജെസൺ ഒബ്ജക്റ്റ്.
2. ഒരു ടാസ്ക് മാത്രം നേടുക (GET)
- രീതി:
GET - യുആർഎൽ:
http://127.0.0.1:5000/tasks/1 - ഫലം: ഐഡി 1 ഉള്ള ടാസ്ക്. 99 പോലെ നിലവിലില്ലാത്ത ഒരു ഐഡി ശ്രമിച്ചാൽ, നിങ്ങൾക്ക് 404 Not Found പിശക് ലഭിക്കും.
3. ഒരു പുതിയ ടാസ്ക് ഉണ്ടാക്കുക (POST)
- രീതി:
POST - യുആർഎൽ:
http://127.0.0.1:5000/tasks - ഹെഡറുകൾ:
Content-Type: application/json - ബോഡി (റോ ജെസൺ):
{ "title": "Read a book", "description": "Finish reading 'Designing Data-Intensive Applications'." } - ഫലം: ഒരു
201 Createdസ്റ്റാറ്റസും പുതുതായി ഉണ്ടാക്കിയ ടാസ്ക് ഒബ്ജക്റ്റും അതിന് നൽകിയിട്ടുള്ള ഐഡിയും.
4. നിലവിലുള്ള ഒരു ടാസ്ക് അപ്ഡേറ്റ് ചെയ്യുക (PUT)
- രീതി:
PUT - യുആർഎൽ:
http://127.0.0.1:5000/tasks/2 - ഹെഡറുകൾ:
Content-Type: application/json - ബോഡി (റോ ജെസൺ):
{ "done": true } - ഫലം: ഐഡി 2-നുള്ള അപ്ഡേറ്റ് ചെയ്ത ടാസ്ക് ഒബ്ജക്റ്റ്, ഇപ്പോൾ `done` എന്നത് `true` ആയി സജ്ജീകരിച്ചിരിക്കുന്നു.
5. ഒരു ടാസ്ക് ഡിലീറ്റ് ചെയ്യുക (DELETE)
- രീതി:
DELETE - യുആർഎൽ:
http://127.0.0.1:5000/tasks/1 - ഫലം: ഒരു സ്ഥിരീകരണ സന്ദേശം. അതിനുശേഷം നിങ്ങൾ എല്ലാ ടാസ്ക്കുകളും GET ചെയ്യാൻ ശ്രമിച്ചാൽ, ഐഡി 1 ഉള്ള ടാസ്ക് ഇല്ലാതായിരിക്കും.
ഭാഗം 4: മികച്ച രീതികളും നൂതന ആശയങ്ങളും
ഇപ്പോൾ നിങ്ങൾക്ക് പ്രവർത്തനക്ഷമമായ ഒരു ക്രഡ് എപിഐ ഉണ്ട്, ഇതിനെ എങ്ങനെ കൂടുതൽ പ്രൊഫഷണൽ, കരുത്തുറ്റതും, വിപുലീകരിക്കാവുന്നതുമാക്കാം എന്ന് നമുക്ക് നോക്കാം.
ബ്ലൂപ്രിന്റുകൾ ഉപയോഗിച്ച് ശരിയായ പ്രോജക്റ്റ് ഘടന
നിങ്ങളുടെ എപിഐ വളരുന്നതിനനുസരിച്ച്, എല്ലാ റൂട്ടുകളും ഒരൊറ്റ `app.py` ഫയലിൽ വെക്കുന്നത് കൈകാര്യം ചെയ്യാൻ ബുദ്ധിമുട്ടാകും. ഫ്ലാസ്കിന്റെ ബ്ലൂപ്രിന്റുകൾ നിങ്ങളുടെ ആപ്ലിക്കേഷനെ ചെറിയ, പുനരുപയോഗിക്കാവുന്ന ഘടകങ്ങളായി ക്രമീകരിക്കാൻ അനുവദിക്കുന്നു.
നിങ്ങൾക്ക് ഇതുപോലൊരു ഘടന ഉണ്ടാക്കാൻ കഴിയും:
/my_api
/venv
/app
/__init__.py # App factory
/routes
/__init__.py
/tasks.py # Blueprint for task routes
/models.py # Database models (if using a DB)
/run.py # Script to run the app
/config.py
ബ്ലൂപ്രിന്റുകൾ ഉപയോഗിക്കുന്നത് ഉത്തരവാദിത്തങ്ങൾ വേർതിരിക്കാൻ സഹായിക്കുകയും നിങ്ങളുടെ കോഡ്ബേസ് ഒരു ആഗോള ടീമിന് പരിപാലിക്കാൻ വളരെ വൃത്തിയുള്ളതും എളുപ്പമുള്ളതുമാക്കുകയും ചെയ്യുന്നു.
കേന്ദ്രീകൃത പിശക് കൈകാര്യം ചെയ്യൽ
ഓരോ റൂട്ടിലും `None` പരിശോധിക്കുന്നതിനുപകരം, നിങ്ങൾക്ക് കേന്ദ്രീകൃത പിശക് ഹാൻഡ്ലറുകൾ ഉണ്ടാക്കാം. ഇത് നിങ്ങളുടെ എപിഐ എല്ലായ്പ്പോഴും സ്ഥിരതയുള്ളതും, നന്നായി ഫോർമാറ്റ് ചെയ്തതുമായ ജെസൺ പിശക് പ്രതികരണങ്ങൾ നൽകുന്നുവെന്ന് ഉറപ്പാക്കുന്നു.
@app.errorhandler(404)
def not_found(error):
return jsonify({'error': 'Not Found', 'message': 'The requested resource was not found on the server.'}), 404
@app.errorhandler(400)
def bad_request(error):
return jsonify({'error': 'Bad Request', 'message': 'The server could not understand the request due to invalid syntax.'}), 400
മുഴുവൻ എപിഐയിലുടനീളമുള്ള പിശകുകൾ പിടിക്കാൻ നിങ്ങൾ ഈ ഹാൻഡ്ലറുകൾ നിങ്ങളുടെ പ്രധാന ആപ്ലിക്കേഷൻ ഫയലിൽ സ്ഥാപിക്കും.
എച്ച്ടിടിപി സ്റ്റാറ്റസ് കോഡുകളുടെ പ്രാധാന്യം
ശരിയായ എച്ച്ടിടിപി സ്റ്റാറ്റസ് കോഡുകൾ ഉപയോഗിക്കുന്നത് നന്നായി രൂപകൽപ്പന ചെയ്ത ഒരു റെസ്റ്റ് എപിഐക്ക് അത്യന്താപേക്ഷിതമാണ്. അവ ക്ലയിന്റുകൾക്ക് അവരുടെ അഭ്യർത്ഥനകളുടെ ഫലത്തെക്കുറിച്ച് ഉടനടി, സ്റ്റാൻഡേർഡ് ഫീഡ്ബാക്ക് നൽകുന്നു. അത്യാവശ്യമായ ചിലത് ഇതാ:
200 OK: അഭ്യർത്ഥന വിജയകരമായിരുന്നു (GET, PUT എന്നിവയ്ക്ക് ഉപയോഗിക്കുന്നു).201 Created: ഒരു പുതിയ വിഭവം വിജയകരമായി സൃഷ്ടിച്ചു (POST-ന് ഉപയോഗിക്കുന്നു).204 No Content: അഭ്യർത്ഥന വിജയകരമായിരുന്നു, പക്ഷേ തിരികെ നൽകാൻ ഉള്ളടക്കമൊന്നുമില്ല (പലപ്പോഴും DELETE-ന് ഉപയോഗിക്കുന്നു).400 Bad Request: ഒരു ക്ലയിന്റ് പിശക് കാരണം സെർവറിന് അഭ്യർത്ഥന പ്രോസസ്സ് ചെയ്യാൻ കഴിയില്ല (ഉദാ., തെറ്റായ രൂപത്തിലുള്ള ജെസൺ).401 Unauthorized: അഭ്യർത്ഥിച്ച പ്രതികരണം ലഭിക്കുന്നതിന് ക്ലയിന്റ് സ്വയം പ്രാമാണീകരിക്കണം.403 Forbidden: ഉള്ളടക്കത്തിലേക്ക് ക്ലയിന്റിന് പ്രവേശനാനുമതിയില്ല.404 Not Found: അഭ്യർത്ഥിച്ച വിഭവം സെർവറിന് കണ്ടെത്താൻ കഴിയില്ല.500 Internal Server Error: അഭ്യർത്ഥന നിറവേറ്റുന്നതിൽ നിന്ന് തടഞ്ഞ ഒരു അപ്രതീക്ഷിത അവസ്ഥ സെർവർ നേരിട്ടു.
എപിഐ പതിപ്പ് നിയന്ത്രിക്കൽ (Versioning)
നിങ്ങളുടെ എപിഐ വികസിക്കുമ്പോൾ, മാറ്റങ്ങൾ വരുത്തേണ്ടത് അനിവാര്യമാകും. നിലവിലുള്ള ക്ലയിന്റുകളെ തടസ്സപ്പെടുത്താതിരിക്കാൻ, നിങ്ങളുടെ എപിഐക്ക് പതിപ്പുകൾ നൽകണം. യുആർഎല്ലിൽ പതിപ്പ് നമ്പർ ഉൾപ്പെടുത്തുക എന്നത് സാധാരണവും ലളിതവുമായ ഒരു സമീപനമാണ്.
ഉദാഹരണം: /api/v1/tasks പിന്നീട് /api/v2/tasks.
ഫ്ലാസ്കിൽ ബ്ലൂപ്രിന്റുകൾ ഉപയോഗിച്ച് ഇത് എളുപ്പത്തിൽ കൈകാര്യം ചെയ്യാൻ കഴിയും, അവിടെ എപിഐയുടെ ഓരോ പതിപ്പും അതിന്റേതായ ബ്ലൂപ്രിന്റ് ആയിരിക്കും.
ഫ്ലാസ്ക് എക്സ്റ്റൻഷനുകൾ ഉപയോഗിക്കുന്നു
ഫ്ലാസ്കിന്റെ യഥാർത്ഥ ശക്തി അതിന്റെ വിപുലീകരണ ശേഷിയിലാണ്. പ്രൊഫഷണൽ എപിഐ വികസനത്തിന് ഒഴിച്ചുകൂടാനാവാത്ത ചില എക്സ്റ്റൻഷനുകൾ ഇതാ:
- Flask-SQLAlchemy: ഫ്ലാസ്കിനൊപ്പം SQLAlchemy ഒബ്ജക്റ്റ് റിലേഷണൽ മാപ്പർ (ORM) ഉപയോഗിക്കുന്നത് ലളിതമാക്കുന്ന ഒരു എക്സ്റ്റൻഷൻ, ഇത് ഡാറ്റാബേസ് ഇടപെടലുകൾ സുഗമമാക്കുന്നു.
- Flask-Migrate: Alembic ഉപയോഗിച്ച് SQLAlchemy ഡാറ്റാബേസ് മൈഗ്രേഷനുകൾ കൈകാര്യം ചെയ്യുന്നു, നിങ്ങളുടെ ആപ്ലിക്കേഷൻ മാറുമ്പോൾ ഡാറ്റാബേസ് സ്കീമ വികസിപ്പിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
- Flask-Marshmallow: ഒബ്ജക്റ്റ് സീരിയലൈസേഷനും (സങ്കീർണ്ണമായ ഒബ്ജക്റ്റുകളെ ഡാറ്റാബേസ് മോഡലുകൾ പോലുള്ളവയെ ജെസണിലേക്ക് പരിവർത്തനം ചെയ്യുന്നു) ഡീസീരിയലൈസേഷനും (വരുന്ന ജെസണെ സാധൂകരിക്കുകയും ആപ്ലിക്കേഷൻ ഒബ്ജക്റ്റുകളിലേക്ക് പരിവർത്തനം ചെയ്യുകയും ചെയ്യുന്നു) വേണ്ടി Marshmallow ലൈബ്രറിയെ സംയോജിപ്പിക്കുന്നു.
- Flask-RESTX: റെസ്റ്റ് എപിഐകൾ നിർമ്മിക്കുന്നതിനുള്ള ഒരു ശക്തമായ എക്സ്റ്റൻഷൻ. ഇത് അഭ്യർത്ഥന പാഴ്സിംഗ്, ഇൻപുട്ട് വാലിഡേഷൻ, സ്വാഗർ യുഐ ഉപയോഗിച്ച് സംവേദനാത്മക എപിഐ ഡോക്യുമെന്റേഷന്റെ ഓട്ടോമാറ്റിക് ജനറേഷൻ തുടങ്ങിയ സവിശേഷതകൾ നൽകുന്നു.
ഭാഗം 5: നിങ്ങളുടെ എപിഐ സുരക്ഷിതമാക്കുന്നു
സുരക്ഷിതമല്ലാത്ത ഒരു എപിഐ ഒരു വലിയ ബാധ്യതയാണ്. എപിഐ സുരക്ഷ ഒരു വലിയ വിഷയമാണെങ്കിലും, നിങ്ങൾ പരിഗണിക്കേണ്ട രണ്ട് അടിസ്ഥാന ആശയങ്ങൾ ഇതാ.
പ്രാമാണീകരണം (Authentication)
ഒരു ഉപയോക്താവ് ആരാണെന്ന് സ്ഥിരീകരിക്കുന്ന പ്രക്രിയയാണ് പ്രാമാണീകരണം. സാധാരണ തന്ത്രങ്ങളിൽ ഇവ ഉൾപ്പെടുന്നു:
- എപിഐ കീകൾ: ഒരു ക്ലയിന്റ് ഓരോ അഭ്യർത്ഥനയിലും അയക്കുന്ന ഒരു ലളിതമായ ടോക്കൺ, സാധാരണയായി ഒരു കസ്റ്റം എച്ച്ടിടിപി ഹെഡറിൽ (ഉദാ.,
X-API-Key). - ബേസിക് ഓതന്റിക്കേഷൻ: ക്ലയിന്റ്
Authorizationഹെഡറിൽ ഒരു ബേസ്64-എൻകോഡ് ചെയ്ത ഉപയോക്തൃനാമവും പാസ്വേഡും അയക്കുന്നു. ഇത് എച്ച്ടിടിപിഎസ് വഴി മാത്രമേ ഉപയോഗിക്കാവൂ. - ജെഡബ്ല്യുടി (ജെസൺ വെബ് ടോക്കണുകൾ): ഒരു ആധുനിക, സ്റ്റേറ്റ്ലെസ് സമീപനം. ഇവിടെ ഒരു ക്ലയിന്റ് ക്രെഡൻഷ്യലുകൾ ഉപയോഗിച്ച് പ്രാമാണീകരിച്ച് ഒരു ഒപ്പിട്ട ടോക്കൺ സ്വീകരിക്കുന്നു. ഈ ടോക്കൺ തുടർന്നുള്ള അഭ്യർത്ഥനകളിൽ
Authorizationഹെഡറിൽ അയക്കുന്നു (ഉദാ.,Authorization: Bearer <token>). Flask-JWT-Extended എക്സ്റ്റൻഷൻ ഇതിന് മികച്ചതാണ്.
കോർസ് (ക്രോസ്-ഒറിജിൻ റിസോഴ്സ് ഷെയറിംഗ്)
ഡിഫോൾട്ടായി, വെബ് ബ്രൗസറുകൾ ഒരു സെയിം-ഒറിജിൻ പോളിസി നടപ്പിലാക്കുന്നു, ഇത് ഒരു വെബ് പേജിനെ അത് സെർവ് ചെയ്ത ഡൊമെയ്നിൽ നിന്ന് വ്യത്യസ്തമായ ഒരു ഡൊമെയ്നിലേക്ക് അഭ്യർത്ഥനകൾ നടത്തുന്നതിൽ നിന്ന് തടയുന്നു. നിങ്ങളുടെ എപിഐ api.example.com-ൽ ഹോസ്റ്റ് ചെയ്യുകയും നിങ്ങളുടെ വെബ് ഫ്രണ്ട്എൻഡ് app.example.com-ൽ ആയിരിക്കുകയും ചെയ്താൽ, ബ്രൗസർ അഭ്യർത്ഥനകൾ തടയും. ഒരു ഒറിജിനിൽ പ്രവർത്തിക്കുന്ന ഒരു വെബ് ആപ്ലിക്കേഷന് മറ്റൊരു ഒറിജിനിൽ നിന്നുള്ള തിരഞ്ഞെടുത്ത ഉറവിടങ്ങളിലേക്ക് ആക്സസ് നൽകാൻ ബ്രൗസറുകളോട് പറയാൻ അധിക എച്ച്ടിടിപി ഹെഡറുകൾ ഉപയോഗിക്കുന്ന ഒരു സംവിധാനമാണ് കോർസ്. Flask-CORS എക്സ്റ്റൻഷൻ ഇത് പ്രവർത്തനക്ഷമമാക്കുന്നതും കോൺഫിഗർ ചെയ്യുന്നതും ലളിതമാക്കുന്നു.
ഉപസംഹാരം
റെസ്റ്റിന്റെ അടിസ്ഥാന ആശയങ്ങളിൽ നിന്ന് പൈത്തണും ഫ്ലാസ്കും ഉപയോഗിച്ച് ഒരു സമ്പൂർണ്ണവും പ്രവർത്തനക്ഷമവുമായ ക്രഡ് എപിഐ നിർമ്മിക്കുന്നതിലേക്ക് നിങ്ങൾ ഇപ്പോൾ യാത്ര ചെയ്തിരിക്കുന്നു. നിങ്ങളുടെ എൻവയോൺമെന്റ് സജ്ജീകരിക്കുന്നത്, എൻഡ്പോയിന്റുകൾ ഉണ്ടാക്കുന്നത്, വ്യത്യസ്ത എച്ച്ടിടിപി മെത്തേഡുകൾ കൈകാര്യം ചെയ്യുന്നത്, പ്രോജക്റ്റ് ഘടന, പിശക് കൈകാര്യം ചെയ്യൽ, സുരക്ഷ തുടങ്ങിയ മികച്ച രീതികൾ എന്നിവ നമ്മൾ ചർച്ച ചെയ്തു.
എപിഐ വികസനത്തിന് പൈത്തണും ഫ്ലാസ്കും ശക്തവും എന്നാൽ സമീപിക്കാൻ എളുപ്പമുള്ളതുമായ ഒരു സ്റ്റാക്ക് നൽകുന്നു. ഇതിന്റെ ലാളിത്യം ദ്രുതഗതിയിലുള്ള പ്രോട്ടോടൈപ്പിംഗിന് അനുവദിക്കുന്നു, അതേസമയം അതിന്റെ വഴക്കവും എക്സ്റ്റൻഷനുകളുടെ സമ്പന്നമായ ഇക്കോസിസ്റ്റവും സങ്കീർണ്ണവും, പ്രൊഡക്ഷന് തയ്യാറായതും, വിപുലീകരിക്കാവുന്നതുമായ മൈക്രോസർവീസുകൾ ഉണ്ടാക്കാൻ സഹായിക്കുന്നു, ഇത് ഒരു ആഗോള ഉപയോക്തൃ സമൂഹത്തെ സേവിക്കാൻ കഴിയും. നിങ്ങളുടെ യാത്രയിലെ അടുത്ത ഘട്ടങ്ങളിൽ ഒരു യഥാർത്ഥ ഡാറ്റാബേസ് സംയോജിപ്പിക്കുക, നിങ്ങളുടെ എൻഡ്പോയിന്റുകൾക്കായി ഓട്ടോമേറ്റഡ് ടെസ്റ്റുകൾ എഴുതുക, നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ഒരു ക്ലൗഡ് പ്ലാറ്റ്ഫോമിലേക്ക് വിന്യസിക്കുക എന്നിവ ഉൾപ്പെടാം. നിങ്ങൾ ഇവിടെ നിർമ്മിച്ച അടിത്തറ vữngമുള്ളതാണ്, സാധ്യതകൾ അനന്തമാണ്.