কমান্ড / অ্যাকশন ভিত্তিক ডোমেনের জন্য কীভাবে একটি REST API ফিট করে?


24

এই নিবন্ধে লেখক দাবি করেছেন যে

কখনও কখনও, এপিআইতে এমন কোনও ক্রিয়াকলাপ প্রকাশ করা প্রয়োজন যা অন্তর্নিহিতভাবে অ RESTful নয়।

এবং সেটা

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

এটি অন্য কোথাও আমি কী পড়েছি এবং শুনেছি তা প্রতিফলিত করে।

তবে আমি এটি বেশ বিভ্রান্তিকর বলে মনে করি এবং আমি বিষয়টি সম্পর্কে আরও ভাল ধারণা পেতে চাই।

প্রথম উদাহরণ: একটি REST ইন্টারফেসের মাধ্যমে একটি ভিএম বন্ধ করে দেওয়া

আমার মনে হয়, ভিএম বন্ধের মডেল করার দুটি মূল উপায় রয়েছে। প্রতিটি উপায়ে কয়েকটি বৈচিত্র থাকতে পারে তবে আসুন আপাতত সর্বাধিক মৌলিক পার্থক্যগুলিতে মনোনিবেশ করুন।

1. সংস্থানটির রাষ্ট্রীয় সম্পত্তি প্যাচ করুন

PATCH /api/virtualmachines/42
Content-Type:application/json  

{ "state": "shutting down" }

(বিকল্পভাবে, PUTউপ-উত্সে /api/virtualmachines/42/state।)

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

2. উত্সের ক্রিয়া সম্পত্তিটিতে পুট বা পোস্ট করুন

PUT /api/virtualmachines/42/actions
Content-Type:application/json  

{ "type": "shutdown" }

ফলাফলটি প্রথম উদাহরণের মতো একই। রাজ্যটি অবিলম্বে "শাট ডাউন" তে আপডেট হবে এবং শেষ পর্যন্ত "বিদ্যুৎ বন্ধ" হয়ে যাবে।

উভয় নকশা কি বিশুদ্ধ?

কোন নকশা ভাল?

উদাহরণ II: সিকিউআরএস

আমাদের যদি এমন অনেকগুলি "ক্রিয়া" (ওরফে কমান্ড) সমেত একটি সিকিউআরএস ডোমেন থাকে যা সম্ভবত একাধিক সংস্থাগুলির আপডেট হতে পারে বা কংক্রিট রিসোর্স এবং সাব-রিসোর্সগুলিতে সিআরইউডি অপারেশনে ম্যাপ করা যায় না?

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

বা অ্যাকশন শেষের পয়েন্টগুলিতে (উদাহরণস্বরূপ আমি দ্বিতীয় পদ্ধতির মতো) সমস্ত কমান্ডকে ম্যাপ করব?

আমাদের রেখাটি কোথায় আঁকতে হবে? ডিজাইন কখন কম রিস্টফুল হয়ে যায়?

কোনও সিকিউআরএস মডেল কি এপিআইয়ের মতো আরপিসির পক্ষে আরও ভাল ফিট?

উপরের উদ্ধৃত পাঠ্য অনুসারে এটি যেমনটি আমি বুঝতে পেরেছি তেমন।

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


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

3
@ লাইভ এর সাথে কোনও ভুল নেই wrong এটি একটি একাডেমিকাল প্রশ্ন, আমি বিষয়টি সম্পর্কে আরও গভীর ধারণা পেতে চাই।
leifbattermann

উত্তর:


19

প্রথম ক্ষেত্রে (ভিএমএসের শাট ডাউন) আমি ওপি বিকল্পগুলির কোনওটিই রেস্টস্টুল বিবেচনা করব না। এটা ঠিক যে, যদি আপনি ব্যবহার রিচার্ডসন পরিপক্বতা মডেল একটি মাপকাঠি হিসেবে তারা উভয় 2 হালকা API গুলি কারণ তারা সম্পদ ও ক্রিয়া ব্যবহার করুন।

তাদের কেউই, হাইপারমিডিয়া নিয়ন্ত্রণগুলি ব্যবহার করবেন না, এবং আমার মতে, এটিই কেবলমাত্র REST এর প্রকার যা আরপিসি থেকে আরএসএসএফুল এপিআই নকশাকে আলাদা করে । অন্য কথায়, স্তর 1 এবং 2 এর সাথে লেগে থাকুন এবং বেশিরভাগ ক্ষেত্রে আপনার কাছে আরপিসি-স্টাইলের এপিআই থাকবে।

কোনও ভিএম বন্ধ করার দুটি ভিন্ন উপায়ে মডেল করার জন্য, আমি ভিএমকে নিজেই এমন একটি উত্স হিসাবে প্রকাশ করবো যেটিতে (অন্যান্য জিনিসের মধ্যে) লিঙ্ক রয়েছে:

