মূলঃ Here are the most popular ways to make an HTTP request in JavaScript, লেখকঃ Said Hayani

জাভাস্ক্রিপ্টের বেশ কিছু ভাল মডিউল এবং মেথড আছে যেগুলির সাহায্যে HTTP রিকুয়েস্ট করা যায় এবং সার্ভার সাইড রিসোর্স আদান-প্রদান করা যায়। এই আর্টিকেলে আমরা জাভাস্ক্রিপ্টে HTTP রিকুয়েস্ট করার জনপ্রিয় কিছু পদ্ধতির সাথে পরিচিত হব।

Ajax

অ্যাসিঙ্ক্রোনাস HTTP রিকুয়েস্ট করার সনাতন পধ্বতি হল Ajax। HTTP POST মেথডের মাধ্যমে ডেটা পাঠানো যায় এবং HTTP GET মেথডের মাধ্যমে ডেটা গ্রহণ করা যায়। চলুন তাহলে এবার একটি GET রিকুয়েস্ট করে দেখা যাক। সার্ভার হিসেবে আমি JSONPlaceholder ব্যবহার করবো। এটি ডেভেলপারদের জন্য একটি ফ্রী অনলাইন REST API এবং এটি র‍্যান্ডম ডেটা, JSON ফরম্যাটে রিটার্ন করে।

Ajax এ HTTP কল করার জন্য আপনাকে একটি নতুন XMLHttpRequest() মেথড ইনিশিয়ালাইজ করে, URL এন্ডপয়েন্ট এবং HTTP মেথড (এ ক্ষেত্রে GET) স্পেসিফাই করে দিতে হবে। এরপর open() মেথডটি কল করার মাধ্যমে HTTP মেথড এবং URL এন্ডপয়েন্টিকে সংযুক্ত করে, send() মেথড কল করার মাধ্যমে রিকুয়েস্টটি পাঠিয়ে দিতে হবে।

আমরা XMLHTTPRequest.onreadystatechange প্রোপার্টি ব্যবহার করে HTTP রেস্পন্সটি কনসোলে লগ করতে পারি। এই প্রোপার্টিতে একটি ইভেন্ট হ্যান্ডলার থাকে যা readystatechanged ইভেন্ট ফায়ার হলে কল করা হয়।

1_zXtlRe4yRF3tZkFFvBhZeA
const Http = new XMLHttpRequest();
const url='https://jsonplaceholder.typicode.com/posts';
Http.open("GET", url);
Http.send();

Http.onreadystatechange = (e) => {
  console.log(Http.responseText)
}

এখন আপনি যদি আপনার ব্রাউজার কনসোলটি দেখেন, তাহলে রেসপন্স ডেটার একটি অ্যারে, JSON ফরম্যাটে দেখতে পারবেন। কিন্তু একটি Ajax রিকুয়েস্টের ক্ষেত্রে আমরা কিভাবে বুঝবো যে রিকুয়েস্টটি সম্পন্ন হয়ছে কি না? অন্য কথায়, আমরা কিভাবে Ajax এর রেসপন্সটি হ্যান্ডেল করবো?

onreadystatechange প্রোপার্টিটিতে দুটি মেথড, readyState এবং status আছে যার মাধ্যমে আমরা রিকুয়েস্টটির স্টেট পরীক্ষা করে দেখতে পারি।

1-UfZf6qaZwNh5Mptft4WIZA

readyState এর মান 4 হওয়ার অর্থ হল রিকুয়েস্টটি সম্পন্ন হয়েছে। readyState এর ৫টি রেসপন্স আছে। এগুলি সম্পর্কে এখানে জানতে পারবেন।

জাভাস্ক্রিপ্টের মাধ্যমে সরাসরি Ajax কল করা ছাড়াও HTTP রিকুয়েস্ট করার আরও শক্তিশালী মেথড রয়েছে, যেমন, $.Ajax যেটি একটি jQuery মেথড। এখন আমি অন্যান্য মেথডগুলি নিয়ে আলোচনা করবো।

jQuery মেথডসমূহ

