পাইথনে একটি অ্যাপ্লিকেশন বিল্ড করার সময়, এমন সময় আসতে পারে যখন আপনি একটি থার্ড-পার্টি সার্ভিসের সাথে কানেক্ট করতে চান। উদাহরণস্বরূপ, আপনি যদি একটি ফিটনেস টুল বিল্ড করেন তবে আপনি Fitbit API-এর সাথে কানেক্ট করতে চাইতে পারেন যাতে আপনার এক্সারসাইজ ডেটা দেখতে পান; একটি অ্যাপ যা টেক্সট মেসেজ পাঠাতে পারে সেটি Twilio API-র সাথে কানেক্ট করতে পারে।
পাইথনে, requests লাইব্রেরি আপনাকে রিকোয়েস্ট করার অনুমতি দেয় যাতে আপনি থার্ড-পার্টি ওয়েব সার্ভিসকে আপনার অ্যাপ্লিকেশনের সাথে কানেক্ট করতে পারেন। এই গাইডে, আমরা পাইথন requests লাইব্রেরি এবং কীভাবে আপনি এটি ব্যবহার করে HTTP রিকোয়েস্ট পাঠাতে পারেন সেটি শিখব।
ওয়েব রিকোয়েস্ট: একটি রিফ্রেশার
রিকোয়েস্ট ইন্টারনেটের কেন্দ্রে আছে। যখন আপনি এই আর্টিকেলে ক্লিক করলেন, একটি HTTP রিকোয়েস্ট Career Karma সার্ভারে পাঠানো হয়েছে। সেই রিকোয়েস্ট আমাদের সার্ভারকে বোঝাতো আপনি কোন ওয়েব পেজ দেখতে চান যাতে আমাদের সার্ভার পেজটি খুঁজে বের করতে পারে। একবার ওয়েব পেজটি পাওয়া গেলে, আমাদের ওয়েব সার্ভার সেটি আপনার ব্রাউজারের কাছে রিটার্ন করল। এই প্রসেস আপনাকে এই টিউটোরিয়াল দেখতে দেয়।
ওয়েব রিকোয়েস্ট অনেক রকমের হয়। আপনি এই ওয়েব পেজ দেখতে যে টাইপের রিকোয়েস্ট করেছেন সেটি GET রিকোয়েস্ট বলা হয়। এই টাইপের রিকোয়েস্ট আপনাকে ডেটা রিট্রিভ করতে দেয়। অন্যান্য টাইপের রিকোয়েস্ট আছে যেমন POST এবং PUT, যেগুলো সার্ভারে রিসোর্স মডিফাই করতে ব্যবহার হয়। এই টিউটোরিয়ালের উদ্দেশ্যে, আমরা GET এবং POST রিকোয়েস্টের ওপর ফোকাস করব।
Requests ইনস্টল কীভাবে করবেন
Requests হলো পাইথনের HTTP লাইব্রেরি যা আপনাকে ওয়েব রিকোয়েস্ট করার অনুমতি দেয়।
পাইথন ব্যবহার করে ওয়েব রিকোয়েস্ট করার আগে, আমাদের পাইথন requests কোড লাইব্রেরি ইনস্টল করতে হবে। আমরা নিচের কমান্ড ব্যবহার করে এটি করতে পারি:
pip install requests
এখন যেহেতু আমরা পাইথন প্যাকেজ ডাউনলোড করেছি, আমরা একটি ওয়েব রিকোয়েস্ট করার জন্য রেডি।
GET রিকোয়েস্ট কীভাবে করবেন
আপনি যে সবচেয়ে কমন টাইপের ওয়েব রিকোয়েস্ট করবেন সেটি GET রিকোয়েস্ট। এই টাইপের রিকোয়েস্ট আপনাকে সার্ভার থেকে ডেটা রিট্রিভ করতে দেয়।
ধরি আমরা একটি অ্যাপ বানাচ্ছি যা আপনাকে ক্যাট ফ্যাক্টস (বিড়ালের তথ্য) এর একটি লিস্ট রিট্রিভ করতে দেবে। এতে করতে, আমরা cat-facts নামক একটি API ব্যবহার করব। এই API পাবলিকলি ওপেন, তাই আমাদের সাইন ইন করার জন্য কোনো ক্রেডেনশিয়াল দরকার নেই। আমরা API-তে রিকোয়েস্ট করার জন্য নিচের কোড ব্যবহার করতে পারি:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.status_code)
এই কোড রিটার্ন করল: 200। আমাদের কোড ব্রেক ডাউন করি।
প্রথম লাইনে, আমরা requests লাইব্রেরি ইম্পোর্ট করেছি। এই অনুমতিত আমাদের requests লাইব্রেরি এক্সেস করতে দিল যা আমরা আমাদের টিউটোরিয়ালে ব্যবহার করব। তারপর আমরা requests.get() মেথড ব্যবহার করেছি একটি ওয়েব রিকোয়েস্ট করতে। আমরা .put() বা .post() মেথডও ব্যবহার করতে পারতাম অন্য টাইপের রিকোয়েস্ট করার জন্য, কিন্তু এই কেসে আমাদের ক্যাট-ফ্যাক্টস API থেকে শুধু ডেটা রিট্রিভ করতে হয়েছিল।
পরবর্তী, আমরা আমাদের ওয়েব রিকোয়েস্টের স্ট্যাটাস কোড প্রিন্ট করেছি। নম্বর ২০০ রিটার্ন হয়েছে, যেটি বোঝালো আমাদের ওয়েব রিকোয়েস্ট সফলভাবে করা হয়েছে। এই নম্বরগুলো কী বোঝায় সেটি আমরা টিউটোরিয়ালের পরে আলোচনা করব।
একটি রিকোয়েস্ট ভিউ করা
উপরের উদাহরণে, আমরা আমাদের রিকোয়েস্টের স্ট্যাটাস কোড প্রিন্ট করেছি। কিন্তু আমরা কীভাবে রিট্রিভ করা ডেটা দেখব? ক্যাট ফ্যাক্টসগুলো কোথায়? সেটি হলো .text এবং .json() মেথড।
টেক্সট রেসপন্স ভিউ করা
আমরা আমাদের ওয়েব রিকোয়েস্টের রেজাল্ট দেখতে .text মেথড ব্যবহার করতে পারি:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
print(res.text)
এই কোড ক্যাট ফ্যাক্টসের একটি লিস্ট রিটার্ন করল। কিন্তু, এটি আমাদের জন্য খুব প্র্যাক্টিক্যাল নয় কারণ আমরা যে ডেটা কোয়েরি করছি সেটি একটি API। যদিও এখন আমাদের কাছে ক্যাট ফ্যাক্টসের একটি পাইথন লিস্ট আছে, সেটি প্লেইন টেক্সট হওয়ায় সেগুলো পড়া কঠিন।
JSON রেসপন্স ভিউ করা
আমাদের ক্যাট ফ্যাক্টস সংরক্ষণের জন্য একটি আরও উপকারী ফরম্যাট হলো JSON। আমরা আমাদের রিকোয়েস্ট থেকে JSON ডেটা রিট্রিভ করতে এই কোড ব্যবহার করতে পারি:
print(res.json())
আমাদের কোড ক্যাট ফ্যাক্টসের একটি লম্বা লিস্ট রিটার্ন করে। লিস্টের প্রথম রেকর্ড:
{'_id': '58e009550aac31001185ed12', 'text': 'The oldest cat video on YouTube dates back to 1894.', 'type': 'cat', 'user': {'_id': '58e007480aac31001185ecef', 'name': {'first': 'Kasimir', 'last': 'Schulz'}}, 'upvotes': 6, 'userUpvoted': None}
সাফল্য! আমরা আমাদের ক্যাট ফ্যাক্টসের লিস্ট রিট্রিভ করলাম।
POST রিকোয়েস্ট কীভাবে করবেন
আপনি requests লাইব্রেরি ব্যবহার করে POST রিকোয়েস্টও করতে পারেন। এটি আপনাকে ওয়েব সার্ভারে সংরক্ষিত ডেটা মডিফাই করতে দেয়।
এই উদাহরণের জন্য, আমরা Airtable API ব্যবহার করব। কারণ আমাদের একটি API দরকার যা POST রিকোয়েস্ট সাপোর্ট করে এবং cat-facts API রিড-অনলি।
ধরি আমাদের একটি ডেটাবেস আছে যেখানে আমরা আমরা পিয়ে যাওয়া সকল চা কাপের রেকর্ড রাখি। আমরা ঠিক এখন আর এক কাপ চা পিয়েছি এবং আমরা সেটি ডেটাবেসে যোগ করতে চাই। আমরা নিচের কোড ব্যবহার করে এটি করতে পারি:
import requests
headers = {
'Authorization': 'Bearer API_KEY',
'Content-Type': 'application/json',
}
data = '{"records": [{"fields": {"Drink": "Black Decaf Tea"}}]}'
res = requests.post('https://cat-fact.herokuapp.com/facts', headers=headers, data=data)
print(res.json())
আমাদের কোড রিটার্ন করল:
{'records': [{'id': 'recqUEPuXEAXaNl1L', 'fields': {'Drink': 'Black Decaf Tea', 'Date': '2020-06-16T08:53:02.000Z'}, 'createdTime': '2020-06-16T08:53:02.000Z'}]}
এটি বোঝাচ্ছে আমাদের HTTP রিকোয়েস্ট সফল হয়েছে। আমরা Airtable ডেটাবেসে তাদের API ব্যবহার করে একটি রেকর্ড যোগ করলাম। চলুন এই কোড লাইনগুলো আরও আলোচনা করি।
প্রথমে, আমরা requests লাইব্রেরি ইম্পোর্ট করেছি যাতে আমরা আমাদের কোডে HTTP রিকোয়েস্ট করতে পারি।
তারপর, আমরা একটি ডিকশনারি ডিফাইন করেছি যাতে দুটি কী এবং ভ্যালু আছে: একটি যেটি আমাদের অথেন্টিকেশন কী সংরক্ষণ করে এবং অন্যটি যে কন্টেন্ট টাইপ স্পেসিফাই করে যা আমরা ওয়েব সার্ভারে পাঠাচ্ছি। এগুলো হলো হেডারগুলো যেগুলো Airtable API-তে রিকোয়েস্ট করতে প্রয়োজন।
পরবর্তী, আমরা data নামে একটি ভেরিয়েবল ডিক্লেয়ার করেছি যেটি আমাদের POST রিকোয়েস্টের সাথে পাঠানো ডেটা সংরক্ষণ করে। এই কেসে, আমরা আমাদের ডেটাবেসে "Black Decaf Tea" নামে একটি ড্রিংক যোগ করছি। তারপর আমরা requests.post() মেথড ব্যবহার করেছি এবং আমাদের হেডার এবং ডেটা প্যারামিটার হিসেবে স্পেসিফাই করেছি, যাতে আমরা Airtable API-তে একটি POST রিকোয়েস্ট করতে পারি।
অবশেষে, আমরা আমাদের রিকোয়েস্টের রেজাল্ট JSON ফরম্যাটে প্রিন্ট করেছি res.json() ব্যবহার করে।
HTTP স্ট্যাটাস কোড
HTTP প্রোটোকল একটি ইউনিক স্ট্যাটাস কোড রিটার্ন করে যখন আপনি একটি ওয়েব রিকোয়েস্ট করেন। এটি আপনাকে দেখতে দেয় আপনার ওয়েব রিকোয়েস্ট সফল হয়েছে কিনা অথবা কোনো এরর হয়েছে কিনা। আপনি সম্ভবত ইতিমধ্যে কয়েকটি দেখেছেন, যেমন 404।
পাইথন requests দিয়ে রিকোয়েস্ট করার সময় আপনি যেসব স্ট্যাটাস কোড এনকাউন্টার করতে পারেন তার একটি রেফারেন্স লিস্ট:
- 1XX: ইনফরমেশন
- 2XX: রিকোয়েস্ট সফলভাবে করা হয়েছে
- 3XX: রিকোয়েস্ট রিডাইরেক্ট করা হয়েছে
- 4XX: ক্লায়েন্ট-সাইড এরর
- 5XX: সার্ভার-সাইড এরর
এই স্ট্যাটাস কোডগুলো জানা আমাদের প্রোগ্রামে ডিবাগিং যোগ করতে সাহায্য করে। GET রিকোয়েস্ট উদাহরণ নিই cat-facts API থেকে। ধরুন আমরা একটি মেসেজ প্রিন্ট করতে চাই যদি আমরা যে রিসোর্স অ্যাক্সেস করছি সেটি পাওয়া না যায়। আমরা নিচের কোড ব্যবহার করে এটি করতে পারি:
import requests
res = requests.get('https://cat-fact.herokuapp.com/facts')
if res.status_code == 200:
print("Success")
else:
print("Error")
আমাদের কোড রিটার্ন করল: Success। কারণ আমাদের রিকোয়েস্টের স্ট্যাটাস কোড ২০০, "Success" মেসেজ কনসোলে প্রিন্ট হয়েছে। কিন্তু, যদি আমাদের রিকোয়েস্ট ফেইল হত - উদাহরণস্বরূপ, আমরা একটি ইনভেলিড URL স্পেসিফাই করতাম - তবে "Error" মেসেজ কনসোলে প্রিন্ট হত।
উপসংহার
পাইথন requests লাইব্রেরি আপনাকে পাইথনে HTTP রিকোয়েস্ট করার অনুমতি দেয়। এই গাইডে, আমরা আলোচনা করেছি কীভাবে পাইথন requests লাইব্রেরি GET এবং POST রিকোয়েস্ট করার জন্য ব্যবহার করা হয়, কিন্তু আপনি লাইব্রেরি ব্যবহার করে PUT এবং DELETE রিকোয়েস্টও করতে পারেন।
যখন আপনি requests.get() বা requests.post() মত একটি মেথড ব্যবহার করেন, পাইথন আপনি যে ওয়েব রিসোর্স অ্যাক্সেস করতে চান সেটির সাথে একটি রিকোয়েস্ট করে। আপনি আপনার রিকোয়েস্টের সাথে হেডার এবং ডেটা আট্যাচ করতে পারেন, যাতে আপনি আপনার দখলের একটি ওয়েব রিসোর্সে চেঞ্জ আনতে চাইলে ইনফরমেশন পাঠাতে পারেন।
এখন আপনি পাইথন requests লাইব্রেরি এক্সপার্টের মতো ব্যবহার শুরু করতে পারেন!