{
    "links": [{
        "rel": "shut-down",
        "href": "/vms/1234/fdaIX"
    }, {
        "rel": "power-off",
        "href": "/vms/1234/CHTY91"
    }],
    "name": "Ploeh",
    "started": "2016-08-21T12:34:23Z"
}

যদি কোনও ক্লায়েন্ট Ploehভিএম বন্ধ করতে চায় , তবে সম্পর্কের ধরণের লিঙ্কটি অনুসরণ করা উচিত shut-down। (সাধারণত, আরএসটিফুল ওয়েব সার্ভিসেস কুকবুকে বর্ণিত হিসাবে , আপনি সম্পর্কের ধরণের জন্য আপনি একটি আইআরআই বা আরও বিস্তৃত সনাক্তকরণ স্কিম ব্যবহার করতে চান, তবে আমি উদাহরণটি যথাসম্ভব সরল রাখতে বেছে নিয়েছি))

এই ক্ষেত্রে, ক্রিয়াটি সরবরাহ করার জন্য অল্প কিছু অন্যান্য তথ্য রয়েছে, তাই ক্লায়েন্টটির উচিত URL এর মধ্যে খালি POST করা সহজ href:

POST /vms/1234/fdaIX HTTP/1.1

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

তেমনিভাবে, যদি কোনও ক্লায়েন্ট ভিএম থেকে বিদ্যুৎ বন্ধ করতে চায় তবে এটি power-offপরিবর্তে লিঙ্কটি অনুসরণ করবে ।

অন্য কথায়, লিঙ্কগুলির সম্পর্কের ধরণগুলি প্রেরণ সরবরাহ করে যা উদ্দেশ্যটি নির্দেশ করে indicate প্রতিটি সম্পর্কের ধরণের একটি নির্দিষ্ট অর্থগত তাত্পর্য রয়েছে। এই কারণেই আমরা মাঝে মাঝে শব্দার্থক ওয়েব সম্পর্কে কথা বলি ।

উদাহরণটি যতটা সম্ভব পরিষ্কার করার জন্য, আমি প্রতিটি লিঙ্কে ইচ্ছাকৃতভাবে ইউআরএলকে অস্পষ্ট করেছি। হোস্টিং সার্ভার যখন আগত অনুরোধটি গ্রহণ করবে, তখন এটি জানত যে এর fdaIXঅর্থ হ'ল শাট ডাউন এবং এর CHTY91অর্থ বিদ্যুত বন্ধ

সাধারণত, আমি কেবল ক্রিয়াটি ইউআরএলটিতেই এনকোড করব, যাতে ইউআরএলগুলি হয় /vms/1234/shut-downএবং /vms/1234/power-offযখন শেখানো হয়, যা সম্পর্কের ধরণের (শব্দার্থবিজ্ঞান) এবং ইউআরএল (বাস্তবায়নের বিশদ) এর মধ্যে পার্থক্যকে ঝাপসা করে।

আপনার কোন ক্লায়েন্ট রয়েছে তার উপর নির্ভর করে আপনি RESTful ইউআরএলগুলি হ্যাকযোগ্য না করার বিষয়ে বিবেচনা করতে পারেন ।

CQRS

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

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


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

4
@leifbattermann তারা শান্ত নয় কারণ তারা বার্তার মূল অংশটি যোগাযোগের উদ্দেশ্যে ব্যবহার করে; এটি স্পষ্টতই আরপিসি। আপনি যদি সেই সংস্থানগুলিতে পৌঁছানোর জন্য লিঙ্কগুলি ব্যবহার করেন, তবে আপনাকে কেন শরীরের মাধ্যমে অভিপ্রায়টি যোগাযোগের প্রয়োজন হবে?
সিমান

এটা বোধগম্য. আপনি কেন একটি পোস্টের পরামর্শ দিচ্ছেন? কর্মটি আদর্শবান নয়? যে কোনও ক্ষেত্রে, আপনি কীভাবে আপনার ক্লায়েন্টকে বলতে পারবেন কোন HTTP পদ্ধতিটি ব্যবহার করবেন?
লেফব্যাটারম্যান

2
@ গিল্লুম ৩১ DELETEআমার কাছে অদ্ভুত বলে মনে হচ্ছে কারণ ভিএমটি বন্ধ করার পরেও এখনও বিদ্যমান থাকবে, কেবলমাত্র "বিদ্যুৎ বন্ধ" অবস্থায় (বা এই জাতীয় মত)।
leifbattermann

