REST বনাম RESTful বনাম "সাধারণ" ওয়েব পরিষেবা - একই বা না?


21

আমি REST এবং / অথবা RESTful অ্যাপ্লিকেশনগুলিতে কয়েকটি সংজ্ঞা এবং আলোচনা পড়েছি, তবে আমি এখনও এর আসল অর্থ বুঝতে পারি না।

আমি সাধারণত অ্যাপ্লিকেশনগুলির সাথে কাজ করি যা হয় হয় জিইটি এর মাধ্যমে ডেটা নিয়ে আসে বা পোষ্টের মাধ্যমে ডেটা কোনও ওয়েব সার্ভিসে (সাধারণত একটি পিএইচপি স্ক্রিপ্ট) প্রেরণ করে যা হয় হয় ডাটাবেস থেকে ডেটা প্রাপ্ত করে বা ডাটাবেজে লেখার কাজ করে।

এখন, এটি কি একটি আরামদায়ক অ্যাপ? যদি তা না হয় তবে একটি রেস্টস্টুল অ্যাপ কী হবে? RESTful ধারণা এবং আমি এতক্ষণ যে ধারণার সাথে কাজ করেছি তার মধ্যে পার্থক্য কী? একটি উদাহরণের মাধ্যমে ব্যাখ্যা করুন।

এছাড়াও, কেউই আরইএসটি এবং কেউ আবার রিয়েলস্টুল অ্যাপস সম্পর্কে কথা বলছেন। আমি দেখতে পেলাম যে REST শব্দটি তাত্ত্বিক ধারণাটিকে বোঝায়, যখন আমরা নির্দিষ্ট অ্যাপের বিষয়ে কথা বলি তখন RESTful ব্যবহার করা হয়। এটি কি ঠিক আছে বা REST এবং RESTful অ্যাপ্লিকেশনগুলির মধ্যে বাস্তব পার্থক্য রয়েছে?


1
যদি আপনি কেবল জিইটি বা পোষ্ট প্যারামিটারগুলি থেকে তথ্য টানতে আপনার সমস্ত সার্লেটলেট তৈরি করতে পারেন (কল করার আগে স্থানীয়ভাবে কোনও কিছুই সংরক্ষিত হয়নি), তবে আপনি সঠিকভাবে REST প্রয়োগ করছেন applying অন্য কথায়, সার্ভার এমভিসিতে মডেলটির ভূমিকা পালন করে যে এটি নিয়ন্ত্রণে নেই তবে কিছু কার্য সম্পাদনের জন্য যা দেওয়া হয়েছে তা কেবল ব্যবহার করে। আশা করি এটি কিছুটা ভাল ব্যাখ্যা করেছে।
নীল

@ নীল আমি অন্যদিকে - মোবাইল অ্যাপ। এটি এমন একটি ক্লায়েন্ট যা ওয়েব পরিষেবা ব্যবহার করে এবং এটি পোস্ট এবং জিইটি এর মাধ্যমে যোগাযোগ করে। সমস্ত ওয়েব পরিষেবা অন্য কারও দ্বারা নির্মিত হয়েছিল এবং আমি যা করেছি তা সেগুলি ব্যবহার করে। কিন্তু পরিভাষা আমাকে বিভ্রান্ত করেছে। সুতরাং, আমি যদি এইচটিটিপি চ্যানেল এবং এইচটিটিপিগেট / এইচটিটিপিপোস্ট অবজেক্ট ব্যবহার করছি, তবে আমি একটি রেস্টস্টুল অ্যাপ্লিকেশনটির সাথে ডিল করছি, তাই না?
ডিভিডেভ

অগত্যা। সার্ভারটি কীভাবে করা হচ্ছে কারণ এটি কিছু সীমাবদ্ধতা লঙ্ঘন করতে পারে তা যদি আপনি জানেন না তবে এটি কোনও বিশ্রামের অ্যাপ্লিকেশন কিনা তা জানার উপায় নেই। এটি বলেছিল, যদি এটি ধারাবাহিক ফলাফল প্রদান করে তবে এটি সম্ভবত বিশ্রামযুক্ত।
নীল

@ নীল ওহ, আমি এখনই পেয়েছি। RESTful সার্ভারে সম্পন্ন হয়। এবং যদি আমি একটি অনুরোধ (প্রতিটি প্যারামিটার স্বতন্ত্রভাবে নয়) সহ একটি পোস্ট অবজেক্ট পাঠিয়ে থাকি তবে সম্ভবত এটি একটি বিশ্রামের পদ্ধতির। যতক্ষণ না কোনও ক্লায়েন্ট (মোবাইল অ্যাপ্লিকেশন), এটি বিশ্রামযুক্ত কিনা বা কোডিং যেমন একই নয় তেমন যত্ন নেয় না। আমি ঠিক আছে?
ডিভিডেভ

