একটি REST ইন্টারফেসের মাধ্যমে একটি ভিএম বন্ধ করা হচ্ছে
এটি আসলে কিছুটা বিখ্যাত উদাহরণ, ২০০৯ সালে টিম ব্রে দ্বারা প্রকাশিত ।
সমস্যাটি নিয়ে রায় ফিল্ডিং এই পর্যবেক্ষণটি ভাগ করেছেন :
আমি ব্যক্তিগতভাবে এমন সিস্টেমগুলি পছন্দ করি যা নিরীক্ষিত রাষ্ট্রকে (পাওয়ার স্ট্যাটাসের মতো) অ-সম্পাদনাযোগ্য হিসাবে বিবেচনা করে।
সংক্ষেপে, আপনার কাছে একটি তথ্য সংস্থান রয়েছে যা নিরীক্ষিত রাষ্ট্রের বর্তমান প্রতিনিধিত্ব করে; সেই প্রতিনিধিত্বটিতে সেই ফর্মের হাইপারমিডিয়া লিঙ্ক অন্তর্ভুক্ত থাকতে পারে যা সেই অবস্থায় পরিবর্তনের জন্য অনুরোধ করতে পারে এবং (প্রতিটি) পরিবর্তনের অনুরোধটি পরিচালনা করার জন্য এই ফর্মটির অন্য কোনও লিঙ্ক রয়েছে।
শেঠ লাডে সমস্যার মূল অন্তর্দৃষ্টি ছিল
আমরা একজন ব্যক্তির সাধারণ অবস্থা থেকে রানিংকে সত্যিকারের বিশেষ্যতে পরিণত করেছি যা তৈরি, আপডেট এবং কথা বলা যেতে পারে।
এটিকে রিবুটিং মেশিনে ফিরিয়ে নেওয়া। আমি যুক্তি দিয়ে বলব যে আপনি / vdc / 434 / ক্লাস্টার / 4894 / সার্ভার / 4343 / রিবুটগুলিতে পোস্ট করতে পারেন একবার আপনি পোস্ট করার পরে আপনার কাছে একটি ইউআরআই রয়েছে যা এই রিবুটটি উপস্থাপন করে এবং আপনি স্থিতি আপডেটের জন্য এটি পেতে পারেন। হাইপারলিংকের যাদুতে, রিবুটটির উপস্থাপনাটি পুনরায় বুট করা সার্ভারের সাথে যুক্ত হয়।
আমি মনে করি ইউআরআই স্পেসকে টুকরো টুকরো করা সস্তা এবং ইউআরআই এর দাম আরও কম। Nouns হিসাবে মডেলিং, এবং পোস্ট, পুট, এবং মুছে ফেলুন ক্রিয়াকলাপের একটি সংগ্রহ তৈরি করুন!
RESTful প্রোগ্রামিং হ'ল ওয়েব স্কেলে ভোগন আমলাতন্ত্র। আপনি কীভাবে বিশ্রামের কিছু করবেন ? এটির জন্য নতুন কাগজপত্র আবিষ্কার করুন এবং কাগজপত্র ডিজিটালাইজ করুন।
কিছুটা কল্পিত ভাষায়, আপনি যা করছেন তা হ'ল "একটি ভিএম বন্ধ করুন" এর জন্য ডোমেন অ্যাপ্লিকেশন প্রোটোকলটি সংজ্ঞায়িত করা এবং সেই প্রোটোকলটি প্রকাশ / বাস্তবায়নের জন্য আপনার প্রয়োজনীয় সংস্থানগুলি সনাক্ত করা
আপনার নিজস্ব উদাহরণ তাকান
PATCH /api/virtualmachines/42
Content-Type:application/json
{ "state": "shutting down" }
ঠিক আছে; আপনি অনুরোধটিকে তার নিজস্ব পৃথক তথ্য সংস্থান হিসাবে সত্যই চিকিত্সা করছেন না, তবে আপনি এখনও পরিচালনা করতে পারেন।
আপনার পরিবর্তনের প্রতিনিধিত্ব থেকে আপনি কিছুটা মিস করেছেন।
প্যাচএইচ, তবে, সংযুক্ত সত্তায় নির্দেশাবলীর একটি সেট রয়েছে যা বর্ণনা করে যে কীভাবে বর্তমানে উত্সের সার্ভারে বসবাসরত কোনও সংস্থানটি নতুন সংস্করণ তৈরি করতে পরিবর্তন করা উচিত।
উদাহরণস্বরূপ, তাদেরকে JSON প্যাচ মিডিয়া টাইপ ফরম্যাটের নির্দেশাবলী আপনি সরাসরি একটি JSON- ডকুমেন্ট পরিবর্তন হয়েছিল যেন
[
{ "op": "replace", "path": "state", "value": "shutting down" }
]
আপনার বিকল্পে, ধারণাটি নিকটবর্তী, তবে স্পষ্টতই সঠিক নয়। টার্গেট ইউআরএলটিতেPUT
সংস্থানস্থলের স্থিতির সম্পূর্ণ প্রতিস্থাপন , সুতরাং আপনি সম্ভবত কোনও একক সত্তার প্রতিনিধিত্বের লক্ষ্য হিসাবে সংগ্রহের মতো দেখতে এমন কোনও বানান চয়ন করবেন না ।
POST /api/virtualmachines/42/actions
কথাসাহিত্যের সাথে সামঞ্জস্যপূর্ণ যে আমরা একটি কাতারে একটি ক্রিয়া যুক্ত করছি
PUT /api/virtualmachines/42/latestAction
কথাসাহিত্যের সাথে সামঞ্জস্যপূর্ণ যে আমরা সারিতে লেজ আইটেমটি আপডেট করছি; এটি এভাবে করা কিছুটা অদ্ভুত ন্যূনতম বিস্ময়ের মূলনীতিটি প্রত্যেকটি এক জায়গায় রাখার পরিবর্তে এবং একসাথে একাধিক সংস্থান পরিবর্তনের পরিবর্তে প্রতিটি PUT এর নিজস্ব অনন্য শনাক্তকরণ দেওয়ার প্রস্তাব দেয়।
দ্রষ্টব্য, যতদূর আমরা ইউআরআই-এর বানান নিয়ে আলোচনা করছি - REST এর কোনও যত্ন নেই; /cc719e3a-c772-48ee-b0e6-09b4e7abbf8b
যতক্ষণ না REST এর সাথে সম্পর্কিত তবে এটি সম্পূর্ণরূপে ক্রমযুক্ত ইউআরআই। পরিবর্তনশীল নামের মতো পঠনযোগ্যতা একটি পৃথক উদ্বেগ। বানানের যে সঙ্গে সামঞ্জস্যপূর্ণ হয় ব্যবহার বোঝায় যা RFC 3986 করব মানুষ অনেক সুখী।
CQRS
আমাদের যদি এমন অনেকগুলি "ক্রিয়া" (ওরফে কমান্ড) সমেত একটি সিকিউআরএস ডোমেন থাকে যা সম্ভবত একাধিক সংস্থাগুলির আপডেট হতে পারে বা কংক্রিট রিসোর্স এবং সাব-রিসোর্সগুলিতে সিআরইউডি অপারেশনে ম্যাপ করা যায় না?
সিকিউআরএসে গ্রেগ ইয়ং
সিকিউআরএস একটি খুব সাধারণ প্যাটার্ন যা আর্কিটেকচারের জন্য অনেকগুলি সুযোগ সক্ষম করে যা অন্যথায় বিদ্যমান থাকতে পারে না। সিকিউআরএস কোনও ঘটনাগত ধারাবাহিকতা নয়, এটি ইভেন্ট নয়, এটি মেসেজিং নয়, এটি পড়ার জন্য এবং লেখার জন্য আলাদা আলাদা মডেল রাখছে না বা ইভেন্ট সোর্সিং ব্যবহার করছে না।
বেশিরভাগ লোকেরা যখন সিকিউআরএস সম্পর্কে কথা বলেন তারা সত্যই অ্যাপ্লিকেশনটির পরিষেবার সীমানা উপস্থাপন করে এমন বস্তুটিতে সিকিউআরএস প্যাটার্ন প্রয়োগ করার কথা বলছেন।
আপনি HTTP / REST এর প্রসঙ্গে CQRS সম্পর্কে কথা বলছেন, এই ধারণাটি যুক্তিসঙ্গত বলে মনে হয় যে আপনি এই উত্তর প্রসঙ্গে কাজ করছেন, সুতরাং আসুন আমরা এটি নিয়ে চলি।
আশ্চর্যজনকভাবে এটি একটি আপনার আগের উদাহরণের চেয়েও সহজ। এর কারণটি সহজ: কমান্ডগুলি বার্তা ।
জিম ওয়েবার এইচটিটিপিকে 1950 এর অফিসের অ্যাপ্লিকেশন প্রোটোকল হিসাবে বর্ণনা করেছেন; বার্তা গ্রহণ করে এবং এগুলিকে ইনবক্সে রেখে কাজটি হয়ে যায় gets একই ধারণা ধারণ করে - আমরা একটি ফর্মের একটি ফাঁকা অনুলিপি পাই, এটি আমাদের জানা নির্দিষ্ট বিবরণ দিয়ে পূরণ করুন, বিতরণ করুন। তা দা
কংক্রিটের উত্সগুলি বা কংক্রিট সংস্থাগুলির উপর আপডেট হিসাবে যতগুলি কমান্ড তৈরি করা সম্ভব হয়েছে যেখানে মডেল করার চেষ্টা করা উচিত (যেখানে উদাহরণস্বরূপ আমি প্রথম পদ্ধতির অনুসরণ করছি) এবং বাকীগুলির জন্য "অ্যাকশন এন্ডপয়েন্টস" ব্যবহার করব?
হ্যাঁ, "কংক্রিট রিসোর্সগুলি" হিসাবে ইনসোফারটি ডোমেন মডেলের সত্তাগুলির চেয়ে বার্তা।
মূল ধারণা: আপনার REST এপিআই এখনও একটি ইন্টারফেস ; বার্তাগুলি পরিবর্তন করার প্রয়োজন নেই ক্লায়েন্টদের ছাড়াই আপনার অন্তর্নিহিত মডেলটি পরিবর্তন করতে সক্ষম হওয়া উচিত। আপনি যখন একটি নতুন মডেল প্রকাশ করেন, আপনি আপনার ওয়েব এন্ডপয়েন্টগুলির একটি নতুন সংস্করণ প্রকাশ করেন যা আপনার ডোমেন প্রোটোকলটি কীভাবে নিতে হয় এবং এটি নতুন মডেলটিতে প্রয়োগ করতে হয় তা জানে।
কোনও সিকিউআরএস মডেল কি এপিআইয়ের মতো আরপিসির পক্ষে আরও ভাল ফিট?
সত্যই নয় - বিশেষত, ওয়েব ক্যাশগুলি "শেষ পর্যন্ত ধারাবাহিকভাবে পড়া মডেল" এর দুর্দান্ত উদাহরণ। আপনার প্রতিটি মতামতকে স্বতন্ত্রভাবে সম্বোধনযোগ্য করে তোলা, তাদের নিজস্ব ক্যাশে বিধিগুলি সহ, আপনাকে নিখরচায় স্কেলিং দেয়। পড়ার জন্য একচেটিয়া আরপিসির পদ্ধতির কাছে তুলনামূলকভাবে খুব কম আবেদন রয়েছে।
বলে গেছেন, এটি একটি tricker প্রশ্ন: একটি একক শেষবিন্দু এ একটি একক হ্যান্ডলার সব কমান্ড পাঠানো, বা এন্ড পয়েন্ট একটি একক পরিবার, অবশ্যই সহজ । REST হ'ল ক্লায়েন্টের শেষ পয়েন্টটি কোথায় থাকে আপনি কীভাবে যোগাযোগ করেন তা সম্পর্কে আরও সত্য।
কোনও বার্তাটিকে তার নিজস্ব অনন্য সংস্থান হিসাবে বিবেচনা করার সুবিধা রয়েছে যে আপনি পিটি ব্যবহার করতে পারবেন, মধ্যস্থতাকারী উপাদানগুলিকে সতর্ক করে দিয়ে বার্তাটি পরিচালনা করা আদর্শবান, যাতে তারা ত্রুটি পরিচালনার ক্ষেত্রে কিছু ক্ষেত্রে অংশ নিতে পারে তবে তা খুব সুন্দর । (দ্রষ্টব্য: ক্লায়েন্টদের দৃষ্টিকোণ থেকে, যদি সংস্থানগুলির আলাদা আলাদা ইউআরআই থাকে, তবে তারা বিভিন্ন সংস্থান হয়; সত্য যে সত্য যে তাদের সকলের কাছে একই সার্ভারে অনুরোধ হ্যান্ডলার কোডটি ইউনিফর্মের মাধ্যমে লুকানো রয়েছে) ইন্টারফেস).
ফিল্ডিং (২০০৮)
আমার এও লক্ষ্য করা উচিত যে উপরেরগুলি এখনও পুরোপুরি বিশ্রামের নয়, কমপক্ষে কীভাবে আমি এই শব্দটি ব্যবহার করি। আমি যা কিছু করেছি সেগুলি পরিষেবা ইন্টারফেসগুলি বর্ণিত হয়েছে, যা কোনও আরপিসির চেয়ে বেশি নয়। এটিকে রেস্টলফুল করার জন্য, পরিষেবাটি প্রবর্তন ও সংজ্ঞায়িত করতে, ফর্ম এবং / অথবা লিঙ্ক টেমপ্লেটগুলি ব্যবহার করে কীভাবে ম্যাপিং করা যায় তা বর্ণনা করতে এবং কার্যকর উপায়ে ভিজ্যুয়ালাইজেশনের সংমিশ্রনের জন্য কোড সরবরাহ করতে আমার হাইপারটেক্সট যুক্ত করতে হবে।