আরআরএসটি নয়, এইচটিটিপি-র পরিবর্তে আরআরএসটি ব্যবহারের সুবিধা কী?


161

স্পষ্টতই, REST হল এইচটিটিপি কীভাবে ব্যবহার করা যায় সে সম্পর্কে কনভেনশনগুলির একটি সেট । আমি অবাক হই যে এই সম্মেলনগুলি কী সুবিধা সরবরাহ করে। কেউ কি জানে?


উত্তর:


162

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

পরিবর্তে এলোমেলোভাবে নামে সেটার এবং সংগ্রহকারী URL গুলি থাকার এবং ব্যবহারের GETসব getters এবং POSTsetters সব জন্য, আমরা URL গুলি সম্পদ চিহ্নিত আছে চেষ্টা করুন, এবং তারপর HTTP- র অ্যাকশনগুলি ব্যবহার GET, POST, PUTএবং DELETEতাদের কাপড় না। পরিবর্তে তাই

GET /get_article?id=1
POST /delete_article   id=1

আপনি করবেন

GET /articles/1/
DELETE /articles/1/

এবং তারপরে POSTএবং PUT"তৈরি করুন" এবং "আপডেট" অপারেশনগুলির সাথে সামঞ্জস্য হয় (তবে কেউ কোন পথেই রাজি নয়)।

আমি মনে করি ক্যাশে আর্গুমেন্টগুলি ভুল, কারণ ক্যোয়ারী স্ট্রিংগুলি সাধারণত ক্যাশে করা হয় এবং এগুলি ছাড়া আপনার সত্যিই এগুলি ব্যবহার করার দরকার নেই। উদাহরণস্বরূপ জাঙ্গো এটিকে খুব সহজ কিছু তৈরি করে, এবং আমি এটি বিশ্রামের মতো বলতে পারি না:

GET /get_article/1/
POST /delete_article/     id=1

অথবা এমনকি ইউআরএলটিতে ক্রিয়াটি অন্তর্ভুক্ত করুন:

GET /read/article/1/
POST /delete/article/1/
POST /update/article/1/
POST /create/article/

যে ক্ষেত্রে GETপার্শ্ব প্রতিক্রিয়া, এবং ছাড়া উপায় কিছু POSTউপায়ে কিছু যে সার্ভারে ডাটা পরিবর্তন। আমি মনে করি এটা সম্ভবত একটু পরিস্কার এবং সহজ, বিশেষ করে আপনি পুরো এড়াতে পারেন PUTবনাম POSTজিনিস। এছাড়াও আপনি চাইলে আরও ক্রিয়া যুক্ত করতে পারেন, তাই এইচটিটিপি যা দেয় তাতে আপনি কৃত্রিমভাবে আবদ্ধ হন না। উদাহরণ স্বরূপ:

POST /hide/article/1/
POST /show/article/1/

(বা যা-ই হোক না কেন, উদাহরণগুলি না হওয়া পর্যন্ত তাদের পক্ষে চিন্তা করা শক্ত!)

সুতরাং উপসংহারে, আমি দেখতে পাচ্ছি মাত্র দুটি সুবিধা:

  1. আপনার ওয়েব এপিআই পরিষ্কার এবং বুঝতে / আবিষ্কার করা সহজ হতে পারে।
  2. কোনও ওয়েবসাইটের সাথে ডেটা সিঙ্ক্রোনাইজ করার সময়, REST ব্যবহার করা সম্ভবত সহজতর কারণ আপনি কেবল synchronize("/articles/1/")যা কিছু বলতে পারেন বা যা কিছু করতে পারেন । এটি আপনার কোডের উপর খুব বেশি নির্ভর করে।

তবে আমি মনে করি কিছু বড় বড় অসুবিধা রয়েছে:

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

সুতরাং উপসংহারে আমি বলব: যদি না আপনি সত্যিই অতিরিক্ত পরিশ্রমের দিকে যেতে চান না, বা যদি আপনার পরিষেবা মানচিত্রগুলি CRUD অপারেশনগুলিতে সত্যিই ভাল না হয় তবে আপনার API এর দ্বিতীয় সংস্করণের জন্য REST সংরক্ষণ করুন।


