এই প্রবন্ধটি Cato API পরিচয় করায় এবং একটি নমুনা পাইথন অ্যাপ্লিকেশন বিশ্লেষণ করে।
পরিচিতি
Cato API নির্দিষ্টকরণ অনুযায়ী বাস্তবায়িত করা হয়েছে। যদিও GraphQL সহজ ব্যবহারের জন্য API তৈরি করার উদ্দেশ্য, নতুন প্রযুক্তি কিভাবে ব্যবহার করতে হয় তা শেখার জন্য এখনও বিকাশকারীর সময় বিনিয়োগের প্রয়োজন। এই ডকুমেন্টের লক্ষ্য হল এই বিনিয়োগের মাত্রা কমানো এবং একটি ছোট পাইথন অ্যাপ্লিকেশনের মধ্য দিয়ে যাওয়া যা admins Cato API কল সম্পাদন করে এবং শুধু সেই অ্যাকাউন্টের জন্য সংজ্ঞায়িত প্রশাসকদের সংখ্যা প্রদর্শন করে। এই প্রক্রিয়ার মাধ্যমে, পাঠককে একটি Cato GraphQL API অ্যাপ্লিকেশনের সবচেয়ে গুরুত্বপূর্ণ উপাদানগুলির সাথে পরিচয় করানো হয়।
নোটসমূহ:
পাঠক নিম্নলিখিতগুলি সম্পর্কে একটি মৌলিক বোঝাপড়া রাখবেন বলে আশা করা হচ্ছে:
স্ক্রিপ্টিং বা প্রোগ্রামিং (যেমন আপনি ভেরিয়েবল এবং কোড লাইব্রেরির মতো ধারণাগুলির সাথে পরিচিত)
JSON নির্দিষ্টকরণ (যেমন আপনি JSON ডকুমেন্টের সাথে কাজ করেছেন)
নেটওয়ার্কিং (যেমন আপনি জানেন HTTP প্রোটোকল এবং একটি সার্ভার কি)
পাইথন ভাষার কিছু অভিজ্ঞতা সহায়ক হবে, তবে এই প্রবন্ধটি সম্পূর্ণভাবে বোঝা এখনো সম্ভব।
একটি সহজ Cato API অ্যাপ্লিকেশন ঘুরে দেখা
এখানে প্রদর্শিত অ্যাপ্লিকেশনটি পাইথনে লেখা হয়েছে এবং একটি অ্যাকাউন্টের জন্য সংজ্ঞায়িত প্রশাসকদের মোট সংখ্যা পুনরুদ্ধার করতে Cato API admins কল ব্যবহার করে। পাইথন এবং অ্যাডমিনিস্ট্রেটররা API কল নির্বাচন করা হয়েছে কারণ:
পাইথন একটি খুব সাধারণ ভাষা যা পড়তে এবং বুঝতে সহজ
adminsAPI কলটি Cato GraphQL API কলে সহজতম উদাহরণ তৈরি করতে ব্যবহার করা যেতে পারে
নমুনা প্রোগ্রামটি সাধারণ এবং এতে কোন ত্রুটি পরীক্ষার অন্তর্ভুক্ত নয়। এই প্রোগ্রামটি অ্যাকাউন্টের জন্য সংজ্ঞায়িত অ্যাডমিনিস্ট্রেটরদের মোট সংখ্যা মুদ্রণ করে।
দ্রষ্টব্য:
নোট: Cato API কোনও নির্দিষ্ট প্রোগ্রামিং ভাষার সাথে আবদ্ধ নয়। HTTP POST ফাংশন ব্যবহার এবং JSON ডকুমেন্ট প্রক্রিয়াকরণ করতে পারে এমন কোন ভাষা ব্যবহার করে অ্যাপ্লিকেশন বাস্তবায়ন করা সম্ভব।
নমুনা প্রোগ্রামের ওভারভিউ
এই নমুনা প্রোগ্রামটি ছোট এবং এটি কোনও সিদ্ধান্ত গ্রহণের লজিক বা ক্রিয়া পুনরাবৃত্তির কোড অন্তর্ভুক্ত করে না। কোডের কিছু লাইন একটি লাইনে মিশ্রিত করে এটি আরও ছোট রাখা যেতে পারত। প্রকৃতপক্ষে কি ঘটছে তা ব্যাখ্যা করা সহজ করার জন্য অতিরিক্ত কোড লাইন অন্তর্ভুক্ত করা হয়েছে।
# পাইথন লাইব্রেরি কোড ইনপোর্ট করুন
import os
import urllib.request
import ssl
import json
# পরিবেশতথ্য থেকে Cato API কী প্রাপ্ত করুন
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))গুরুত্বপূর্ণ!
এই প্রোগ্রামটি পাইথনের মাধ্যমে Cato API-তে অ্যাক্সেস করার একটি প্রদর্শনী হিসেবে সরবরাহ করা হয়েছে। এটি কোনও আনুষ্ঠানিক Cato রিলিজ নয় এবং কোন সমর্থনের গ্যারান্টির সাথে সরবরাহ করা হয় না। ত্রুটি হ্যান্ডলিং API সহ কাজ করার জন্য শুধুমাত্র ন্যূনতম প্রয়োজনীয়তার জন্য সীমাবদ্ধ, এবং প্রোডাকশন পরিবেশের জন্য যথেষ্ট নাও হতে পারে।
যেকোন প্রশ্ন বা প্রতিক্রিয়া api@catonetworks.com-এ পাঠানো উচিত।
নীচে প্রদত্ত চিত্রটি দেখায় প্রোগ্রামটি চালানোর সময় কি ঘটছে তার ক্রম:
প্রোগ্রামটি একটি JSON ডকুমেন্ট তৈরি করে যা Cato API GraphQL সার্ভারে পাঠানো হয়।
Cato API GraphQL সার্ভার যাচাই করে যে JSON ডকুমেন্টে সংজ্ঞায়িত API কলটি সঠিক এবং Cato সেবা থেকে অনুরোধকৃত ডেটা প্রাপ্ত করে।
Cato API GraphQL সার্ভার প্রোগ্রামটিতে JSON ফাইল আকারে ডেটা ফেরত দেয়।
|
পাইথন লাইব্রেরি কোড ইনপোর্ট করা
উদাহরণ প্রোগ্রামের জন্য পাইথন ব্যবহার করার একটি কারণ হল সমৃদ্ধ লাইব্রেরির সেটের প্রাপ্যতা। এই লাইব্রেরিগুলি ফাংশন এবং বস্তু প্রদান করে যা বিস্তৃত কাজগুলি সামলাতে পারে। প্রতিটি ইনপোর্ট করা লাইব্রেরির মাধ্যমে আমরা যাব এবং কেন এটি প্রয়োজন তা ব্যাখ্যা করার জন্য নোট প্রদান করব।
import osos লাইব্রেরি একটি ফাংশন প্রদান করে যা কোডকে অপারেটিং সিস্টেমের পরিবেশ চলিছিত্রগুলিতে অন্তর্ভুক্ত ডেটা অ্যাক্সেস করতে দেয়।
import urllib.requesturllib লাইব্রেরি থেকে
অনুরোধমডিউলঅনুরোধশ্রেণী সংজ্ঞায়িত করে যা ইউআরএল এর মাধ্যমে অ্যাক্সেসপ্রাপ্ত দূরবর্তী সার্ভারগুলির সাথে যোগাযোগ পরিচালনা করতে পারে।এটি Cato API অনুরোধ Cato GraphQL API সার্ভারে প্রেরণ করা সম্ভব করবে
import sslssl লাইব্রেরি Cato GraphQL API সার্ভারে প্রেরিত অনুরোধের জন্য একটি কাস্টম অনাকাঙ্ক্ষিত প্রসঙ্গ তৈরি করার জন্য প্রয়োজনীয়।
import jsonএই লাইব্রেরিটি ফাংশনগুলির অন্তর্ভুক্ত যা একটি পাইথন অভিধানকে JSON স্ট্রিং এবং বিপরীতভাবে রূপান্তরিত করতে সক্ষম করে।
দুটি ভিন্ন ফরম্যাটের মধ্যে রূপান্তর করার এই ক্ষমতা JSON ডকুমেন্টের সাথে কাজ করতে কোড সহজ করে তোলে।
Cato API কী প্রাপ্ত করা
এই লাইনের কোড পরিবেশ চলিছিত্র থেকে API কী পড়তে এবং একটি চলিছিত্রে বরাদ্দ করতে getenv লাইব্রেরি ফাংশনটি ব্যবহার করে।
cato_api_key = os.getenv("CATO_API_KEY")Cato GraphQL সার্ভার একটি HTTP হেডারে এই কী পেতে প্রত্যাশা করে। JSON ডকুমেন্টে কী প্রদান করা হয় না কারণ GraphQL নির্দিষ্টকরণে প্রমাণীকরণ মান হিসাবে অন্তর্ভুক্ত নয়। JSON ডকুমেন্টে প্রমাণীকরণ অন্তর্ভুক্ত করা নির্দিষ্টকরণের লঙ্ঘন হবে। Cato ম্যানেজমেন্ট অ্যাপ্লিকেশন মাধ্যমে Cato API কী তৈরি করা হয়। API কী তৈরি করার আরও তথ্যের জন্য দেখুন Cato API-এর জন্য API কী তৈরি করা।
সতর্কতা!
যদিও আপনি আপনার কোডের মধ্যে Cato API কী স্থির করতে পারেন, এটি অত্যন্ত সুপারিশ করা হয় যে এটি না করা হয়।
পাঠানোর জন্য GraphQL অনুরোধ তৈরি করা
কোডের পরবর্তি কয়েকটি লাইনে একটি পাইথন ডিরেক্টরি তৈরি করা হয় যা একটি কী/মান যুগল অন্তর্ভুক্ত করে। নিবন্ধটির মান একটি পাইথন বহু-লাইন স্ট্রিং ব্যবহার করে তৈরি করা হয় যা গ্রাফিকQL সার্ভারে পাঠানো হবে এমন অনুরোধ সংজ্ঞায়িত করে।
get_total_admins = '''{
admins (accountID: 12345) {
total
}
}'''
graphql_query = {'query': get_total_admins}Cato GraphQL সার্ভার এই স্ট্রিংটি দ্বারা নির্দেশ করবে: get_total_admins ফাংশনটি সম্পাদন করুন, এটিতে দুটি যুক্তি পাস করে (accountID এবং type) এবং শুধুমাত্র সংস্থার "মোট" সংখ্যা ফেরত দেয়। অথবা সরাসরি বলা যায়, "উদাহরণ অ্যাকাউন্ট # 12345 এর জন্য সংজ্ঞায়িত অ্যাডমিনিস্ট্রেটরদের মোট সংখ্যা ফেরত দেয়।" অ্যাডমিনিস্ট্রেটররা API কলের এই নির্দিষ্ট উদাহরণটি একটি গ্রাফQL API-এর একটি গুরুত্বপূর্ণ সুবিধা নির্দেশ করে।
সার্ভার শুধুমাত্র সেই ডেটা ফেরত দেয় যা অ্যাপ্লিকেশন অনুরোধ করেছিল।
বাস্তবতা হল, অ্যাডমিনিস্ট্রেটররা কলটি অনেক বেশি ডেটা ফেরত দিতে পারে। উদাহরণস্বরূপ, কোনও অ্যাপ্লিকেশনকে অ্যাডমিনিস্ট্রেটররা প্রতিটি অ্যাডমিনের বিবরণ ফেরত দিতে অনুরোধ করতে পার���। তবে, এই অ্যাপ্লিকেশনটির শুধুমাত্র অ্যাডমিনিস্ট্রেটরদের মোট সংখ্যা জানতে হবে। GraphQL-এর এই বৈশিষ্ট্যটি "অতিরিক্ত সংগ্রহ" হিসেবে পরিচিত বিষয়টিকে এড়িয়ে যায় এবং অ্যাপ্লিকেশনটি বাস্তবায়ন করার জন্য প্রয়োজনীয় কোডকে উল্লেখযোগ্যভাবে সহজ করতে পারে।
HTTP অনুরোধ তৈরি করা
প্রোগ্রামের এই অংশে একটি অনুরোধ অবজেক্ট কনস্ট্রাক্ট করা হয়। এই অবজেক্টটি HTTPS ব্যবহার করে গ্রাফিকএল সার্ভারে API কল প্রেরণের জন্য ব্যবহার করা হবে। এই অনুরোধ অবজেক্টটিকে এমন তথ্য প্রয়োজন যা অন্যান্য বেশ কয়েকটি অবজেক্ট দ্বারা সরবরাহ করতে হবে যা প্রথমে নির্মিত হতে হবে। প্রথমে একটি সাধারণ স্ট্রিং অবজেক্ট তৈরি করা হয় যাতে GraphQL সার্ভারের URL থাকে যেটি অনুরোধ অবজেক্ট কল প্রেরণ করবে।
cato_api_url = "https://api.catonetworks.com/api/v1/graphql2"নোট:
নোট: A GraphQL API সমস্ত API কলের জন্য কেবল একটি URL ব্যবহার করে। কলের বিস্তারিত যেমন যুক্তি JSON ডকুমেন্টে প্রদান করা হয়। এটি একটি REST API-র বিপরীতে যা প্রতিটি API কলের জন্য একটি ভিন্ন URL ব্যবহার করবে এবং URL-এ যুক্তিগুলি সংযুক্ত করে কলটিতে যুক্তি পাস করবে। একটি URL ব্যবহার করা যা যুক্তিগুলির সাথে জটিল হয় না তা একটি GraphQL API-এর আরেকটি সুবিধা।
পরবর্তীতে দুটি 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 API কল ধারণকারী পাইথন অভিধানকে একটি স্ট্রিংয়ে রূপান্তর করে এবং সেই স্ট্রিংটিকে বাইটে এনকোড করে। স্ট্রিংটিকে নেটওয়ার্কের মাধ্যমে প্রেরিত করার অনুমতি দেওয়ার জন্য দ্বিতীয় ধাপ প্রয়োজন।
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ফাংশন কল করা একটি ত্রুটির উৎপন্ন হতে পারে। উদাহরণস্বরূপ, JSON ডকুমেন্টে সংজ্ঞায়িত API কলটি অপ্রত্যাশিত হওয়ার কারণে GraphQL সার্ভার অনুরোধটি প্রত্যাখ্যান করতে পারে অথবা নেটওয়ার্ক সমস্যার কারণে একটি টাইমআউট হতে পারে (অর্থাৎ 30 সেকেন্ডের পরে কোনো প্রতিক্রিয়া নেই)। এই ত্রুটিগুলি এখানে পরিচালনা করা হয়নি।
urlopen ফাংশন দ্বারা ফেরত দেওয়া অবজেক্টটিতে একটি বডি ক্ষেত্র রয়েছে যা সার্ভার দ্বারা ফেরত দেওয়া JSON ডকুমেন্টটি ধারণ করে। এটি read পদ্ধতি কল করে অবজেক্ট থেকে অপসারণ করা যেতে পারে এবং একটি স্ট্রিং অবজেক্টে রূপান্তরিত করা যাবে। অবশেষে এই বাইট অবজেক্টটি ডিকোড পদ্ধতি কল করে একটি স্ট্রিং অবজেক্টে রূপান্তরিত করা হবে।
json_response_encoded = response.read()
json_response = json_response_encoded.decode()এই ডিকোড করা স্ট্রিংটি একটি JSON ডকুমেন্ট রয়েছে যা দেখতে এরকম হবে:
{
"data" : {
"admins" : {
"total": 4
}
}
}আপনি দেখবেন, ফেরত আসা ডেটার বিন্যাসটি সার্ভারে পাঠানো অনুরোধের বিন্যাসের মত দেখাচ্ছে। এটি ইচ্ছাকৃত এবং এটি API বাস্তবায়নের জন্য GraphQL স্পেসিফিকেশন ব্যবহার করার আরেকটি সুবিধা। এই পদ্ধতিটি ডেটাকে অনুরোধের একই আকারে রেখে অ্যাপ্লিকেশনের কোডিং সহজ করে।
এই প্রোগ্রামের অংশের শেষ কোড লাইনটি ফেরত পাওয়া JSON স্ট্রিংটিকে পাইটন নেস্টেড ডিকশনারিতে রূপান্তর করতে json লাইব্রেরি ফাংশন 'loads' ব্যবহার করে।
get_total_admin_result = json.loads(json_response)ফেরত পাওয়া ডেটা থেকে টোটাল বের করা এবং এটি প্রিন্ট করা
কোডের শেষ দুটি লাইন সার্ভার দ্বারা ফেরত আনা total ক্ষেত্র থেকে মানটি বের করে এবং এটি কনসোলে মুদ্রণ করে।
total = get_total_admins_result['data']['get_total_admins']['total']
print('আপনার অ্যাকাউন্টের জন্য সংজ্ঞায়িত মোট প্রশাসক সংখ্যা হল: {}'.format(total)) আউটপুটটি এরকম দেখাবে:
আপনার অ্যাকাউন্টের জন্য সংজ্ঞায়িত মোট প্রশাসক সংখ্যা হল: 4সারাংশ
এই নথির লক্ষ্যটি পাঠককে দেখানোর জন্য কত সহজে ক্যাটো API ব্যবহার করা যায়। কেটো API সম্পর্কে বিস্তৃত বিবরণ অন্তর্ভুক্ত করা হয়নি এবং ত্রুটি পরিচালনা করার জন্য কোনও কোড লেখা হয়নি। পরিবর্তে, একটি সহজ পাইটন প্রোগ্রাম ব্যবহার করা হয়েছে Cato API অ্যাপ্লিকেশনের সবচেয়ে গুরুত্বপূর্ণ উপাদানগুলি তুলে ধরার জন্য। এগুলো হল:
একটি ক্যাটো API কল তৈরি করা এবং এটি একটি JSON ডকুমেন্টে যোগ করা
ক্যাটো API কী প্রাপ্ত করা
ক্যাটো API কী ধারণকারী এবং পাঠানো ডেটার বিন্যাস (JSON) নির্ধারণকারী HTTP হেডার তৈরি করা
HTTP POST কমান্ড ব্যবহার করে ক্যাটো GraphQL API সার্ভারে (বাইটে এনকোড করা) JSON ডকুমেন্ট প্রেরণ করা (TLS দিয়ে এনক্রিপ্ট করা হয়েছে)
সার্ভার দ্বারা ফেরত পাঠানো প্রতিক্রিয়া অবজেক্টকে একটি JSON ডকুমেন্টে রূপান্তর করা
JSON ডকুমেন্টকে এমন একটি বিন্যাসে রূপান্তর করা যা প্রোগ্রামের দ্বারা ব্যবহৃত হতে পারে
