মডার্ন ওয়েব টেকনোলজির যুগে আপ্লিকেশন ডেভেলপমেন্টের সময় আমাদের বিভিন্ন ধরনের API ব্যাবহার করতে হয়। হতে পারে সেটা আবহাওয়ার উপডেট দেবার API অথবা হতে পারে কাস্টমারকে মেসেজ পাঠানোর API.
সার্ভিসের উপর ডিপেন্ড করে বিভিন্ন ভেন্ডর বিভিন্ন ভাবে API ডিজাইন করে থাকে। সাধারণত API এর কাজের উপর ভিত্তি করে API কোন মেথডে কল করবো তা নির্ধারিত হয়ে থাকে। যেমন API থেকে ডাটা তুলে আনার জন্য GET মেথডে কল করা হয়। এছাড়া ডাটা পাঠানোর জন্য POST মেথড, ডাটা আপডেট করার জন্য PUT মেথড ও ডাটা মুছে ফেলার জন্য DELETE মেথড ব্যাবহার করা হয়। একটা API কোন মেথডে কল করা হবে তা API Documentation-এ বলা থাকে।
API এর আরেকটি গুরুত্বপূর্ণ পার্ট হলো অথেনটিকেশন। API কে সিকিউরড করার জন্য বিভিন্ন ধরনের অথেনটিকেশন মেকানিজম ইমপ্লিমেন্ট করা থাকে। যেমন API Key, Basic Authentication, Bearer Token, OAuth ইত্যাদি।
একটা API কে কল করার পর যে সব ডাটা রিটার্ন তাকে রেসপন্স বলে। মডার্ন API গুলাতে সাধারণত JSON ফরম্যাটে রেসপন্স রিটার্ন করে। এছাড়া কিছু কিছু API থেকে XML ফরম্যাটেও রেসপন্স রিটার্ন করে।
Oracle APEX – এ API রিলেটেড কাজ করার করার জন্য APEX_WEB_SERVICE প্যাকেজ ব্যাবহার করা হয়। APEX_WEB_SERVICE এর বেশ কিছু সাব প্রোগ্রাম আছে এর মধ্যে MAKE_REST_REQUEST ফাংশন দিয়ে API কল করা হয়। আসুন প্রথমে MAKE_REST_REQUEST ফাংশন কি কি প্যারামিটার গ্রহন করে তা দেখে নেই –
Parameter | Description |
---|---|
p_url | API এর ওয়েব এড্রেস |
p_http_method | API এর রিকুয়েস্ট মেথড, GET, POST, PUT, DELETE etc. |
p_username | বেসিক অথেনটিকেশন এর ইউজার নেম |
p_password | বেসিক অথেনটিকেশন এর পাসওয়ার্ড |
p_scheme | The authentication scheme, Basic (default) or AWS or Digest or OAUTH_CLIENT_CRED if supported by your database release. |
p_proxy_override | The proxy to use for the request. The proxy supplied overrides the proxy defined in the application attributes. |
p_transfer_timeout | রেস্পন্সের জন্য কতক্ষণ অপেক্ষা করবে |
p_body | API দিয়ে পাঠানো রিকুয়েস্ট বডি |
p_body_blob | API দিয়ে পাঠানো ফাইল |
p_parm_name | URL-এ উল্লেখিত প্যারামিটার এর নাম |
p_parm_value | URL-এ উল্লেখিত প্যারামিটার এর ভ্যালু |
p_wallet_path | SSL সার্টিফিকেট যুক্ত API কে কল করার জন্য ওয়ালেট ক্রিয়েট করতে হয়, সেই ওয়ালেট এর লোকেশন |
p_wallet_pwd | ওয়ালেট এর পাসওয়ার্ড |
p_https_host | The host name to be matched against the common name (CN) of the remote server’s certificate for an HTTPS request. |
p_credential_static_id | APEX এর শেয়ার কম্পোনেন্ট থেকে Web Credentials ইউজ করলে তার স্ট্যাটিক আইডি |
p_token_url | টোকেন বেজড অথেনটিকেশন ইউজ করলে, যে URL থেকে টোকেন জেনারেট করবে তার URL |
এতক্ষণ আমি একটা API এর বেসিক স্ট্রাকচার নিয়ে আলোচনা করেছি, চলুন এখন একটা উদাহরণ দিয়ে বুঝার চেষ্টা করে দেখি। বলে রাখা ভালো, সার্ভিসের উপর ডিপেন্ড করে API গুলো বিভিন্ন ধরনের হয়ে থাকে তাই একটা উদাহরণ দিয়ে আসলে সব API কল করার পদ্ধতি বুঝানো সম্ভব নয়। আমি এখানে যে উদাহরণটা দিয়েছি তা দিয়ে ম্যাক্সিমাম প্যারামিটার কভার করার চেষ্টা করেছি –
DECLARE
l_response_clob CLOB;
l_rest_url VARCHAR2(2000) := 'https://example.com/signedurl';
l_request_body CLOB;
l_file BLOB;
l_signed_url VARCHAR2(1000);
l_tags VARCHAR2(500);
BEGIN
-- Build JSON Payload
l_request_body := '{"bucket_name :"shsshsh",
"file_path":"images/DEV/Jobs/",
"file_name":"ShippedReport.xlsx",
"expiration_seconds":360
}';
-- Set header value
apex_web_service.g_request_headers(1).name := 'Content-Type';
apex_web_service.g_request_headers(1).value := 'application/json';
apex_web_service.g_request_headers(2).name := 'x-api-key';
apex_web_service.g_request_headers(2).value := 'dsjhdjsfhdfhgjkfd';
-- Make API call
l_response_clob := apex_web_service.make_rest_request(
p_url => l_rest_url,
p_http_method => 'POST',
p_body => l_request_body,
p_parm_name => apex_string.string_to_table('appid:format',':'),
p_parm_value => apex_string.string_to_table('xyz:xml',':'),
p_wallet_path => 'file:/wallets/aws_apig/',
p_wallet_pwd => 'dhjsfhjdfh'
);
-- Check HTTP status code
dbms_output.put_line ('Code : '||apex_web_service.g_status_code);
-- Parse the JSON response to get response value
APEX_JSON.PARSE(l_response_clob);
l_signed_url := APEX_JSON.GET_VARCHAR2(p_path => 's3signedurl');
dbms_output.put_line ('URL : '||l_signed_url);
END;
উপরের উদাহরণ প্রথমে JSON ডাটা রেডি করেছি যা API দিয়ে পাঠাবো। এরপর হেডারে কিছু ভ্যালু সেট করেছি, প্রথমে কন্টেন্ট টাইপ বলে দিয়েছি যে আমি JSON ভ্যালু পাঠাবো এবং দ্বিতীয় ভ্যালু দিয়ে API key সেট করেছি। হেডার ভ্যালু সেট হয়ে গেলে এরপর ফাইনালি API কে কল করেছি। API -এ মাল্টিপল প্যারামিটার থাকলে টেবিল অ্যারে হিসাবে পাঠাতে হয়। এ জন্য APEX-এর string_to_table ফাংশন ব্যাবহার করেছি। সব শেষে URL টা যেহেতু SSL সার্টিফিকেট দিয়ে সিকিউর্ড সেজন্য ওরাকল wallet ব্যাবহার করেছি। ওরাকল wallet কিভাবে তৈরি করতে হয় তা আরেকটি পোস্ট-এ দেখিয়ে দিব।
Note: যেকোনো ওয়েব রিকুয়েস্ট পাঠানোর জন্য আগে অবশ্যয় Access Control List (ACL) তৈরি করে নিতে হবে। Access Control List (ACL) কিভাব তৈরি করে তার জন্য এই পোস্টটা দেখুন।
Thanks & grateful to you. Its very informative, easy to understand apex api call from web serivice. Your writing is very descriptive & useful. Thanks for your contribution. Specially writing bangla made a good understanding on topics. Please keep contribute more to educate our apex Community.
Thank you, keep me in your prayers.