আমি আরইএসটি-র সাথে আর একটি সমস্যা পেয়েছি: একটি অনুরোধে একাধিক জিনিস করা বা কোনও যৌগিক বস্তুর কোন অংশগুলি আপনি পেতে চান তা নির্দিষ্ট করা সহজ নয়। এটি মোবাইলে বিশেষত গুরুত্বপূর্ণ যেখানে রাউন্ড-ট্রিপ-সময় উল্লেখযোগ্য হতে পারে এবং সংযোগগুলি অবিশ্বাস্য। উদাহরণস্বরূপ, ধরুন আপনি কোনও ফেসবুক টাইমলাইনে পোস্ট পাচ্ছেন। "খাঁটি" REST রাস্তাটি এমন কিছু হবে

GET /timeline_posts     // Returns a list of post IDs.
GET /timeline_posts/1/  // Returns a list of message IDs in the post.
GET /timeline_posts/2/
GET /timeline_posts/3/
GET /message/10/
GET /message/11/
....

যা এক ধরণের হাস্যকর। ফেসবুকের এপিআই দুর্দান্ত আইএমও, সুতরাং তারা কী করে তা দেখুন:

ডিফল্ট হিসাবে, বেশিরভাগ অবজেক্টের বৈশিষ্ট্য ফিরে আসে যখন আপনি কোনও ক্যোয়ারী করবেন। আপনি "ক্ষেত্রগুলি" ক্যোয়ারী প্যারামিটার দিয়ে যে ক্ষেত্রগুলি (বা সংযোগগুলি) ফিরে চান তা চয়ন করতে পারেন। উদাহরণস্বরূপ, এই ইউআরএল কেবলমাত্র আইডি, নাম এবং বেনের চিত্রটি ফিরিয়ে দেবে: https : // راف. facebook.com/bgolub?fields=id,name,picture

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


4
পোষ্ট এবং পুট HTTP আরএফসি প্রতি ব্যবহার করতে বোঝানো হয়। এই ক্ষেত্রে, পুটের অর্থ নির্দিষ্ট স্থানে কিছু তৈরি করা / আপডেট করা - যা ঘটেছিল তার উপর নির্ভর করে কিছু আগে থেকেই ইউআরআইতে রয়েছে কিনা (এবং এটি আদর্শবানও) তবে পোষ্ট মানে আপনি ওয়েব পরিষেবাকে কোথায় যাবেন তা নির্ধারণ করতে জিজ্ঞাসা করছেন এটি প্রেরণ করা - এবং তারপরে এটি আপনাকে ইউআরআই দেয় (যাতে এটি কেবল তৈরি হয়)। ইংরেজী সম্পর্কে আসলেই অভিযোগ করা যায় না, কম্পিউটার থেকে দূরে থাকা কোনও কিছুর কথা উল্লেখ করার পরে ডিলিট ব্যবহার করা সম্পূর্ণভাবে বন্ধ হয়ে গেলে নয়। আপনার সম্পাদনায় উত্থাপিত বিষয়টি সম্পর্কে আমি কী করব তা নিয়ে ভাবছি, যদিও: পি
নান এল

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

5
অনুসন্ধানের স্ট্রিংগুলি যতক্ষণ না আপনি সেগুলিতে সংস্থাগুলির জন্য রেফারেন্স তৈরি করছেন না ততক্ষণ পুরোপুরি বিশ্রামযুক্ত। আমি তাদের সম্পর্কে আরও ফিল্টারগুলির মতো ভাবতে চাই যা শেষ পয়েন্টের আচরণটি টুইঙ্ক করতে পারে।
সিনাইস্টেটিক

