স্পষ্টতই, REST হল এইচটিটিপি কীভাবে ব্যবহার করা যায় সে সম্পর্কে কনভেনশনগুলির একটি সেট । আমি অবাক হই যে এই সম্মেলনগুলি কী সুবিধা সরবরাহ করে। কেউ কি জানে?
স্পষ্টতই, REST হল এইচটিটিপি কীভাবে ব্যবহার করা যায় সে সম্পর্কে কনভেনশনগুলির একটি সেট । আমি অবাক হই যে এই সম্মেলনগুলি কী সুবিধা সরবরাহ করে। কেউ কি জানে?
উত্তর:
আমি মনে করি না এই একটি ভাল উত্তর পাবেন, আংশিক কারণ কেউ কিছু সত্যিই কি বাকি সম্মত হয় । উইকিপিডিয়া পৃষ্ঠা বাজওয়ার্ড উপর ভারী এবং ব্যাখ্যা উপর হালকা হয়। এই বিষয়ে লোকেরা কতটা দ্বিমত পোষণ করে তা দেখার জন্য আলোচনার পৃষ্ঠাগুলি একটি স্কিমের মূল্য। আমি যতদূর বলতে পারি, রেস্টের অর্থ এর অর্থ:
পরিবর্তে এলোমেলোভাবে নামে সেটার এবং সংগ্রহকারী URL গুলি থাকার এবং ব্যবহারের GET
সব getters এবং POST
setters সব জন্য, আমরা 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/
(বা যা-ই হোক না কেন, উদাহরণগুলি না হওয়া পর্যন্ত তাদের পক্ষে চিন্তা করা শক্ত!)
সুতরাং উপসংহারে, আমি দেখতে পাচ্ছি মাত্র দুটি সুবিধা:
synchronize("/articles/1/")
যা কিছু বলতে পারেন বা যা কিছু করতে পারেন । এটি আপনার কোডের উপর খুব বেশি নির্ভর করে।তবে আমি মনে করি কিছু বড় বড় অসুবিধা রয়েছে:
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
আপনি বিশ্রামের সাথে কীভাবে এমন কিছু করতে চান তা আমার কোনও ধারণা নেই, এবং যদি আপনি এটি এখনও বিশ্রাম হিসাবে গণনা করেন কিনা। আমি অবশ্যই আপনাকে এড়িয়ে যাব যে আপনাকে বলার চেষ্টা করে যে আপনার এটি করা উচিত নয় (বিশেষত কারণটি "কারণ এটি বিশ্রাম নয়")!
/user/{id}
, তবে তা প্রশান্তিজনক নয় Consider বিবেচনা করুন: স্ট্যাকওভারফ্লো প্রশ্নের জন্য কীভাবে এইচটিএমএল পাবেন তা জেনে আপনার ব্রাউজারটি কি প্রিগ্রোগ্রামে আসতে হবে? পৃষ্ঠা?
সহজ কথায় বলতে গেলে, আরআরএসটি হ'ল এইচটিটিপি ব্যবহার করা।
কটাক্ষপাত আছে বাকী সব বিষয়ের রায় ফিন্ডিং এর গবেষণা প্রবন্ধে । আমি মনে করি যে ওয়েব বিকাশ করছে এমন প্রত্যেক ব্যক্তির এটি পড়া উচিত।
একটি নোট হিসাবে, রয় ফিল্ডিং এইচটিটিপি প্রোটোকলের পিছনে অন্যতম মূল চালক drivers
কিছু অগ্রিমের নামকরণ করুন:
সোজা কথায়: কিছুই নয় ।
ডাউনটাতে নির্দ্বিধায় পড়ুন তবে আমি এখনও ভাবি যে অ-রেস্ট এইচটিটিপি-র কোনও বাস্তব সুবিধা নেই। সমস্ত বর্তমান উত্তর অবৈধ। বর্তমানে সর্বাধিক ভোট দেওয়া উত্তর থেকে যুক্তি:
REST এর সাথে আপনার আপনার সার্ভার-সাইড এবং ক্লায়েন্ট-সাইড স্ক্রিপ্টগুলির জন্য অতিরিক্ত যোগাযোগ স্তর প্রয়োজন => এটি বাস্তবে নন-আরএসটি এইচটিটিপি ব্যবহারের চেয়ে জটিল।
সার্ভারের মাধ্যমে প্রেরিত HTTP শিরোনাম দ্বারা ক্যাচিং নিয়ন্ত্রণ করা যায়। REST নন-রেস্ট-এ অনুপস্থিত কোনও বৈশিষ্ট্য যুক্ত করে না।
REST আপনাকে জিনিসগুলি সংগঠিত করতে সহায়তা করে না । এটা তোলে বাধ্য করে আপনি ব্যবহার করছেন সার্ভার সাইড গ্রন্থাগার দ্বারা সমর্থিত API- টি ব্যবহার করার। আপনি যখন নন-আরএসটি-অ পদ্ধতি ব্যবহার করছেন তখন আপনি একইভাবে (বা আরও ভাল) আপনার অ্যাপ্লিকেশনটি সংগঠিত করতে পারেন। যেমন মডেল-দেখুন-নিয়ন্ত্রক বা এমভিসি রাউটিং দেখুন ।
মোটেও সত্য নয়। এটি আপনার অ্যাপ্লিকেশনটিকে কতটা সুসংহত এবং ডকুমেন্ট করে তার উপর নির্ভর করে। REST ম্যাজিকালি আপনার অ্যাপ্লিকেশনটি আরও ভাল করে তুলবে না।
REST সক্ষম করে এমন সবচেয়ে বড় সুবিধা IMHO হ'ল ক্লায়েন্ট / সার্ভারের মিলন হ্রাস করা। বিদ্যমান ক্লায়েন্টদের ব্রেক না করে সময়ের সাথে সাথে একটি REST ইন্টারফেসের বিকাশ করা অনেক সহজ।
প্রতিটি সংস্থার হায়ারার্কি বা লিঙ্কগুলিতে অন্যান্য সংস্থাগুলির রেফারেন্স রয়েছে, তাই চারপাশে ব্রাউজ করা সহজ। এটি ক্লায়েন্টের বিকাশকারী মানুষের পক্ষে একটি উপকার, এটি ডক্সের সাথে নিয়মিত পরামর্শ এবং পরামর্শ দেওয়া থেকে বাঁচায়। এর অর্থ হ'ল সার্ভারটি একতরফাভাবে সংস্থানগুলির নাম পরিবর্তন করতে পারে (যতক্ষণ না ক্লায়েন্ট সফ্টওয়্যার ইউআরএলগুলি হার্ডকোড না করে) 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
এখন নিম্নলিখিত প্রশ্নগুলি চিন্তা করুন:
যদি প্রতিটি ক্লায়েন্টের প্রথম কলটি কাজ করে, আপনি কীভাবে নিশ্চিত হন যে বাকিরাও কাজ করবে?
এপিআইতে একটি বড় আপডেট ছিল যা সেই অ্যাক্সেস পয়েন্টগুলি পরিবর্তন করতে পারে বা নাও করতে পারে। আপনাকে কতটা দস্তাবেজ পুনরায় পড়তে হবে?
আপনি কি শেষ কোয়েরির প্রত্যাশা করতে পারবেন?
আপনাকে পোস্ট করা পর্যালোচনা সম্পাদনা করতে হবে (এটি মুছার আগে)। আপনি কি ডক্স পরীক্ষা না করে এটি করতে পারেন?
আমি রায়ান টমায়কোর কীভাবে আমি আমার স্ত্রীর কাছে REST এর ব্যাখ্যা দিয়েছিলাম তা একবার দেখার পরামর্শ দিই
ওয়েবব্যাকম্যাশাইন লিঙ্ক থেকে অংশ:
কিভাবে একটি উদাহরণ। আপনি একজন শিক্ষক এবং শিক্ষার্থীদের পরিচালনা করতে চান:
সিস্টেম ওয়েব ভিত্তিক হন, তাহলে সম্ভবত এখানে জড়িত বিশেষ্য প্রত্যেকের জন্য একটি URL আছে: student, teacher, class, book, room, etc
। ... যদি প্রতিটি ইউআরএলটির জন্য কোনও মেশিন পঠনযোগ্য উপস্থাপনা থাকে তবে সিস্টেমে নতুন সরঞ্জামগুলি ল্যাচ করা তুচ্ছ হবে কারণ সেই সমস্ত তথ্য একটি স্ট্যান্ডার্ড উপায়ে ব্যবহারযোগ্য হবে। ... আপনি একটি দেশব্যাপী সিস্টেম তৈরি করতে পারেন যা পরীক্ষার স্কোর সংগ্রহের জন্য প্রতিটি বিদ্যালয়ের সিস্টেমের সাথে কথা বলতে সক্ষম হয়েছিল।
প্রতিটি সিস্টেম একটি সাধারণ এইচটিটিপি জিইটি ব্যবহার করে একে অপরের কাছ থেকে তথ্য পেতে পারে। যদি একটি সিস্টেমে অন্য সিস্টেমে কিছু যুক্ত করার প্রয়োজন হয় তবে এটি একটি HTTP পোষ্ট ব্যবহার করবে। যদি কোনও সিস্টেম অন্য সিস্টেমে কিছু আপডেট করতে চায় তবে এটি একটি HTTP পুট ব্যবহার করে। ডেটা দেখতে কেমন হওয়া উচিত তা খুঁজে বের করার একমাত্র জিনিস।
আমি প্রত্যেককে পরামর্শ দেব, যারা এই প্রশ্নের উত্তর খুঁজছেন, তারা এই "স্লাইডশো" দিয়ে যান ।
আমি বুঝতে পারছিলাম না REST কী এবং এটি এত দুর্দান্ত কেন, এর উপকারিতা এবং কনস, এসওএপি থেকে পার্থক্য - তবে এই স্লাইডশোটি এত উজ্জ্বল এবং বুঝতে সহজ ছিল, তাই এটি এখন আগের চেয়ে আমার কাছে আরও স্পষ্ট।
ক্যাশে।
আরএসটি-র আরও গভীরতার সুবিধাগুলি রয়েছে যা looseিলে .ালা সংযোগ এবং হাইপারটেক্সটের মাধ্যমে বিবর্তন-সক্ষমতার চারপাশে ঘুরে বেড়ায় তবে ক্যাশিং পদ্ধতি হ'ল আপনার বিশ্রামের এইচটিটিপি সম্পর্কে যত্ন নেওয়া উচিত reason
GET /get_article/19/
এবং POST /update_article
যদি ক্যাচিং করা আপনার উদ্বেগ। আপনি এখনও ঠিক সঙ্গে সবকিছু করতে পারেন GET
এবং POST
এবং আমি বিশ্বাস REST
"ব্যবহার করার অর্থ হল GET
, POST
, PUT
এবং DELETE
শুধুমাত্র।" এবং কেবল "ক্যোয়ারী স্ট্রিং ব্যবহার করবেন না"। সুতরাং আমি যা বলেছিলাম তা হবে না REST
। তারপরে আবার কেউ সত্যই একমত হতে পারে REST
না তাই আমি এটি "ওয়েব 2.0" দিয়ে একটি বালতিতে রাখছি।
এটি ফিল্ডিং প্রবন্ধে লিখিত আছে । তবে আপনি যদি খুব বেশি পড়তে না চান:
শুধু পোষ্ট এবং জিইটি দিয়ে সবকিছু করা সম্ভব? হ্যাঁ, এটি কি সেরা পন্থা? না কেন? কারণ আমাদের স্ট্যান্ডার্ড পদ্ধতি রয়েছে। আপনি যদি আবার চিন্তা করেন, কেবল GET ব্যবহার করে সমস্ত কিছু করা সম্ভব হবে .. সুতরাং কেন আমরা এমনকি পোষ্ট ব্যবহার করতে বিরক্ত করব? কারণ মান!
উদাহরণস্বরূপ, আজ কোনও এমভিসি মডেল সম্পর্কে চিন্তাভাবনা করে আপনি কেবলমাত্র নির্দিষ্ট ধরণের ক্রিয়া যেমন পোষ্ট, জিইটি, পুট এবং মুছে ফেলতে সাড়া দিতে আপনার অ্যাপ্লিকেশনটিকে সীমাবদ্ধ করতে পারেন। এমনকি যদি হুডের নীচে সবকিছু পোস্ট এবং জিইটি-তে অনুকরণ করা হয়, তবে বিভিন্ন ক্রিয়াকলাপের জন্য আলাদা আলাদা ক্রিয়াগুলি বোঝাবেন না?
REST এ আবিষ্কার অনেক সহজ। আমাদের কাছে ডাব্লুএডিএল ডকুমেন্টস (traditionalতিহ্যবাহী ওয়েবসার্ভেজে ডাব্লুএসডিএলের অনুরূপ) রয়েছে যা আপনাকে বিশ্বের কাছে আপনার পরিষেবার বিজ্ঞাপন দিতে সহায়তা করবে। আপনি ইউডিডিআই আবিষ্কারগুলিও ব্যবহার করতে পারেন। Traditionalতিহ্যবাহী এইচটিটিপি পোস্ট এবং জিইটি দিয়ে লোকেরা আপনাকে কল করার জন্য আপনার বার্তা অনুরোধ এবং প্রতিক্রিয়া স্কিমাকে না জানতে পারে।
একটি সুবিধা হ'ল, আমরা ইনপুটস্ট্রিম অবজেক্ট, একটি ইউআরএল, একটি ডোম নোডের মতো বিভিন্ন উত্স থেকে এক্সএমএল ডকুমেন্টস এবং আনমর্শাল এক্সএমএল ডেটা প্রক্রিয়াজাত করতে পারি না ...
@ টিএমএমএম, আপনার সম্পাদনা সম্পর্কে:
GET /timeline_posts // could return the N first posts, with links to fetch the next/previous N posts
এটি নাটকীয়ভাবে কলগুলির সংখ্যা হ্রাস করবে
এবং কোনও ক্লায়েন্ট আপনাকে এমন কোনও সার্ভার ডিজাইন করতে বাধা দেয় যা HTTP পরামিতিগুলি গ্রহণ করে আপনার ক্লায়েন্টদের যে ক্ষেত্রের মানগুলি বোঝাতে পারে ...
তবে এটি একটি বিশদ।
আরও গুরুত্বপূর্ণ এটি সত্য যে আপনি আরইএসটি স্থাপত্য শৈলীর বিশাল সুবিধাগুলি উল্লেখ করেন নি (সার্ভারের রাষ্ট্রহীনতার কারণে আরও ভাল স্কেলিবিলিটি; সার্ভারের স্টেটহীনতার কারণেও অনেক বেশি সহজলভ্যতা; স্ট্যান্ডার্ড সার্ভিসেসের যেমন আরও ভাল ব্যবহার যেমন ক্যাচিং উদাহরণস্বরূপ, যখন কোনও আরইএসটি আর্কিটেকচারাল স্টাইল ব্যবহার করা হয়; ক্লায়েন্ট এবং সার্ভারের মধ্যে অনেক কম সংযোগ, ইউনিফর্ম ইন্টারফেস ব্যবহারের কারণে ইত্যাদি;)
আপনার মন্তব্য হিসাবে
"সমস্ত ক্রিয়া সিআরইউডি তে সহজে মানচিত্র করে না (তৈরি করুন, পড়ুন / পুনরুদ্ধার করুন, আপডেট করুন, মুছুন)"
: একটি আরডিবিএমএস একটি সিআরইউডি পদ্ধতিরও ব্যবহার করে (নির্বাচন / সন্নিবেশ / ডিলিট / আপডেট) এবং সর্বদা ডেটা মডেলের প্রতিনিধিত্ব ও কাজ করার উপায় থাকে।
আপনার সাজা সম্পর্কে
"আপনি এমনকি অবজেক্টের ধরণের সংস্থানগুলি ব্যবহার করছেন না"
: একটি আধ্যাত্মিক নকশা হ'ল সংক্ষেপে, একটি সাধারণ নকশা - তবে এর অর্থ এই নয় যে এটি নকশা করা সহজ। আপনি পার্থক্য দেখতে পান কি ? আপনার অ্যাপ্লিকেশনটি যে ধারণাগুলি উপস্থাপন করবে এবং পরিচালনা করবে তা সম্পর্কে আপনাকে অনেক কিছু ভাবতে হবে, যদি আপনি পছন্দ করেন তবে এটি সংস্থানগুলির মাধ্যমে উপস্থাপন করতে হবে। তবে আপনি যদি এটি করেন তবে আপনি আরও সহজ এবং দক্ষ ডিজাইনের সাহায্যে শেষ করবেন।
অনুসন্ধান-স্ট্রিংগুলি অনুসন্ধান ইঞ্জিনগুলি দ্বারা উপেক্ষা করা যেতে পারে।