1
রিসোর্সটিতে কোনও ভিএমকে পরিমিতরূপে প্রতিবিম্বিত করতে হবে না, এটি এটির কার্যকর করার উদাহরণটি উপস্থাপন করতে পারে।
guillaume31

6

একটি 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 হ'ল ক্লায়েন্টের শেষ পয়েন্টটি কোথায় থাকে আপনি কীভাবে যোগাযোগ করেন তা সম্পর্কে আরও সত্য।

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

ফিল্ডিং (২০০৮)

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


2

আপনি অনুরোধের সামগ্রী-টাইপ শিরোনাম ক্ষেত্রে কমান্ডটি নির্দিষ্ট করতে মিডিয়া প্রকারের 5 স্তরের সুবিধা অর্জন করতে পারেন ।

ভিএম উদাহরণে এটি এই লাইনের সাথে কিছু হবে

PUT /api/virtualmachines/42
Content-Type:application/json;domain-model=PowerOnVm

> HTTP/1.1 201 Created
Location: /api/virtualmachines/42/instance

তারপর

DELETE /api/virtualmachines/42/instance
Content-Type:application/json;domain-model=ShutDownVm

অথবা

DELETE /api/virtualmachines/42/instance
Content-Type:application/json;domain-model=PowerOffVm

Https://www.infoq.com/articles/rest-api-on-cqrs দেখুন


পরামর্শ দিন, 5LMT একটি প্রস্তাবিত সমাধান এবং মান দ্বারা সমর্থিত নয় । আমি সিকিউআরএস নিবন্ধটি আগে এসেছিলাম এবং এটি থেকে অনেক কিছু শিখেছি।
পিটার এল

1

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

আমার ডেস্কে কম্পিউটারের পাওয়ার অবস্থা নিয়ন্ত্রণ করার দুটি উপায় রয়েছে:

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

একটি ভিএম এর জন্য, উভয়ই বুলিয়ান মানগুলি পড়তে / লিখতে মডেল করা যায়:

  • power- যখন পরিবর্তিত হয় true, একটি নোট তৈরি করা ছাড়া অন্য কিছুই ঘটে না যে এই অবস্থায় এই স্যুইচটি রাখা হয়েছে। পরিবর্তিত হয়ে গেলে false, ভিএমকে তাত্ক্ষণিক বিদ্যুৎ-স্থিতিতে পরিণত করা হয়। সম্পূর্ণতার জন্য, কোনও লেখার পরে যদি মানটি অপরিবর্তিত হয় তবে কিছুই ঘটে না।

  • onoff- যখন পরিবর্তিত true, কিছুই যদি এমন ঘটে তাহলে powerহয়false , অন্যথায় VM- র শুরু করার আদেশ হয়। যখন পরিবর্তিত false, কিছুই কিছু ঘটে তাহলে powerহয় false, অন্যথায়, VM- র সফ্টওয়্যার একটি সুশৃঙ্খল শাটডাউন, যা এটা করতে হবে না বিজ্ঞাপিত এবং তারপর অবহিত VM- র এটি ক্ষমতা- বন্ধ দশায় যেতে পারেন করতে আদিষ্ট হয়। আবার সম্পূর্ণতার জন্য, কোনও পরিবর্তন নেই এমন কিছু লেখায় কিছুই হয় না।

এই সমস্তগুলির সাথে উপলব্ধিটি ঘটে যে মেশিনের রাজ্যটি সুইচগুলির রাজ্যকে প্রতিফলিত করে না এমন একটি পরিস্থিতি রয়েছে এবং এটি শাটডাউন চলাকালীন। powerএখনও থাকবে trueএবং onoffথাকবে false, তবে প্রসেসরটি এখনও এটি বন্ধ করে চলছে, এবং এর জন্য আমাদের আরও একটি সংস্থান যুক্ত করতে হবে যাতে মেশিনটি আসলে কী করছে তা আমরা বলতে পারি:

  • running - একটি পঠনযোগ্য মান যে true যখন ভিএম চলমান থাকে এবং falseযখন এটি হয় না তখন হাইপারভাইজারকে তার অবস্থার জন্য জিজ্ঞাসা করে নির্ধারিত হয়।

এর ফলস্বরূপ হ'ল আপনি যদি কোনও ভিএম শুরু করতে চান তবে আপনাকে অবশ্যই উত্স powerএবং onoffসংস্থানগুলি সেট করা আছে তা নিশ্চিত করতে হবে true। (আপনি powerপদক্ষেপটি স্ব-পুনরায় সেট করে এড়িয়ে যাওয়ার অনুমতি দিতে পারেন, যাতে এটি সেট করা থাকলে false, trueভিএম যাচাইযোগ্যভাবে হার্ড-স্টপ করার পরে এটি হয়ে যায় that's এটি একটি অতি-খাঁটি কাজ কিনা তা অন্য কোনও আলোচনার জন্য চরাঞ্চল)) যদি আপনি এটি একটি সুশৃঙ্খল শাটডাউন করতে চান, আপনি সেট করেonofffalse মেশিনটি আসলে বন্ধ powerহয়েছে falseকিনা তা দেখার জন্য করেছিলেন এবং পরে ফিরে আসেন, সেটি না হয়ে সেট করে ।