3
-১, আরআরইএসটি খুব সুনির্দিষ্ট কিছু - রয় ফিল্ডিং যখন এটি আবিষ্কার করেছিলেন তখন বর্ণনা করেছিলেন। এই উত্তর দেখুন । বিশেষত: "ক্লায়েন্টটির কেবলমাত্র প্রাথমিক ইউআরআই জানতে হবে এবং পরবর্তীকালে নেভিগেট বা ক্রিয়া সম্পাদনের জন্য সার্ভার সরবরাহিত পছন্দগুলি থেকে চয়ন করুন" " । মূলত, যদি কোনও এপিআই নথির কোনও অংশের সমাপ্তি হয়, উদাহরণস্বরূপ, "একটি ব্যবহারকারী আইডি দেওয়া হয়েছে, আপনি এতে ব্যবহারকারী তথ্য পেতে পারেন /user/{id}, তবে তা প্রশান্তিজনক নয় Consider বিবেচনা করুন: স্ট্যাকওভারফ্লো প্রশ্নের জন্য কীভাবে এইচটিএমএল পাবেন তা জেনে আপনার ব্রাউজারটি কি প্রিগ্রোগ্রামে আসতে হবে? পৃষ্ঠা?
ক্লদিউ

1
(অব্যাহত ...) অন্যান্য লোকেরা এই শব্দটির অপব্যবহার করে যা এটি হয় তা পরিবর্তন করে না। দাবি অস্বীকার, যদিও: আমি এখনও ঠিক শিখছি REST কী এবং সম্প্রতি এটি আমার জন্য ক্লিক করেছে।
ক্লোডিউ

47

সহজ কথায় বলতে গেলে, আরআরএসটি হ'ল এইচটিটিপি ব্যবহার করা।

কটাক্ষপাত আছে বাকী সব বিষয়ের রায় ফিন্ডিং এর গবেষণা প্রবন্ধে । আমি মনে করি যে ওয়েব বিকাশ করছে এমন প্রত্যেক ব্যক্তির এটি পড়া উচিত।

একটি নোট হিসাবে, রয় ফিল্ডিং এইচটিটিপি প্রোটোকলের পিছনে অন্যতম মূল চালক drivers

কিছু অগ্রিমের নামকরণ করুন:

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

11
"সিম্পল": এইচটিটিপি-র চেয়ে REST কেন সহজ?
দিমিত্রি সি

5
"আপনাকে সংগঠিত করতে সহায়তা করে": সুতরাং GET এবং POST ব্যবহার করার সময় এই সংস্থাটি আরও বেশি কঠিন?
দিমিত্রি সি।

1
"নতুন ক্লায়েন্টদের পক্ষে আপনার অ্যাপ্লিকেশনটি ব্যবহার করা সহজ করে তোলে": এটি আরইএসটি বনাম সমতল HTTP সম্পর্কে, তাই না?
দিমিত্রি সি।

23
আরআরএসটি সীমাবদ্ধতার সাথে সামঞ্জস্য করা অবশ্যই সহজ নয়। জটিল ব্যবসায়িক ক্রিয়াকলাপকে চারটি স্ট্যান্ডার্ড ক্রিয়াগুলিতে আটকানো আসলে কখনও কখনও সত্যই শক্ত। যাইহোক, ভাল সম্পন্ন করার পরে, শেষ ফলাফলটি বোঝা সহজ হতে পারে, তবে সেখানে পাওয়া ছাড়াও কিছু আছে।
ড্যারেল মিলার

6
@ দিমিত্রি: "সরল" কারণ এটি আপনাকে কাজ করার জন্য একটি সাধারণ কাঠামো দেয়। REST হ'ল এইচটিটিপি! এটি এসওএপি (যা এর নামে সহজও রয়েছে) এর চেয়ে আরও সহজ। "আপনাকে সংগঠিত করতে সহায়তা করে" - ধারণাটি বোঝা খুব কঠিন নয় এবং একবার সঠিকভাবে প্রয়োগ করা হয়েছে - এটি বিষয়গুলি খুব ভাল করে তোলে makes REST অ্যাপ্লিকেশন ডিজাইনের একটি উপায় হিসাবে হতে পারে, বরং তার পরে একটি বাস্তবায়ন বিশদ। ড্যারেল যেহেতু এটি বাস্তবায়ন করতে ইঙ্গিত করেছেন তা সম্ভবত সহজ নয় তবে ফলাফলটি ফলস্বরূপ। "নতুন ক্লায়েন্টদের আপনার অ্যাপ্লিকেশনটি ব্যবহার করা সহজ করে তোলে" - আবার: REST হ'ল HTTP।
এমিল ইভানভ