2
RESTful হ'ল সার্ভার এবং ক্লায়েন্ট উভয়ই তবে আপনি যদি কেবল ক্লায়েন্টকে দেখতে পান তবে ক্লায়েন্টের সীমাবদ্ধতাগুলি অনুসরণ করে তবেই আপনি কেবল তা জানতে পারবেন। এটাই আমি বোঝাতে চাইছি। আরআরএসটি বলতে যা বোঝায় তা হ'ল, যদি আপনাকে লগইন করতে হয় তবে আপনি ব্যবহারকারীর নাম এবং পাসওয়ার্ড পোস্ট করুন। সার্ভার লগইনকে বৈধতা দেয় এবং ডাটাবেসে ব্যবহারকারী হ্যাশ কী সংরক্ষণ করে এবং এটি ফেরত দেয়। এখন যখনই আপনাকে কোনও অপারেশন করতে হবে যার জন্য লগইন প্রয়োজন, আপনি সর্বদা ব্যবহারকারী হ্যাশ কীটি পাস করেন pass সার্ভারটি "ভুলে যায়" এটি আপনাকে লগ ইন করেছে, তবে আপনার লগইন স্থিতিটি যাচাই করতে ব্যবহারকারী হ্যাশ ব্যবহার করে। এটি যদি বিশ্রাম না পাওয়া যায়, তবে সার্ভারটি মনে করবে আপনি লগ ইন করেছেন the পার্থক্যটি বোঝেন?
নীল

উত্তর:


13

একটি রিস্টাল অ্যাপ্লিকেশনগুলির মূল বৈশিষ্ট্যগুলি হ'ল সমস্ত যোগাযোগ HTTP GET, POST, PUT, Delete এর মাধ্যমে হয় এবং সমস্ত আইটেম ফর্মের একটি স্ট্যান্ডার্ড URL এর মাধ্যমে সম্বোধন করা হয় http://your.site.com/salesapp/salesperson/0000001/detailsঅর্থাত্ কোনও খাঁটি ইউআরএল নেই যার কোনও প্যারামিটার নেই ইত্যাদি URL টি জিইটি জিনিসটি সনাক্ত করে , পোস্ট, পুট, মুছে ফেলুন এটির জন্য আপনি কী করতে চান তা সনাক্ত করে।

এটি করার মূল কারণটি হ'ল আপনার স্বয়ংক্রিয়ভাবে একটি রাষ্ট্রবিহীন পরিষেবা রয়েছে যা ভারসাম্যপূর্ণ ভারসাম্যহীন, ব্যর্থ হওয়া ইত্যাদি হতে পারে ইত্যাদি etc.

স্কিমের নিখুঁত সরলতা একটি খুব পরিষ্কার ইন্টারফেস তৈরি করে, ক্লায়েন্টকে কোনও নির্দিষ্ট ব্যাক-এন্ড বাস্তবায়ন থেকে সম্পূর্ণভাবে ডিকপল করে।


ওহ, এখনও অবধি আমি পুট বা ডিলেট ব্যবহার করি নি (মোবাইল অ্যাপ্লিকেশনগুলি সাধারণত কেবল জিইটি এবং পোস্ট করে) তবে এটিকে প্রকৃতপক্ষে দেখায় আমি এই মুহূর্তে যা করেছি এবং করছি doing এটি ঠিক যে ক্লায়েন্টরা বিশ্রাম * পদ ব্যবহার করে নি, বরং "ওয়েব পরিষেবা" এবং "পিএইচপি স্ক্রিপ্ট"
ডিভিডাভ

2
জেমস, আপনি কী ব্যাখ্যা করতে পারেন কেন কোয়েরি প্যারামিটারগুলি এড়ানো হবে? উদাহরণস্বরূপ, আমি কীভাবে প্রকাশ করব যে আমি কোনও ভ্রান্ত শ্রেণিবিন্যাস প্রবর্তন না করে একটি নির্দিষ্ট পদ্ধতিতে সংস্থানগুলি ফিল্টার করতে চাই?
গ্যারি রোয়ে