বাস্তব বিশ্বের মতো, আপনার এখনও ভিএম onoffপরিবর্তিত হওয়ার পরে এটি চালু করার নির্দেশিত হওয়ার সমস্যা রয়েছে falseতবে এটি এখনও runningশাটডাউনের মাঝামাঝি। আপনি কীভাবে এটি মোকাবেলা করবেন তা নীতিগত সিদ্ধান্ত।


0

উভয় নকশা কি বিশুদ্ধ?

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

এটা কম

আরে সার্ভার, ক্লায়েন্ট এখানে, আপনি কি ভিএম বন্ধ করে দিতে আপত্তি করবেন?

এবং আরও

আরে সার্ভার, এখানে ক্লায়েন্ট, আমি রিসোর্স ভিএম 42-র অবস্থাটি শাটডাউন অবস্থায় আপডেট করেছি, আপনার এই সংস্থানটির অনুলিপিটি আপডেট করুন এবং তারপরে আপনি যা উপযুক্ত মনে করেন তা-ই করুন

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

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

এর শক্তিটি হ'ল এটি প্রবাহ নিয়ন্ত্রণের ক্ষেত্রে ক্লায়েন্টকে সার্ভার থেকে ডেসপুল করে। পরে যদি সার্ভারটি VM এর সাথে কীভাবে কাজ করে তা পরিবর্তন করে তবে ক্লায়েন্টের কোনও যত্ন নেই। আপডেট করার জন্য কোনও কমান্ড শেষপয়েন্ট নেই। আরপিসি আপনার কাছ থেকে API শেষ বিন্দু পরিবর্তন shutdownকরতে shut-downআপনি আপনার সমস্ত ক্লায়েন্ট ভেঙ্গে গেছে তারা এখন কমান্ড সার্ভারে ডাকতে জানে না।

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


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

রিসোর্স, এইচটিটিপি পদ্ধতি ইত্যাদি ব্যবহারে কোনও সমস্যা নেই HT এইচটিটিপি হ'ল সর্বোপরি একটি রেস্টস্টুল প্রোটোকল। যেখানে কোনও সমস্যা তৈরি হয় সেটিকে আপনি "অ্যাকশন সমাপ্তি" বলতে কী ব্যবহার করছেন। আরআরএসটি-তে রিসোর্স রয়েছে, যা ধারণাগুলি বা জিনিসগুলিকে উপস্থাপন করে (যেমন ভার্চুয়াল মেশিন 42, বা আমার ব্যাংক অ্যাকাউন্ট) এবং এইচটিটিপি ক্রিয়াগুলি ক্লায়েন্ট এবং সার্ভারের মধ্যে এই সংস্থানগুলির অবস্থার স্থানান্তর করতে ব্যবহার করে। হ্যাঁ, ওটাই. আপনার যা করা উচিত নয় তা হ'ল এইচটিটিপি ক্রিয়াগুলির সাথে অ-রিসোর্স এন্ডপয়েন্টগুলি একত্রিত করে নতুন কমান্ডগুলি তৈরি করা create সুতরাং 'ভার্চুয়ালমাচাইনস / 42 / ক্রিয়াকলাপ' কোনও সংস্থান নয় এবং একটি বিশ্রাম সিস্টেমের মধ্যে থাকা উচিত নয়।
করম্যাক মুলহল

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

আপনি রিসোর্সে কমান্ডটি চালাতে পারেন ... আপনি কীভাবে কোনও ব্যাংক অ্যাকাউন্টে "আমানত" এবং "প্রত্যাহার" বলবেন? এটি CRUD নয় এমন কোনও কিছুর জন্য CRUD ব্যবহার করবে।
Konrad

POST /api/virtualmachines/42/shutdownকোনও "পার্শ্ব প্রতিক্রিয়া" না রেখে ব্যবহার করা ভাল । এপিআই অবশ্যই ব্যবহারকারীর বোধগম্য হবে, আমি কীভাবে জানব যে উদাহরণস্বরূপ DELETE /api/virtualmachines/42ভিএম বন্ধ করে দেবে? আমাকে একটি পার্শ্ব প্রতিক্রিয়া, একটি বাগ সংশোধন করা হয় আমরা আমাদের API গুলি ডিজাইন উচিত হতে বোধগম্য এবং স্ব-বর্ণনামূলক
কনরাড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.