31

সোজা কথায়: কিছুই নয়

ডাউনটাতে নির্দ্বিধায় পড়ুন তবে আমি এখনও ভাবি যে অ-রেস্ট এইচটিটিপি-র কোনও বাস্তব সুবিধা নেই। সমস্ত বর্তমান উত্তর অবৈধ। বর্তমানে সর্বাধিক ভোট দেওয়া উত্তর থেকে যুক্তি:

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

1. সাধারণ

REST এর সাথে আপনার আপনার সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড স্ক্রিপ্টগুলির জন্য অতিরিক্ত যোগাযোগ স্তর প্রয়োজন => এটি বাস্তবে নন-আরএসটি এইচটিটিপি ব্যবহারের চেয়ে জটিল।

2. ক্যাচিং

সার্ভারের মাধ্যমে প্রেরিত HTTP শিরোনাম দ্বারা ক্যাচিং নিয়ন্ত্রণ করা যায়। REST নন-রেস্ট-এ অনুপস্থিত কোনও বৈশিষ্ট্য যুক্ত করে না।

3. সংস্থা

REST আপনাকে জিনিসগুলি সংগঠিত করতে সহায়তা করে না । এটা তোলে বাধ্য করে আপনি ব্যবহার করছেন সার্ভার সাইড গ্রন্থাগার দ্বারা সমর্থিত API- টি ব্যবহার করার। আপনি যখন নন-আরএসটি-অ পদ্ধতি ব্যবহার করছেন তখন আপনি একইভাবে (বা আরও ভাল) আপনার অ্যাপ্লিকেশনটি সংগঠিত করতে পারেন। যেমন মডেল-দেখুন-নিয়ন্ত্রক বা এমভিসি রাউটিং দেখুন

4. ব্যবহার / প্রয়োগ করা সহজ

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


3
সাধারণত বিশ্রাম এপিআইএসগুলি ক্যাশে করা সহজ কারণ আপনি একই লাইফাইসাইকেলযুক্ত সংস্থাগুলিতে ডেটা পৃথক করে (একই সময়ে তৈরি এবং আপডেট করা হয়) যাতে আপনি নির্ভরযোগ্যভাবে ক্যাশে এবং ক্যাশে আবদ্ধ করতে পারেন - অন্যদিকে নন-রেস্ট-এপিসগুলি প্রায়শই ডেটা ফেরত দেয় ভারী পোস্ট প্রক্রিয়াজাত করা হয়েছে বা একাধিক সত্তার সমষ্টি যা ক্যাশে করা শক্ত করে তোলে
স্কট শুলথেস

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

4
"আরআরইএসটি আপনাকে জিনিসগুলি সংগঠিত করতে সহায়তা করে না It এটি আপনাকে ব্যবহার করে এমন সার্ভার-সাইড লাইব্রেরি দ্বারা সমর্থিত API ব্যবহার করতে বাধ্য করে।" আপনি এটার অর্থ কী তা আমি নিশ্চিত নই। অতিরিক্ত সার্ভার-সাইড ফ্রেমওয়ার্ক ব্যবহার না করেই একটি RESTful এপিআই তৈরি করা পুরোপুরি সম্ভব (এবং কোনও আরইএসএসপি এআইপি নির্মাণের চেয়ে কঠিন নয়)।
মাইকেল ও।

2
"রেস্টের সাথে আপনার অতিরিক্ত যোগাযোগ স্তর প্রয়োজন" - হুমবগ, আপনি আপনার বিদ্যমান এইচটিটিপি লাইব্রেরিটি ঠিকঠাক ব্যবহার করতে পারেন।
সেরেন বোইসেন

1
@ সেরেনবয়েসেন এই উত্তরটি কিছুটা পুরানো। আমার আরও বর্তমানের পরিস্থিতি প্রতিফলিত করার জন্য এটি আপডেট করা উচিত।
পেট্র পেলার