3
@ গ্যারিরো: ইউআরএল (কোনও পরামিতি ছাড়াই) আপনি যে সংস্থানটি ব্যবহার করতে চান তা চিহ্নিত করে। আপনার এখনও প্যারামিটার থাকতে পারে তবে এগুলি সংস্থান সনাক্তকরণে ব্যবহৃত হয় না। ডিরেক্টরিতে একটি জিইটি উদাহরণ (একটি URL এর সাথে শেষ হওয়া / / দিয়ে শেষ হওয়া উচিত) ডিরেক্টরিতে থাকা সংস্থানগুলির একটি তালিকা ফেরত দেওয়া উচিত। ইউআরএল-এ একটি প্যারামিটার ফিল্টার বা সাজানোর ক্রম বা এর মতো কিছু নির্দিষ্ট করতে ব্যবহৃত হতে পারে।
মার্টিন ইয়র্ক

1
ধন্যবাদ, লোকী জেমস তার উত্তরটি সম্পাদন করতে চাইলে এটি প্রতিফলিত হতে পারে যেহেতু মনে হয় যে তিনি যে কোনও পরিস্থিতিতে বিভ্রান্তিমূলক হতে পারে এমন প্রশ্নের প্যারামিটার ব্যবহার করার অনুমতি দিচ্ছেন না। প্রকৃতপক্ষে, একটি আকর্ষণীয় পর্যবেক্ষণ রয়েছে যে কোনও ডিরেক্টরিতে সংস্থানগুলির তালিকাটি সেই ধারণাটি প্রকাশ করে এমন একটি উত্স।
গ্যারি রোয়ে

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

6

আরআরইএসটি হ'ল প্রতিনিধিত্বমূলক রাজ্য স্থানান্তর। যদি আপনার সফ্টওয়্যারটি বিশ্রামের সীমাবদ্ধতাগুলির সাথে সম্মতি দেয় তবে এটি RESTful হিসাবে বিবেচিত হবে।

ঠিক আছে, এখন আমি নির্লজ্জভাবে উইকিপিডিয়া থেকে ছিটিয়েছি, এর আসলে কী অর্থ? এর কার্যকরভাবে হ'ল ইনবিল্ট এইচটিটিপি কমান্ড যেমন GET, POST, PUT, DELETE এবং আরও কয়েকটি বিরল বিষয়গুলি ক্লায়েন্ট এবং সার্ভারের মধ্যে পিছনে যোগাযোগ করার জন্য ব্যবহার করা।

আপনি যা করছেন তা এটিকে একটি RESTFul অ্যাপ্লিকেশন বলে মনে হচ্ছে। তবে, ভালভাবে ডিজাইন করা ও পাইলস ও 'জাঙ্ক RESTFul ওয়েব পরিষেবাদির মধ্যে একটি বিশাল পার্থক্য রয়েছে। উদাহরণস্বরূপ, জিইটিটির অপর প্রান্তে পিএইচপি কোড রাষ্ট্রীয় পরিবর্তন সম্পাদন করতে পারে, যা কোনও জিইটিকে কেবল পঠনযোগ্য অপারেশন হিসাবে দেখা হিসাবে ভুল হিসাবে বিবেচিত হবে। POST (নতুন) এবং PUT (প্রতিস্থাপন) পাশাপাশি কীভাবে ব্যবহৃত হয় তার মধ্যে সূক্ষ্ম পার্থক্য রয়েছে।

এ সম্পর্কিত উইকিপিডিয়া নিবন্ধটি আসলেই খুব ভাল, তাই আমি এখানেই থামব।


এখনও অবধি, আমি কনটেন্ট আনতে জিইটি (এইচটিপিপেট) এবং একটি ডেটাবেজের লিখিত সামগ্রী প্রবেশ / পরিবর্তন করতে পোষ্ট (এইচটিটিপিপোস্ট) ব্যবহার করেছি। আমি এটিকে একটি প্যারামিটার হিসাবে এইচটিপিপস্টে প্রেরণ করেছি এবং ওয়েব সার্ভারে পিএইচপি স্ক্রিপ্ট এই প্যারামিটারগুলিকে এসকিউএল কোডে রূপান্তর করে। এটি কি বিশ্রামের একটি অ্যাপ? আমি পিএইচপি স্ক্রিপ্ট কতটা ভালভাবে সম্পন্ন হয়েছে তাতে নয়, একটি ধারণায় আগ্রহী। আমি এটি তৈরি করিনি।
ডিভিডেভ

