আমি কিছুটা দু: খিত দেখতে পেয়েছি যে 10 বছরেরও বেশি সময় পরেও সত্যই কোনও উত্তর নেই যা ওপিতে অনুরোধ করা হয়েছে এমন একটি জিনিস কীভাবে একটি আর্কিটেকচারে নকশা করা যেতে পারে, তাই এখনই এটি করার প্রয়োজন বোধ করছি।
প্রথম জিনিস, প্রথমে রেস্ট কি ?! সংক্ষিপ্ত আরইএসটি বা আরইএসটি "প্রতিনিধিত্বমূলক রাজ্য স্থানান্তর" এর অর্থ দাঁড়ায় এবং একটি নির্দিষ্ট উপস্থাপনা বিন্যাসে একটি সংস্থার রাষ্ট্রের বিনিময়কে সংজ্ঞায়িত করে। উপস্থাপনা ফর্ম্যাট আলোচনামূলক মিডিয়া টাইপের জোয়ার। application/html
উপস্থাপনা বিন্যাসের ক্ষেত্রে ব্রাউজারে রেন্ডার করা এইচটিএমএল ফর্ম্যাটযুক্ত পাঠ্য সামগ্রীর একটি স্ট্রিম হতে পারে, সম্ভবত কিছু নির্দিষ্ট স্থানে নির্দিষ্ট উপাদানগুলিতে কিছু স্টাইলশিট বিন্যাস প্রয়োগ করার পরে।
আরআরইএসটি হ'ল নীতিগতভাবে ব্রাউজযোগ্য ওয়েবের সাধারণীকরণ যা আমরা সকলেই জানি যদিও সমস্ত ধরণের অ্যাপ্লিকেশনকে লক্ষ্য করে এবং কেবল ব্রাউজারই নয়। অতএব, নকশা দ্বারা, একই ধারণাগুলি যা ওয়েবে প্রযোজ্য তা একটি আরএসটি আর্কিটেকচারেও প্রযোজ্য। কীভাবে একটি "রিস্টফুল" উপায়ে কিছু অর্জন করা যায় তা কোনও ওয়েব পৃষ্ঠায় কীভাবে কিছু অর্জন করতে হবে এবং তারপরে অ্যাপ্লিকেশন স্তরটিতে একই ধারণাগুলি প্রয়োগ করতে হবে সেই প্রশ্নের উত্তর দেওয়ার চারপাশে সমাধান হয়।
একটি ওয়েব ভিত্তিক ক্যালকুলেটর সাধারণত কিছু "পৃষ্ঠা" দিয়ে শুরু করতে পারে যা আপনাকে সার্ভারে প্রবেশ করা ডেটা প্রেরণের আগে গণনা করতে কিছু মানকে ইনপুট করতে দেয়। এইচটিএমএল এ সাধারণত এইচটিএমএল <form>
উপাদানগুলির মাধ্যমে অর্জন করা হয় যা কোনও ক্লায়েন্টকে সেট করতে উপলব্ধ প্যারামিটারে শিখিয়ে দেয়, অনুরোধটি প্রেরণের লক্ষ্যের পাশাপাশি ইনপুট ডেটা প্রেরণের জন্য উপস্থাপনের ফর্ম্যাটটি প্রেরণ করে। এটি যেমন দেখতে পারে:
<html>
<head>
...
</head>
<body>
<form action="/../someResource" method="post" enctype="application/x-www-form-urlencoded">
<label for="firstNumber">First number:</label>
<input type="number" id="firstNumber" name="firstNumber"/>
<label for="secondNumber">Second number:</label>
<input type="number" id="secondNumber" name="secondNumber"/>
<input type="submit" value="Add numbers"/>
</form>
</body>
</html>
উপরের নমুনাটিতে বলা হয়েছে যে এখানে দুটি ইনপুট ক্ষেত্র রয়েছে যা ব্যবহারকারী বা অন্য কোনও অটোমেটা দ্বারা পূরণ করা যেতে পারে, এবং যে ইনপুট উপাদানটি জমা দেওয়ার পরে ব্রাউজারটি ইনপুট ডেটা application/x-www-form-urlencoded
উপস্থাপনের ফর্ম্যাটে প্রেরণ করে যা প্রেরণ করা হয় POST
এই ক্ষেত্রে নির্দিষ্ট HTTP অনুরোধ পদ্ধতির মাধ্যমে উল্লিখিত লক্ষ্য স্থানে location আমরা যদি লিখুন 1
মধ্যে firstNumber
ইনপুট ক্ষেত্র এবং 2
মধ্যে secondNumber
ইনপুট ক্ষেত্র, ব্রাউজার একটি প্রতিনিধিত্ব উত্পন্ন করবে firstNumber=1&secondNumber=2
এবং টার্গেট রিসোর্স প্রকৃত অনুরোধের শরীর পে লোড হিসাবে এই পাঠান।
সার্ভারে ইস্যু করা কাঁচা এইচটিটিপি অনুরোধটি দেখতে এরকম দেখতে পারে:
POST /../someResource
Host: www.acme.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
Accept: application/html
firstNumber=1&secondNumber=2
সার্ভারটি গণনা সম্পাদন করতে পারে এবং আরও এইচটিএমএল পৃষ্ঠায় প্রতিক্রিয়া জানাতে পারে যা গণনার ফলাফল ধারণ করে, যেমন অনুরোধটি ইঙ্গিত দেয় যে ক্লায়েন্টটি এই ফর্ম্যাটটি বোঝে।
ব্রেটান ইতিমধ্যে চিহ্নিত করেছে যে "RESTful" ইউআরএল বা ইউআরআই বলে কিছুই নেই। একটি ইউআরআই / ইউআরএল নিজস্ব ধরণের জিনিস এবং কোনও ক্লায়েন্ট / ব্যবহারকারীর কাছে কোনও অর্থ বোঝানো উচিত নয়। উপরের ক্যালকুলেটরের নমুনায় কোনও ব্যবহারকারী কেবল সেখানেই ডেটা প্রেরণ করতে আগ্রহী নয় কেবল জমা ইনপুট ফিল্ডটি ট্রিগার করার পরে অনুরোধটি প্রেরণ করা হবে তাতে আগ্রহী। টাস্কটি সম্পাদনের জন্য প্রয়োজনীয় সমস্ত তথ্য ইতিমধ্যে সার্ভারের দেওয়া উচিত।
কোনও ব্রাউজার এছাড়াও সচেতন হতে পারে না যে অনুরোধটি আসলে কিছু ইনপুট প্যারামিটার দিয়ে একটি ক্যালকুলেটরকে খাওয়ান, এটি পাশাপাশি এমন কোনও অর্ডার ফর্মও হতে পারে যা অর্ডার প্রক্রিয়া অব্যাহত রাখতে কেবল পরবর্তী ফর্মের প্রতিনিধিত্ব বা কিছু সম্পূর্ণ ভিন্ন ধরণের ফেরত দেয় সম্পদ। এটি সহজেই এমন ক্ষেত্রে এইচটিএমএল অনুমানের যা দাবি করে তা সম্পাদন করে এবং সার্ভারটি আসলে কী করছে তা এটি কম যত্ন করে না। এই ধারণাটি ব্রাউজারকে একই ধরণের উপস্থাপনা ফর্ম্যাটটি সমস্ত ধরণের কাজ করতে সক্ষম করে যেমন আপনার পছন্দসই অনলাইন দোকান থেকে কিছু স্টাফ অর্ডার করা, আপনার সেরা বন্ধুদের সাথে চ্যাট করা, একটি অনলাইন অ্যাকাউন্টে সাইন ইন করা ইত্যাদি।
Affordance নির্দিষ্ট উপাদানের যেমন এর ইনপুট ফিল্ড ক্ষেত্রে যে সাধারণত বোতাম হিসাবে পেশ করা হয়, নির্ধারণ কি আপনি এটি দিয়ে করা উচিত জমা দিতে হবে। কোনও বোতাম বা লিঙ্কের ক্ষেত্রে এটি মূলত আপনাকে এটি ক্লিক করতে বলে। অন্যান্য উপাদানগুলি বিভিন্ন সাশ্রয়ী মূল্যের কথা জানাতে পারে। লিঙ্ক-সম্পর্কের মাধ্যমে যেমন এন্ডোয়েন্সটি প্রকাশ করা যেতে পারে যেমন preload
টীকাগুলিযুক্ত লিঙ্কগুলির সাথে যা মূলত কোনও ক্লায়েন্টকে বলে যে এটি ইতিমধ্যে ব্যাকগ্রাউন্ডে লিঙ্কযুক্ত সংস্থার বিষয়বস্তু লোড করতে পারে কারণ ব্যবহারকারী সম্ভবত এই বিষয়বস্তুটি পরবর্তী সময়ে গ্রহণ করবে। এই জাতীয় লিঙ্ক সম্পর্ক অবশ্যই মানযুক্ত করা উচিত বা ওয়েব লিঙ্কিং দ্বারা সংজ্ঞায়িত হিসাবে সম্পর্কিত ধরণের জন্য এক্সটেনশন প্রক্রিয়া অনুসরণ করা উচিত ।
এগুলি হ'ল মৌলিক ধারণা যা ওয়েবে ব্যবহৃত হয় এবং এটি একটি REST আর্কিটেকচারেও ব্যবহার করা উচিত। "আঙ্কেল বব" রবার্ট সি মার্টিনের মতে একটি আর্কিটেকচার হ'ল উদ্দেশ্য সম্পর্কে এবং আরআরএসটি আর্কিটেকচারের পিছনের উদ্দেশ্যটি হ'ল সার্ভারগুলি থেকে ক্লায়েন্টদের ক্লায়েন্টদের ভেঙে যাওয়ার ভয় না পেয়ে ভবিষ্যতে নির্বিঘ্নে বিকশিত হতে দেয়। দুর্ভাগ্যক্রমে এর জন্য প্রচুর শৃঙ্খলার প্রয়োজন কারণ দম্পতি প্রবর্তন করা বা কাজটি সেরে উঠতে এবং এগিয়ে যাওয়ার জন্য দ্রুত-সমাধান সমাধান যুক্ত করা এত সহজ। জিম ওয়েবার যেমন একটি আরএসটি আর্কিটেকচারে উল্লেখ করেছেন, পরিষেবা প্রদানকারী হিসাবে আপনি 70 এর দশকের পাঠ্য ভিত্তিক কম্পিউটার গেমের মতো একটি ডোমেন অ্যাপ্লিকেশন প্রোটোকল ডিজাইন করার চেষ্টা করা উচিত যা ক্লায়েন্টরা কোনও প্রক্রিয়া শেষ না হওয়া অবধি অনুসরণ করবে।
দুর্ভাগ্যবশত বাস্তবে দুর্ভাগ্যক্রমে "আরএসটি" এপিআইগুলি প্রচুর পরিমাণে যা কিছু করে তা হ'ল। আপনি বেশিরভাগ জেএসওএন ভিত্তিক ডেটার বিনিময় দেখতে পান যা একটি এআইপি নির্দিষ্ট সুনির্দিষ্ট বাহ্যিক ডকুমেন্টেশনে নির্দিষ্ট করা থাকে যা সাধারণত ফ্লাইতে গতিশীলভাবে সংহত করা শক্ত। অনুরোধটির মতো দেখতে যে ফর্ম্যাটটি দেখতে হবে সেটিও বাহ্যিক ডকুমেন্টেশনে হার্ডকোডযুক্ত রয়েছে যা ইউআরআইকে প্রচুর বাস্তবায়নের পূর্বনির্ধারিত টাইপগুলিতে ফিরে আসতে বলেসামনে কিছু সাধারণ প্রতিনিধিত্ব বিন্যাস ব্যবহার করার পরিবর্তে সামনের দিকে আলোচনা করা হয়েছে। এটি ক্লায়েন্টদের পূর্বনির্ধারিত ইউআরআইয়ের জন্য একটি নির্দিষ্ট ডেটা ফর্ম্যাট (নোট প্রতিনিধিত্বমূলক বিন্যাস নয়!) প্রাপ্তির প্রত্যাশা হিসাবে সার্ভারগুলি পরিবর্তন হতে বাধা দেয়। এই কাস্টম ডেটা ফর্ম্যাট এক্সচেঞ্জ এছাড়াও ক্লায়েন্টদের অন্যান্য API গুলি সাথে ইন্টারঅ্যাক্ট করতে বাধা দেয় কারণ "ডেটা ফর্ম্যাট" সাধারণত একটি নির্দিষ্ট এপিআইয়ের জোয়ার থাকে। আমরা এই ধারণাটি অতীতে থেকেই জানি কার্পা, আরএমআই বা এসওএপি এর মতো আরপিসি প্রযুক্তিগুলি থেকে যা আমরা কোনওভাবে মন্দ হিসাবে নিন্দা করি, যদিও পেপপল সম্প্রতি AS2 কে AS4 এর পরিবর্তে ডিফল্ট ট্রান্সফার প্রোটোকল হিসাবে পুনরায় স্থানান্তরিত করেছিলেন।
জিজ্ঞাসিত প্রকৃত প্রশ্নের ক্ষেত্রে, সিএসভি ফাইল হিসাবে ডেটা প্রেরণ application/x-www-form-urlencoded
প্রতিনিধিত্ব বা অনুরূপ স্টাফ ব্যবহারের চেয়ে আলাদা কিছু নয় । জিম ওয়েবার পরিষ্কার করে দিয়েছিলেন যে সমস্ত এইচটিটিপি হ'ল কেবল একটি ট্রান্সপোর্ট প্রোটোকল যার অ্যাপ্লিকেশন ডোমেনটি ওয়েবে নথির স্থানান্তর । আরএফসি 7111text/csv
হিসাবে সংজ্ঞায়িত হিসাবে ক্লায়েন্ট এবং সার্ভারের কমপক্ষে উভয় সমর্থন করা উচিত । কনফিগারেশনের আপলোড সম্পাদনের জন্য এইচটিটিপি পদ্ধতিতে অনুরোধ প্রেরণের জন্য ফর্ম উপাদান, একটি লক্ষ্য উপাদান বা বৈশিষ্ট্য হিসাবে সংশ্লেষ করে এমন একটি মিডিয়া টাইপ প্রক্রিয়াকরণের ফলাফল হিসাবে এই সিএসভি ফাইলটি উত্পন্ন হতে পারে।
এমন বেশ কয়েকটি মিডিয়া টাইপ রয়েছে যা এইচটিএমএল , এইচএল ফর্মস , হালফর্ম , আয়ন বা হাইড্রার মতো ফর্মগুলিকে সমর্থন করে । যদিও আমি বর্তমানে এমন কোনও মিডিয়া টাইপ সম্পর্কে অবগত নই যা স্বয়ংক্রিয়ভাবে ইনপুট ডেটা text/csv
সরাসরিভাবে এনকোড করতে পারে তাই আইএএনএর মিডিয়া টাইপ রেজিস্ট্রিতে কোনওটিকে সংজ্ঞায়িত এবং নিবন্ধভুক্ত করা প্রয়োজন হতে পারে ।
সম্পূর্ণ প্যারামিটার সেট আপলোড এবং ডাউনলোড আমার ধারণা করা উচিত নয়। পূর্বে উল্লিখিত হিসাবে, লক্ষ্যযুক্ত ইউআরআই প্রাসঙ্গিক নয় কারণ কোনও ক্লায়েন্ট কেবল প্রসেসের জন্য নতুন সামগ্রী পুনরুদ্ধার করতে ইউআরআই ব্যবহার করবে। ব্যবসায়ের তারিখ অনুসারে ফিল্টারিং করাও কঠিন হবে না। এখানে সার্ভারের ক্লায়েন্টটি কেবলমাত্র ক্লায়েন্ট থেকে চয়ন করতে পারে এমন সমস্ত সম্ভাবনা সহ ক্লায়েন্টের উচিত। সাম্প্রতিক বছরগুলিতে গ্রাফকিউএল এবং রিসকিউএল বিবর্তিত হয়েছে যা ভাষার মতো একটি এসকিউএল প্রবর্তন করে যা একটি পরিশোধিত প্রতিক্রিয়া পেতে নির্দিষ্ট প্রান্তে লক্ষ্যবস্তু হতে পারে। তবে, সত্যিকার অর্থে REST অর্থে এটি REST এর পেছনের ধারণাটিকে লঙ্ঘন করে a) গ্রাফকিউএল যেমন কেবলমাত্র একটি একক পয়েন্ট ব্যবহার করে যা কোনওরকমে ক্যাচিংয়ের সর্বোত্তম ব্যবহার রোধ করে এবং খ) উপলব্ধ ক্ষেত্রগুলির জ্ঞান প্রয়োজন যা গ্রাহকদের সংযুক্তকরণের সূচনা করতে পারে সংস্থানটির বেস ডেটা মডেলটিতে
নির্দিষ্ট কনফিগারেশন প্যারামিটারগুলি সক্রিয় বা নিষ্ক্রিয় করা কেবল হাইপারমিডিয়া নিয়ন্ত্রণগুলি চালিত করে যা এই সামর্থ্য সরবরাহ করে। এইচটিএমএল ফর্মগুলিতে এটি একটি সাধারণ চেকবক্স বা কোনও তালিকার বা kind ধরণের একাধিক-লাইন নির্বাচন হতে পারে। ফর্ম এবং এটি কোন পদ্ধতির দ্বারা এটি সংজ্ঞায়িত করে তার উপর নির্ভর করে সম্পূর্ণরূপে কনফিগারেশনটি প্রেরণ করতে PUT
পারে বা পরিবর্তিত পরিবর্তনগুলি সম্পর্কে স্মার্ট হতে পারে এবং কেবল এর মাধ্যমে একটি আংশিক আপডেট সম্পাদন করতে পারে PATCH
। পরবর্তীটির জন্য মূলত আপডেট হওয়াতে পরিবর্তনের প্রতিনিধিত্বের একটি ক্যালকুলটন প্রয়োজন এবং বর্তমান উপস্থাপনাটিকে কাঙ্ক্ষিতভাবে ট্রান্সফর্ম করার জন্য প্রয়োজনীয় পদক্ষেপগুলি সহ সার্ভারকে ফিড দিন। PATH স্পেসিফিকেশন অনুসারে এটি একটি লেনদেনের মধ্যেই সম্পন্ন করতে হবে যাতে পদক্ষেপগুলির সমস্ত বা কোনওটিই প্রয়োগ না হয়।
এইচটিটিপি পরিবর্তনগুলি প্রয়োগ করার আগে একটি সার্ভারকে একটি প্রাপ্ত অনুরোধকে বৈধতা দেওয়ার জন্য অনুমতি দেয় এবং উত্সাহ দেয়। পুটটি পুট করার জন্য :
একটি উত্সের সার্ভারটি যাচাই করা উচিত যে টার্গেট রিসোর্সের জন্য সার্ভারের যে কোনও প্রতিবন্ধকতাগুলি পুট দ্বারা পরিবর্তন করতে পারে না বা করা যাবে না তার সাথে PUT উপস্থাপনাটি সামঞ্জস্যপূর্ণ। এটি বিশেষত গুরুত্বপূর্ণ যখন জিইটি প্রতিক্রিয়াগুলিতে প্রতিনিধিত্ব মেটাডেটার মান নির্ধারণের জন্য উত্স সার্ভারটি ইউআরআই সম্পর্কিত অভ্যন্তরীণ কনফিগারেশন তথ্য ব্যবহার করে। যখন কোনও PUT উপস্থাপনা লক্ষ্য সংস্থানটির সাথে অসামঞ্জস্যপূর্ণ হয়, তখন উত্স সার্ভারটি প্রতিনিধিত্বকে রূপান্তর করে বা সংস্থান কনফিগারেশন পরিবর্তন করে সেগুলিকে সামঞ্জস্য করে তোলে বা উপস্থাপনাটি অনুপযুক্ত কেন তা ব্যাখ্যা করার জন্য পর্যাপ্ত তথ্য সম্বলিত একটি যথাযথ ত্রুটি বার্তা দিয়ে প্রতিক্রিয়া জানায়। 409 (সংঘাত) বা 415 (অসমর্থিত মিডিয়া ধরণ) স্থিতি কোডগুলি প্রস্তাবিত হয়,
উদাহরণস্বরূপ, যদি লক্ষ্য উত্সটি সর্বদা "পাঠ্য / এইচটিএমএল" এর সামগ্রী-প্রকারের জন্য কনফিগার করা থাকে এবং PUT হ'ল উপস্থাপনাটির "চিত্র / jpeg" এর একটি সামগ্রী-প্রকার থাকে, তবে উত্সের সার্ভারের একটি করা উচিত:
ক। নতুন মিডিয়া ধরণের প্রতিফলিত করতে লক্ষ্য সংস্থানটিকে পুনরায় কনফিগার করুন;
খ। নতুন রিসোর্স স্টেট হিসাবে সংরক্ষণের পূর্বে রিসোর্সের সাথে সামঞ্জস্যপূর্ণ একটি ফর্ম্যাটে PUT উপস্থাপনাকে রূপান্তর করুন; বা,
গ। 415 (অসমর্থিত মিডিয়া টাইপ) প্রতিক্রিয়া সহ অনুরোধটি প্রত্যাখ্যান করুন যা নির্দেশ করে যে টার্গেট রিসোর্সটি "পাঠ্য / এইচটিএমএল" এর মধ্যে সীমাবদ্ধ রয়েছে, সম্ভবত কোনও নতুন উত্সের লিঙ্ক সহ যা নতুন উপস্থাপনের জন্য উপযুক্ত লক্ষ্য হতে পারে।
ব্যবহারকারী এজেন্ট অনুরোধের অভিপ্রায় এবং মূল সার্ভারের প্রতিক্রিয়ার শব্দার্থতত্ত্ব দ্বারা প্রকাশ করা যেতে পারে তার চেয়েও কোনও পুট পদ্ধতি কোনও উত্স সার্ভারের অবস্থাকে কীভাবে প্রভাবিত করে তা এইচটিটিপি ঠিক ব্যাখ্যা করে না। ...
এই পোস্টটি সংক্ষিপ্ত করতে, আপনার হয় একটি বিদ্যমান মিডিয়া টাইপ ব্যবহার করা উচিত যা আপনাকে ক্লায়েন্টকে প্রয়োজনীয় বা সমর্থিত ইনপুট পরামিতি, অনুরোধটি প্রেরণের লক্ষ্য স্থান, ব্যবহারের জন্য অপারেশন পাশাপাশি মিডিয়া-টাইপ টাইপ করুন অনুরোধটি ফর্ম্যাট করতে হবে, বা আপনার নিজের আইএএনএতে নিবন্ধিত হওয়া নিজের একটি নির্দিষ্ট করতে হবে। আপনি যদি ইনপুটটি রূপান্তর করতে চান তবে পরবর্তীকালের প্রয়োজন হতে পারেtext/csv
এবং তারপরে সার্ভারে সিএসভি উপস্থাপনা আপলোড করুন। সংস্থানটিতে পরিবর্তনগুলি প্রয়োগ করার আগে বৈধতাটি হওয়া উচিত। কোথায় আবেদনটি প্রেরণ করতে হবে তা নির্ধারণ করা ছাড়াও সত্যিকারের ইউআরআইর সাথে অন্য ক্লায়েন্টগুলির সাথে প্রাসঙ্গিক হওয়া উচিত নয় এবং যেমন পরিষেবা নির্বাহক আপনাকে নির্দ্বিধায় চয়ন করতে পারেন। এই পদক্ষেপগুলি অনুসরণ করে আপনি যে কোনও সময়ে আপনার সার্ভারের দিক পরিবর্তন করার স্বাধীনতা অর্জন করেছেন এবং ক্লায়েন্টরা যদি ব্যবহৃত মিডিয়া-প্রকারকে সমর্থন করে তবে ফলস্বরূপ এটি ভেঙে যাবে না।