23

REST সক্ষম করে এমন সবচেয়ে বড় সুবিধা IMHO হ'ল ক্লায়েন্ট / সার্ভারের মিলন হ্রাস করা। বিদ্যমান ক্লায়েন্টদের ব্রেক না করে সময়ের সাথে সাথে একটি REST ইন্টারফেসের বিকাশ করা অনেক সহজ।


4
আপনি একটি উদাহরণ দিতে পারেন? ধন্যবাদ!
জানু কনভস্কি

3
এটি কি আপনার অ-আরএসটি এপিআই'র উপর বিভ্রান্ত হয়েছিল তার উপর নির্ভর করবে না?
জননি

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

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

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

15

আবিষ্কারযোগ্যতা

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

অন্যান্য সরঞ্জামের সাথে সামঞ্জস্যতা

আপনি API এর যে কোনও অংশে আপনার URL টি সিআরএল করতে পারেন বা সংস্থান নেভিগেট করতে ওয়েব ব্রাউজার ব্যবহার করতে পারেন। ডিবাগিং এবং পরীক্ষার ইন্টিগ্রেশনকে অনেক সহজ করে তোলে।

মানকীয় ক্রিয়া নাম

সঠিক শব্দটি শিকার না করেই আপনাকে ক্রিয়া নির্দিষ্ট করার অনুমতি দেয়। কল্পনা করুন যদি গলি getters এবং setters আদর্শায়িত করা হয় নি, এবং কিছু লোক ব্যবহৃত retrieveএবং defineপরিবর্তে। প্রতিটি স্বতন্ত্র অ্যাক্সেস পয়েন্টের জন্য আপনাকে সঠিক ক্রিয়াটি মুখস্থ করতে হবে। এই সমস্যাটি সনাক্ত করার জন্য কেবল কয়েকটি মুষ্টিমেয় ক্রিয়া উপলব্ধ রয়েছে Know

মানক স্থিতি

যদি আপনি এমন GETএকটি উত্স উপস্থিত না থাকেন তবে 404আপনি একটি RESTful API এ ত্রুটি পেয়ে নিশ্চিত হতে পারেন । এটি একটি অ RESTful এপিআই এর সাথে বিপরীতে করুন, যা {error: "Not found"}inশ্বরের মধ্যে আবৃত ফিরে আসতে পারে কত স্তরগুলি জানে। অন্যদিকে বিকাশকারীকে একটি বার্তা লিখতে আপনার যদি অতিরিক্ত স্থানের প্রয়োজন হয় তবে আপনি সর্বদা প্রতিক্রিয়াটির শরীর ব্যবহার করতে পারেন।

উদাহরণ

একই কার্যকারিতা সহ দুটি এপিআই কল্পনা করুন, একটি REST অনুসরণ করুন এবং অন্যটি নয়। এখন API APIs এর জন্য নিম্নলিখিত ক্লায়েন্টদের কল্পনা করুন:

RESTful:

GET /products/1052/reviews
POST /products/1052/reviews       "5 stars"
DELETE /products/1052/reviews/10
GET /products/1052/reviews/10

HTTP- র:

GET /reviews?product_id=1052
POST /post_review?product_id=1052                  "5 stars"
POST /remove_review?product_id=1052&review_id=10
GET /reviews?product_id=1052&review=10

এখন নিম্নলিখিত প্রশ্নগুলি চিন্তা করুন:

  • যদি প্রতিটি ক্লায়েন্টের প্রথম কলটি কাজ করে, আপনি কীভাবে নিশ্চিত হন যে বাকিরাও কাজ করবে?

  • এপিআইতে একটি বড় আপডেট ছিল যা সেই অ্যাক্সেস পয়েন্টগুলি পরিবর্তন করতে পারে বা নাও করতে পারে। আপনাকে কতটা দস্তাবেজ পুনরায় পড়তে হবে?

  • আপনি কি শেষ কোয়েরির প্রত্যাশা করতে পারবেন?

  • আপনাকে পোস্ট করা পর্যালোচনা সম্পাদনা করতে হবে (এটি মুছার আগে)। আপনি কি ডক্স পরীক্ষা না করে এটি করতে পারেন?