2
আপনি যে বিষয়বস্তু প্রতিস্থাপন করছেন সেই ক্ষেত্রে PUT- র ব্যবহারটি তদন্ত করব , এটি সর্বদা POST ব্যবহারের চেয়ে আরও বেশি বুদ্ধিমান REST।
মার্টিজ ভার্বার্গ

হ্যাঁ, এই ক্ষেত্রে আমি পুট ব্যবহার করব।
ডিভিডেভ

জিইটি সঠিকভাবে প্রয়োগ করতে হবে তা লক্ষ করার জন্য +1 (যেমন এটি আদর্শবান)। প্রথম দিনগুলিতে এ জাতীয় মৌলিক ত্রুটি।
গ্যারি রোয়ে

@ দেবী ডেভ আপনি হয়ত প্যাচচ্যাচ দেখতে চাইতে পারেন যা কোনও সংস্থার অংশ আপডেট করার জন্য তৈরি করা হয়েছে। মার্টিন যেমন যথাযথভাবে উল্লেখ করেছেন তবে পুটটি পুরো সম্পদ প্রতিস্থাপনের জন্য।
গ্যারি রোয়ে

4

আরও যাওয়ার আগে এই সম্পর্কিত প্রশ্ন আপনাকে সাহায্য করতে পারে

REST এবং RESTful এর মধ্যে পার্থক্যটি কেবল শব্দার্থক। REST হ'ল একটি স্থাপত্য শৈলী যা ক্লায়েন্ট-সার্ভারের সম্পর্কের ক্ষেত্রে প্রয়োগ হয়। RESTful কেবল আপনার ক্লায়েন্টদের বলার একটি উপায় যা আপনি REST ব্যবহার করেন।

অনেক ওয়েব অ্যাপ্লিকেশন RESTful বলে দাবী কিন্তু আসলে শুধুমাত্র আংশিকভাবে conformant হয় থেকে বিশ্রাম সীমাবদ্ধতাসমূহ (যেমন Martijn Verburg তার উত্তরে রেফারেন্সড হয়েছে)। আমি কেবল তাদের এখানে তালিকাবদ্ধ করব কিন্তু নিবন্ধটি পড়ার জন্য দৃ strongly়ভাবে অনুরোধ করছি:

  • ক্লায়েন্ট সার্ভার
  • ক্যাশেবেল
  • স্তরযুক্ত সিস্টেম
  • চাহিদা অনুসারে কোড (alচ্ছিক)

যেহেতু আপনি উল্লেখ করেছেন যে আপনি ক্লায়েন্টের পক্ষে কাজ করছেন এটি কোনও আরইএসটি আর্কিটেকচার আপনাকে সংযুক্ত ক্লায়েন্ট হিসাবে কী দেবে এবং কী প্রত্যাশা করবে তা দেখতে সহায়ক হতে পারে। যদিও আরএসইএসটি এইচটিটিপি নয় তবে এটি এখন পর্যন্ত সর্বাধিক জনপ্রিয় প্রোটোকল যা REST যা সমর্থন করে তাই আমি আমার উদাহরণটি ফ্রেমবন্দি করব।

আপনার ক্লায়েন্ট থেকে আশা করা হবে:

  • প্রাসঙ্গিক ক্রিয়াকলাপ সম্পাদনের জন্য HTTP ক্রিয়াগুলি (যেমন GET, POST, PUT, DELETE, OptionS, PATCH) ব্যবহার করুন
  • শিরোনামগুলি গ্রহণ করুন এবং সামগ্রী-প্রকারের শিরোনামগুলি বুঝুন (উদাহরণস্বরূপ আপনি কিছু এক্সএমএল পেয়েছেন যা আপনি আগে কখনও দেখেননি তবে আপনি আপনার ব্যবহারকারীর কাছে উপস্থাপনের জন্য ক্লায়েন্ট-সাইড ডোমেন মডেল তৈরি করতে একটি রেফারেন্সড এক্সএসডি ব্যবহার করতে পারেন)
  • আপনি বুঝতে পারেন এমন কোনও সামগ্রী-এর প্রস্তাবিত লিঙ্কগুলি অনুসরণ করুন (উদাহরণস্বরূপ আপনার ব্যবহারকারী বা আপনার অ্যাপ্লিকেশনটিকে এটি নির্ধারণ করুন যে <link rel="pay" href="http://example.org/orders(1)/payment">এইচটিএমএলে পোষ্টের মাধ্যমে কোনও এক্সএমএলযুক্ত একটি দেহ যা ক্রেডিট কার্ড নম্বর হিসাবে অর্থ প্রদানের বিশদটি উপস্থাপন করে তার সাথে অর্থ প্রদানের উত্স তৈরি করতে রাষ্ট্রীয় রূপান্তর প্রকাশ করে) পরিমাণ, এবং আরও)
  • HTTP স্থিতি কোডগুলির বিস্তৃত ক্ষেত্রে সঠিকভাবে প্রতিক্রিয়া জানায়