সহজে HTTP রিকুয়েস্ট হ্যান্ডেল করার জন্য jQuery এর বেশ কিছু মেথড আছে। এই মেথডগুলি ব্যবহার করার জন্য আপনাকে jQuery লাইব্রেরিটি আপনার প্রোজেক্টে যুক্ত করে নিতে হবে।

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

$.ajax

jQuery Ajax হল HTTP কল করার সবথেকে সাধারণ উপায়গুলির একটি।

1-vZ4BqVQfsvtpJm_RCsCE2Q

$.ajax মেথডটি অনেক কয়টি প্যারামিটার গ্রহণ করে, এদের মধ্যে কিছু কিছু বাধ্যতামূলক এবং কিছু কিছু ঐচ্ছিক। রেসপন্স হ্যান্ডেল করার জন্য মেথডটির দুটি কলব্যাক success এবং error রয়েছে।

$.get

$.get মেথডটি GET রিকুয়েস্ট এক্সিকিউট করার জন্য ব্যবহৃত হয়। মেথডটি দুটি প্যারামিটার গ্রহণ করেঃ এন্ডপয়েন্ট এবং কলব্যাক ফাংশন।

1-2koN5FJuT68WIyRKTihe5w

$.post

সার্ভারে ডেটা পাঠানোর আরও একটি উপায় হল $.post মেথড। মেথডটি তিনটি প্যারামিটার গ্রহণ করেঃ url, আপনি যে ডেটা পোস্ট করতে চান, এবং একটি কলব্যাক ফাংশন।

1-ql6Yp1EJfD7850GXhErwyw

$.getJSON

$.getJSON মেথডটি শধুমাত্র JSON ফরম্যাটের ডেটা নিয়ে আসে। মেথডটি দুটি প্যারামিটার গ্রহণ করেঃ url এবং একটি কলব্যাক ফাংশন।

1-hdcFdVHiBiRAo1YOi_Kt0Q

jQuery তে এই সবগুলি মেথড আছে ডেটা নিয়ে আসা এবং রিমোট সার্ভারে ডেটা পোস্ট করার জন্য। কিন্তু আপনি চাইলে এই সব মেথডগুলিকে একটির মধ্যে ফেলতে পারেন $.ajax মেথডটি ব্যবহার করার মাধ্যমে।

1-soPARjfQXMcZ5ccPK1QMmA

fetch

fetch হল একটি নতুন শক্তিশালী ওয়েব API যার মাধ্যমে আপনি অ্যাসিঙ্ক্রোনাস রিকুয়েস্ট করতে পারেন। এটি একটি "Promise" রিটার্ন করে যা ES6 এর ফিচারগুলির মধ্যে অন্যতম। আপনি যদি ES6 এর সাথে পরিচিত না হয়ে থাকেন তাহলে আপনি এই আর্টিকেলটি পড়তে পারেন। প্রমিজের মাধ্যমে আরও সুন্দর ভাবে অ্যাসিঙ্ক্রোনাস রিকুয়েস্ট হ্যান্ডেল করা যায়। চলুন একটি উদাহরণের মাধ্যমে দেখা যাক fetch কিভাবে কাজ করে।

1-kz6k4VRs0RiVCasWR0pCow

fetch ফাংশনটি একটি বাধ্যতামূলক প্যারামিটার নেয়ঃ endpoint URL। মেথডটির আরও কিছু ঐচ্ছিক প্যারামিটার আছে যা নিম্নোক্ত উদাহরণে দেখানো হলঃ

1-QasrBgYZcU4BBFHqD2bBdg

যেমনটা আপনি দেখতে পারছেন, HTTP রিকুয়েস্ট করার জন্য fetch এ বেশ কিছু সুবিধা রয়েছে। এখানে আপনি fetch সম্পর্কে আরও জানতে পারবেন।

Axios

Axios হল HTTP রিকুয়েস্ট করার একটি ওপেন-সোর্স লাইব্রেরি যার বেশ কিছু ভাল ভাল ফিচার আছে। চলুন দেখা যাক এটি কিভাবে কাজ করে।

ব্যবহার

প্রথমে আপনার প্রোজেক্টে Axios যুক্ত করতে হবে। এটি করার দুটি উপায় আছে।