এটি একটি সম্পূর্ণ তালিকা বলে মনে করা হয় না এবং এতে কেবল খুব ব্যবহারিক সুবিধা রয়েছে।
বোপ্পেএইচ

এটি একটি খুব স্মার্ট উত্তর, আমি সাধুবাদ জানাই।
এরালপবি

10

আমি রায়ান টমায়কোর কীভাবে আমি আমার স্ত্রীর কাছে REST এর ব্যাখ্যা দিয়েছিলাম তা একবার দেখার পরামর্শ দিই

তৃতীয় পক্ষের সম্পাদনা

ওয়েবব্যাকম্যাশাইন লিঙ্ক থেকে অংশ:

কিভাবে একটি উদাহরণ। আপনি একজন শিক্ষক এবং শিক্ষার্থীদের পরিচালনা করতে চান:

  • তারা কোন ক্লাসে আছে,
  • তারা কি গ্রেড পাচ্ছে,
  • জরুরী যোগাযোগ,
  • আপনি যে বইগুলি পড়ান সেগুলি সম্পর্কে তথ্য ইত্যাদি

সিস্টেম ওয়েব ভিত্তিক হন, তাহলে সম্ভবত এখানে জড়িত বিশেষ্য প্রত্যেকের জন্য একটি URL আছে: student, teacher, class, book, room, etc। ... যদি প্রতিটি ইউআরএলটির জন্য কোনও মেশিন পঠনযোগ্য উপস্থাপনা থাকে তবে সিস্টেমে নতুন সরঞ্জামগুলি ল্যাচ করা তুচ্ছ হবে কারণ সেই সমস্ত তথ্য একটি স্ট্যান্ডার্ড উপায়ে ব্যবহারযোগ্য হবে। ... আপনি একটি দেশব্যাপী সিস্টেম তৈরি করতে পারেন যা পরীক্ষার স্কোর সংগ্রহের জন্য প্রতিটি বিদ্যালয়ের সিস্টেমের সাথে কথা বলতে সক্ষম হয়েছিল।

প্রতিটি সিস্টেম একটি সাধারণ এইচটিটিপি জিইটি ব্যবহার করে একে অপরের কাছ থেকে তথ্য পেতে পারে। যদি একটি সিস্টেমে অন্য সিস্টেমে কিছু যুক্ত করার প্রয়োজন হয় তবে এটি একটি HTTP পোষ্ট ব্যবহার করবে। যদি কোনও সিস্টেম অন্য সিস্টেমে কিছু আপডেট করতে চায় তবে এটি একটি HTTP পুট ব্যবহার করে। ডেটা দেখতে কেমন হওয়া উচিত তা খুঁজে বের করার একমাত্র জিনিস।


6
স্ত্রী: এটি কি আর একটি রোবট জিনিস?
টুবু

4
এটি একটি দুর্দান্ত পাঠ্য, তবে এটি জিইটি এবং পোস্টের জন্য কেন ব্যবহার করা খারাপ হবে তার কোনও উদাহরণ দেয় নি।
দিমিত্রি সি।

9
সে কারণেই আমি কেন এটি আরও ভাল:
দিমিত্রি সি

7
লেখাটি নামিয়ে নেওয়া হয়েছে।
সার্ফেন


5

আমি প্রত্যেককে পরামর্শ দেব, যারা এই প্রশ্নের উত্তর খুঁজছেন, তারা এই "স্লাইডশো" দিয়ে যান ।

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


3

ক্যাশে।

আরএসটি-র আরও গভীরতার সুবিধাগুলি রয়েছে যা looseিলে .ালা সংযোগ এবং হাইপারটেক্সটের মাধ্যমে বিবর্তন-সক্ষমতার চারপাশে ঘুরে বেড়ায় তবে ক্যাশিং পদ্ধতি হ'ল আপনার বিশ্রামের এইচটিটিপি সম্পর্কে যত্ন নেওয়া উচিত reason