যদি এটি উপরেরটি করে তবে এটি একটি আরএসইটি ক্লায়েন্ট হিসাবে ভাবা যেতে পারে, আপনি এটিকে একটি "রিস্টফুল অ্যাপ" বলতে চাইতে পারেন তবে এটির পরিবর্তে বোঝানো যেতে পারে যে আপনি ক্লায়েন্টের দিক থেকে REST ব্যবহার করছেন যা এড়ানো ভাল is শব্দ।


3

RESTful এর অর্থ হ'ল ইন্টারফেসটি অবজেক্টগুলির একটি সেট, যা পড়ে এবং আপডেট করা যায় (এবং সম্ভবত মুছে ফেলা হয়)। এটি কোনও মাল্টি-প্যারামিটার কোয়েরি নেই (কেবলমাত্র প্যারামিটার হ'ল আপনি যা পড়তে চান) এবং কেবলমাত্র এক ধরণের অপারেশন রয়েছে যা সার্ভারে কিছু পরিবর্তন করে, নতুন রাষ্ট্রের আপলোড করে।

এই সীমাবদ্ধতাগুলি নিশ্চিত করে যে সমস্ত অনুরোধগুলি আদর্শবান (তাদের একাধিক বার প্রেরণ একবারে পাঠানোর ক্ষেত্রে কোনও অতিরিক্ত প্রভাব ফেলবে না)। এটি গুরুত্বপূর্ণ, কারণ নেটওয়ার্ক যে কোনও সময় ব্যর্থ হতে পারে এবং কোনও অনুরোধ বা প্রতিক্রিয়া সরবরাহ করতে পারে না এবং আদর্শবান অনুরোধের সাহায্যে আপনি কেবল এটি আবার প্রেরণ করেন এবং জটিল পুনরুদ্ধার করতে হবে না।


1 ম অনুচ্ছেদের জন্য আপভোট করুন। তাই সংক্ষিপ্ত। ধন্যবাদ!
ডিভিডেভ

আপনি আরও একটি জিনিস, আমি ঠিক আছে কিনা তা দেখতে। যদি আমি (আমার অ্যাপ্লিকেশন) আরআরএসটি পরিষেবার একটি ক্লায়েন্ট হয়ে থাকি তবে আমি ক্লায়েন্ট হিসাবে কোনও পরিষেবা আরামদায়ক না হয় তবে আমার কোডিংটি সর্বদা একই থাকে বলে (নাটক, https, ইত্যাদি) কেস করি না? এই নীতিটি কেবল কোনও সার্ভার স্ক্রিপ্ট / অ্যাপের মালিককেই গুরুত্ব দেয়?
ডিভিডেভ

আরআরইএসটি ইন্টারফেসের শব্দার্থবিজ্ঞানের নকশা করার জন্য একটি গাইডলাইন। অন্তর্নিহিত প্রযুক্তিটি হ'ল HTTP হ'ল ইন্টারফেসটি RESTful বা না (তবে অন্যান্য স্তর যেমন এক্সএমএল-আরপিসি বা এসওএপি RESTful ইন্টারফেসের জন্য প্রাসঙ্গিক নয়), তাই আপনি সর্বদা একই httpget, https পোষ্ট ইত্যাদি ব্যবহার করেন তবে আপনি নেটওয়ার্ক ব্যর্থতা অন্যরকমভাবে পরিচালনা করেন।
জান হুডেক

যোগ করার জন্য, এসএমটিপি একটি আরামদায়ক ইন্টারফেস, যদিও এটি জিইটি, পুট ইত্যাদি থেকে পৃথক ক্রিয়া ব্যবহার করে এবং ভিন্ন অন্তর্নিহিত প্রোটোকল ব্যবহার করে, ধারণাটি একই - আপনি কোনও সার্ভারে আইডিম্পোটেন্ট ক্রিয়া ভিত্তিক কমান্ড প্রেরণ করেন।
gbjbaanb

সমস্ত REST অনুরোধ আদর্শবান হয় না are উদাহরণস্বরূপ, একাধিকবার POST জারি করার ফলে প্রচুর নতুন সংস্থান দেখা যাবে।
গ্যারি রোয়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.