প্রথমত, আপনি npm ব্যবহার করতে পারেনঃ

npm install axios --save

এরপর আপনাকে axios লাইব্রেরিটি import করে নিতে হবে

import axios from 'axios'

দ্বিতীয়ত, আপনি একটি CDN ব্যবহার করে axios যুক্ত করতে পারেন।

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Axios এর মাধ্যমে রিকুয়েস্ট করাঃ

Axios এর মাধ্যমে আপনি GET এবং POST মেথড ব্যবহার করে ডেটা গ্রহণ করতে এবং পাঠাতে পারবেন।

GET:

1-4wmqiPsSN5mdgjJiRaKVZg

axios একটি বাধ্যতামূলক প্যারামিটার গ্রহণ করে এবং দ্বিতীয় একটি ঐচ্ছিক প্যারামিটারও গ্রহণ করতে পারে। দ্বিতীয় প্যারামিটারটি কুয়েরি হিসেবে কিছু ডেটা নিতে পারে।

POST:

1-ey6-vwsrm9RAhyoU15u6xQ

Axios একটি promise রিটার্ন করে। আপনি যদি promise এর সাথে পরিচিত হয়ে থাকেন তাহলে হয়তো জানবেন যে একটি promise একাধিক রিকুয়েস্ট এক্সিকিউট করতে পারে। আপনি একই কাজ axios দিয়ে করতে পারেন এবং একসাথে একাধিক রিকুয়েস্ট চালাতে পারেন।

1-40Pji4utVKPpC7-dePfC6Q

Axios আরও অনেক মেথড এবং অপশন সমর্থন করে। এখানে আপনি সেগুলি সম্পর্কে জানতে পারেন।

Angular HttpClient

Angular এর নিজস্ব একটি HTTP মডিউল আছে যা Angular অ্যাপগুলির সাথে কাজ করে। মডিউলটি অ্যাসিঙ্ক্রোনাস রিকুয়েস্ট হ্যান্ডেল করার জন্য RxJS লাইব্রেরি ব্যবহার করে এবং HTTP রিকুয়েস্ট করার জন্য অনেকগুলি অপশন দেয়।

Angular HttpClient ব্যবহার করে সার্ভারে কল করা

Angular HttpClient ব্যবহার করে রিকুয়েস্ট করার জন্য আমাদের কোডকে একোটি Angular অ্যাপের মধ্যে চালাতে হবে। তাই আমি একটি Angular অ্যাপ তৈরি করেছি। আপনি যদি Angular এর সাথে পরিচিত না হয়ে থাকেন তাহলে আমার learn how to create your first Angular app in 20 minutes আর্টিকেলটি দেখতে পারেন।

প্রথমে app.module.tsHttpClientModule টি ইম্পোর্ট করতে হবে

1-iFuW5Fbp91VR5gwQ6XNMEQ

এরপর রিকুয়েস্ট হ্যান্ডেল করার জন্য আমাদের একটি সার্ভিস তৈরি করতে হবে। Angular CLI ব্যবহার করে আপনি খুব সহজে একটি সার্ভিস জেনারেট করতে পারেন।

ng g service  FetchdataService

এবার fetchdataService.ts এ HttpClient ইম্পোর্ট করে কন্সট্রাক্টরে ইনজেক্ট করতে হবে।

1-kKwELAhSSpnN8DvIgdOfcQ

এবং app.component.tsfetchdataService ইম্পোর্ট করতে হবে

import { FetchdataService } from './fetchdata.service';

ফাইনালি, সার্ভিসটি কল করে চালু করুন।

app.component.ts:

1-OrRe183Yaclt19n5ZQ194Q

আপনি Stackblitz এ ডেমোটি দেখতে পারেন।

উপসংহার

আমরা HTTP রিকুয়েস্ট করার সব থেকে জনপ্রিয় উপায়গুলি নিয়ে জানলাম।

আপনার সময়ের জন্য ধন্যবাদ। আপনার যদি এটি ভাল লেগে থাকে আমাকে টুইটার এ জানাতে ভুলবেন না।