3
আপনি কী উদাহরণস্বরূপ বলতে পারেন যা ক্যাশেড হতে পারে এবং কেন ক্যাচিং কোনও অন-রেস্ট সমাধানের সাথে ঘটবে না?
দিমিত্রি সি।

2
@ দিমিত্রি সি: একটি লিঙ্ক উইকিপিডিয়া. org/article?id=19 একটি প্রক্সি দ্বারা ক্যাশে হবে না, যেহেতু এটি ইউআরএল-এ পাস করা প্যারামিটারগুলিকে উপেক্ষা করে। অন্যদিকে উইকিপিডিয়া.আর.এস.এস.টি.-এর একটি লিঙ্ক ক্যাশে হবে, বোঝা গেল?
ভিপি

6
ক্যাচিং যদি বিশ্রামের প্রধান উপকার হয় তবে আমি আপনাকে নিশ্চয়তা দিতে পারি যে আমি গত দু'বছরই আরএসএসএফুল পরিষেবা নির্মাণে ব্যয় করিনি।
ড্যারেল মিলার

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

1
তবে কেন কেবল ব্যবহার করবেন না GET /get_article/19/এবং POST /update_articleযদি ক্যাচিং করা আপনার উদ্বেগ। আপনি এখনও ঠিক সঙ্গে সবকিছু করতে পারেন GETএবং POSTএবং আমি বিশ্বাস REST"ব্যবহার করার অর্থ হল GET, POST, PUTএবং DELETEশুধুমাত্র।" এবং কেবল "ক্যোয়ারী স্ট্রিং ব্যবহার করবেন না"। সুতরাং আমি যা বলেছিলাম তা হবে না REST। তারপরে আবার কেউ সত্যই একমত হতে পারে REST না তাই আমি এটি "ওয়েব 2.0" দিয়ে একটি বালতিতে রাখছি।
টিএমএমএম

3

এটি ফিল্ডিং প্রবন্ধে লিখিত আছে । তবে আপনি যদি খুব বেশি পড়তে না চান:

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

0
  • প্রতিটি "সংস্থান" একটি আইডি দিন
  • জিনিসগুলিকে একসাথে লিঙ্ক করুন
  • স্ট্যান্ডার্ড পদ্ধতি ব্যবহার করুন
  • একাধিক উপস্থাপনা সহ সম্পদ
  • রাষ্ট্রহীনভাবে যোগাযোগ করুন

শুধু পোষ্ট এবং জিইটি দিয়ে সবকিছু করা সম্ভব? হ্যাঁ, এটি কি সেরা পন্থা? না কেন? কারণ আমাদের স্ট্যান্ডার্ড পদ্ধতি রয়েছে। আপনি যদি আবার চিন্তা করেন, কেবল GET ব্যবহার করে সমস্ত কিছু করা সম্ভব হবে .. সুতরাং কেন আমরা এমনকি পোষ্ট ব্যবহার করতে বিরক্ত করব? কারণ মান!

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


1
"কেবল জিইটি ব্যবহার করে সবকিছু করা সম্ভব হবে": আমি সিলভারলাইটে এইচটিটিপি জিইটি নিয়ে ইতিমধ্যে কিছু পরীক্ষা-নিরীক্ষা করেছি। আমার উপসংহারটি ছিল যে জিইটি বার্তাগুলি আকারে যথেষ্ট সীমিত, যেখানে POST বার্তা বড় হতে পারে (আবার: সিলভারলাইট সেটিংয়ে) in অতএব আমি সবকিছুর জন্য এইচটিটিপি পোস্ট ব্যবহার করতে বেছে নেব! :-)
দিমিত্রি সি।

উভয় সমাধান মান বিরুদ্ধে। পোষ্টের মাধ্যমে সমস্ত কিছু করা বিশেষত অনুসন্ধানের জন্য ভাল নয়। নোট করুন যে বিগত বছরগুলিতে জিইটি হিসাবে ব্যবহৃত সমস্ত অনুসন্ধান ইঞ্জিনগুলি এখন জিইটি হিসাবে কাজ করে। কেন? কারণ "পেতে" পদ্ধতির স্পাইডার্ড পাওয়ার ক্ষমতা রয়েছে ...
ভিপি

0

REST এ আবিষ্কার অনেক সহজ। আমাদের কাছে ডাব্লুএডিএল ডকুমেন্টস (traditionalতিহ্যবাহী ওয়েবসার্ভেজে ডাব্লুএসডিএলের অনুরূপ) রয়েছে যা আপনাকে বিশ্বের কাছে আপনার পরিষেবার বিজ্ঞাপন দিতে সহায়তা করবে। আপনি ইউডিডিআই আবিষ্কারগুলিও ব্যবহার করতে পারেন। Traditionalতিহ্যবাহী এইচটিটিপি পোস্ট এবং জিইটি দিয়ে লোকেরা আপনাকে কল করার জন্য আপনার বার্তা অনুরোধ এবং প্রতিক্রিয়া স্কিমাকে না জানতে পারে।


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

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

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

0

একটি সুবিধা হ'ল, আমরা ইনপুটস্ট্রিম অবজেক্ট, একটি ইউআরএল, একটি ডোম নোডের মতো বিভিন্ন উত্স থেকে এক্সএমএল ডকুমেন্টস এবং আনমর্শাল এক্সএমএল ডেটা প্রক্রিয়াজাত করতে পারি না ...


0

@ টিএমএমএম, আপনার সম্পাদনা সম্পর্কে:

GET /timeline_posts     // could return the N first posts, with links to fetch the next/previous N posts

এটি নাটকীয়ভাবে কলগুলির সংখ্যা হ্রাস করবে

এবং কোনও ক্লায়েন্ট আপনাকে এমন কোনও সার্ভার ডিজাইন করতে বাধা দেয় যা HTTP পরামিতিগুলি গ্রহণ করে আপনার ক্লায়েন্টদের যে ক্ষেত্রের মানগুলি বোঝাতে পারে ...

তবে এটি একটি বিশদ।

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

আপনার মন্তব্য হিসাবে

"সমস্ত ক্রিয়া সিআরইউডি তে সহজে মানচিত্র করে না (তৈরি করুন, পড়ুন / পুনরুদ্ধার করুন, আপডেট করুন, মুছুন)"

: একটি আরডিবিএমএস একটি সিআরইউডি পদ্ধতিরও ব্যবহার করে (নির্বাচন / সন্নিবেশ / ডিলিট / আপডেট) এবং সর্বদা ডেটা মডেলের প্রতিনিধিত্ব ও কাজ করার উপায় থাকে।

আপনার সাজা সম্পর্কে

"আপনি এমনকি অবজেক্টের ধরণের সংস্থানগুলি ব্যবহার করছেন না"

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


-1

অনুসন্ধান-স্ট্রিংগুলি অনুসন্ধান ইঞ্জিনগুলি দ্বারা উপেক্ষা করা যেতে পারে।


8
ক্যোয়ারী স্ট্রিং ব্যবহার করা সম্পূর্ণরূপে বিশ্রামের।
এমিল ইভানভ

আসলে, কিছু অনুসন্ধান ইঞ্জিন গতিশীল লিঙ্ক উপেক্ষা করে। এত বেশি কিছু না, তবে এটি এখনও ভ্রান্ত। আপনি যদি একটি ছোট সাইট চালনা করেন, তবে গুগলবট আপনার সমস্ত পৃষ্ঠাগুলিকে সূচিত করতে না পারে যদি তাদের পথে কোনও চিহ্ন চিহ্ন থাকে।
wisty

3
... যা কেবল স্পষ্টতই মিথ্যা, যখন আপনি গুগলের কথা উল্লেখ করেন: googlewebmastercentral.blogspot.com/2008/09/…
বোল্ডউইন

অনুসন্ধান-স্ট্রিংগুলির জন্য -1 অনুসন্ধান ইঞ্জিনগুলি দ্বারা উপেক্ষা করা হয় না। webmasters.googleblog.com/2008/09/…
ব্রোঞ্জের লোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.