দ্রষ্টব্য : আমি যখন প্রথম বিশ্রামের বিষয়ে পড়ার সময় ব্যয় করি তখন আদর্শ পাওয়ার সঠিক হওয়ার চেষ্টা করার জন্য একটি বিভ্রান্তিমূলক ধারণা ছিল। আমি এখনও আমার আসল উত্তরে এটি সঠিকভাবে পাইনি, যেমন আরও মন্তব্য (এবং জেসন হোয়েটারের উত্তর ) দেখিয়েছে। কিছুক্ষণের জন্য, জেসনকে কার্যকরভাবে চুরি করা এড়াতে, আমি এই উত্তরটি ব্যাপকভাবে আপডেট করার বিরুদ্ধে প্রতিরোধ করেছি, তবে আমি এখন এটি সম্পাদনা করছি কারণ, ভাল, আমাকে জিজ্ঞাসা করা হয়েছিল (মন্তব্যে)।
আমার উত্তরটি পড়ার পরে, আমি আপনাকে এই প্রশ্নের জেসন হেটজারের দুর্দান্ত উত্তরটিও পড়ার পরামর্শ দিচ্ছি এবং আমি জেসন থেকে চুরি না করেই আমার উত্তর আরও ভাল করার চেষ্টা করব।
পুট আদর্শবান কেন?
যেমন আপনি আপনার আরএফসি 2616 উদ্ধৃতিতে উল্লেখ করেছেন, পুটকে আদর্শবান হিসাবে বিবেচনা করা হয়। আপনি যখন কোনও সংস্থান স্থাপন করেন, তখন এই দুটি অনুমানগুলি খেলায় থাকে:
আপনি কোনও সংস্থার উদ্দেশ্যে নয়, কোনও সত্তাটির উল্লেখ করছেন।
আপনি যে সত্তা সরবরাহ করছেন তা সম্পূর্ণ ( সম্পূর্ণ সত্তা)।
আসুন আপনার একটি উদাহরণ তাকান।
{ "username": "skwee357", "email": "skwee357@domain.com" }
যদি আপনি এই নথিকে পোস্ট /users
করেন তবে আপনার পরামর্শ অনুসারে আপনি কোনও সত্তা যেমন ফিরে পেতে পারেন
## /users/1
{
"username": "skwee357",
"email": "skwee357@domain.com"
}
আপনি যদি এই সত্তাটি পরে পরিবর্তন করতে চান তবে আপনি PUT এবং PATCH এর মধ্যে বেছে নিন। একটি পুট দেখতে পারে:
PUT /users/1
{
"username": "skwee357",
"email": "skwee357@gmail.com" // new email address
}
আপনি প্যাচএইচচ ব্যবহার করে এটি সম্পাদন করতে পারেন। এটি দেখতে এইরকম হতে পারে:
PATCH /users/1
{
"email": "skwee357@gmail.com" // new email address
}
আপনি এই দুইয়ের মধ্যেই একটি পার্থক্য লক্ষ্য করবেন notice PUT এই ব্যবহারকারীর সমস্ত পরামিতি অন্তর্ভুক্ত করেছে, তবে প্যাচএইচএইচএইচ (পিএইচসিএইচ) কেবলমাত্র সেইটিকেই সংশোধন করা হয়েছিল ( email
)।
PUT ব্যবহার করার সময়, ধরে নেওয়া হয় যে আপনি সম্পূর্ণ সত্তা প্রেরণ করছেন, এবং সেই সম্পূর্ণ সত্তা সেই ইউআরআই-তে কোনও বিদ্যমান সত্তাকে প্রতিস্থাপন করে । উপরের উদাহরণে, পুট এবং প্যাচ একই লক্ষ্য অর্জন করে: তারা উভয়ই এই ব্যবহারকারীর ইমেল ঠিকানা পরিবর্তন করে। কিন্তু পুট পুরো সত্তাকে প্রতিস্থাপন করে এটি পরিচালনা করে, অন্যদিকে প্যাচচ কেবল সরবরাহিত ক্ষেত্রগুলিকেই আপডেট করে অন্যকে একা রেখে।
যেহেতু পিইটি অনুরোধগুলি পুরো সত্তাকে অন্তর্ভুক্ত করে, আপনি যদি একই অনুরোধ বারবার ইস্যু করেন তবে এর সর্বদা একই ফলাফল হওয়া উচিত (আপনি যে ডেটা প্রেরণ করেছিলেন সেটি এখন সত্তার পুরো ডেটা)। সুতরাং পুট আদর্শবান।
PUT ভুল ব্যবহার
আপনি যদি একটি পিটি অনুরোধে উপরের প্যাচচ ডেটা ব্যবহার করেন তবে কী হবে?
GET /users/1
{
"username": "skwee357",
"email": "skwee357@domain.com"
}
PUT /users/1
{
"email": "skwee357@gmail.com" // new email address
}
GET /users/1
{
"email": "skwee357@gmail.com" // new email address... and nothing else!
}
(আমি এই প্রশ্নের উদ্দেশ্যে ধরে নিচ্ছি যে সার্ভারের কোনও নির্দিষ্ট প্রয়োজনীয় ক্ষেত্র নেই, এবং এটি ঘটতে দেবে ... বাস্তবে এমনটি নাও হতে পারে।)
যেহেতু আমরা পুট ব্যবহার করেছি, তবে কেবল সরবরাহ করেছি email
, এখন এই সত্তার মধ্যে এটিই একমাত্র জিনিস। এর ফলে ডেটা ক্ষতি হয়।
উদাহরণটি উদাহরণস্বরূপ এখানে - বাস্তবে কখনও এটি করবেন না। এই পুট অনুরোধটি প্রযুক্তিগতভাবে আদর্শবান, তবে এর অর্থ এটি কোনও ভয়ানক, ভাঙা ধারণা নয়।
প্যাচচ কীভাবে আদর্শবান হতে পারে?
উপরের উদাহরণে, প্যাচচ আদর্শবান ছিলেন । আপনি একটি পরিবর্তন করেছেন, তবে আপনি যদি বার বার একই পরিবর্তন করেন তবে এটি সর্বদা একই ফলটি ফিরিয়ে দেয়: আপনি ইমেল ঠিকানাটি নতুন মানতে পরিবর্তন করেছেন।
GET /users/1
{
"username": "skwee357",
"email": "skwee357@domain.com"
}
PATCH /users/1
{
"email": "skwee357@gmail.com" // new email address
}
GET /users/1
{
"username": "skwee357",
"email": "skwee357@gmail.com" // email address was changed
}
PATCH /users/1
{
"email": "skwee357@gmail.com" // new email address... again
}
GET /users/1
{
"username": "skwee357",
"email": "skwee357@gmail.com" // nothing changed since last GET
}
আমার আসল উদাহরণ, নির্ভুলতার জন্য স্থির
আমার কাছে প্রাথমিকভাবে এমন উদাহরণ ছিল যা আমি ভেবেছিলাম যে আদর্শহীনতা প্রদর্শন করছে তবে তারা বিভ্রান্তিকর / ভুল ছিল। আমি উদাহরণগুলি রাখছি, তবে সেগুলি একটি ভিন্ন বিষয় চিত্রিত করতে ব্যবহার করুন: একই অস্তিত্বের বিরুদ্ধে একাধিক প্যাচ ডকুমেন্টগুলি, বিভিন্ন বৈশিষ্ট্যগুলিকে সংশোধন করে, প্যাচগুলি অ-আদর্শবান করে তোলে না।
ধরা যাক কিছু আগের সময়ে, একজন ব্যবহারকারী যুক্ত হয়েছিল। এটি সেই রাষ্ট্র যা থেকে আপনি শুরু করছেন।
{
"id": 1,
"name": "Sam Kwee",
"email": "skwee357@olddomain.com",
"address": "123 Mockingbird Lane",
"city": "New York",
"state": "NY",
"zip": "10001"
}
প্যাচ করার পরে আপনার একটি সংশোধিত সত্তা রয়েছে:
PATCH /users/1
{"email": "skwee357@newdomain.com"}
{
"id": 1,
"name": "Sam Kwee",
"email": "skwee357@newdomain.com", // the email changed, yay!
"address": "123 Mockingbird Lane",
"city": "New York",
"state": "NY",
"zip": "10001"
}
আপনি যদি বার বার আপনার প্যাচটি প্রয়োগ করেন, আপনি একই ফল পেতে থাকবেন: ইমেলটি নতুন মানতে পরিবর্তিত হয়েছিল। এ ,ুকে যায়, এ বেরিয়ে আসে, সুতরাং এটি আদর্শবান।
এক ঘন্টা পরে, আপনি কিছু কফি তৈরি করতে এবং বিরতি নেওয়ার পরে, অন্য কেউ তাদের নিজস্ব প্যাচ সহ আসেন। দেখে মনে হচ্ছে পোস্ট অফিস কিছু পরিবর্তন আনছে।
PATCH /users/1
{"zip": "12345"}
{
"id": 1,
"name": "Sam Kwee",
"email": "skwee357@newdomain.com", // still the new email you set
"address": "123 Mockingbird Lane",
"city": "New York",
"state": "NY",
"zip": "12345" // and this change as well
}
যেহেতু পোস্ট অফিস থেকে এই প্যাচএইচটি ইমেলের সাথে নিজেকে উদ্বেগ দেয় না, কেবল পিন কোড, যদি এটি বারবার প্রয়োগ করা হয় তবে এটিও একই ফলাফল পাবেন: জিপ কোডটি নতুন মানকে সেট করা হয়েছে। এ ,ুকে যায়, এ বেরিয়ে আসে, সুতরাং এটি আদর্শবানও।
পরের দিন, আপনি আবার আপনার প্যাচ প্রেরণ করার সিদ্ধান্ত নিয়েছেন।
PATCH /users/1
{"email": "skwee357@newdomain.com"}
{
"id": 1,
"name": "Sam Kwee",
"email": "skwee357@newdomain.com",
"address": "123 Mockingbird Lane",
"city": "New York",
"state": "NY",
"zip": "12345"
}
গতকাল আপনার প্যাচটির একই প্রভাব ছিল: এটি ইমেল ঠিকানা সেট করে। এ ,ুকে গেল, এ বেরিয়ে এসেছিল, সুতরাং এটি আদর্শবানও।
আমার মূল উত্তরে আমি কী ভুল পেয়েছি
আমি একটি গুরুত্বপূর্ণ পার্থক্য আঁকতে চাই (আমার মূল উত্তরে আমি ভুল পেয়েছি)। অনেক সার্ভার আপনার পরিবর্তনগুলি (যদি থাকে তবে) দিয়ে নতুন সত্ত্বা রাষ্ট্রটি প্রেরণ করে আপনার বিশ্রামের অনুরোধের জবাব দেবে। সুতরাং, আপনি যখন এই প্রতিক্রিয়াটি ফিরে পাবেন, গতকাল আপনি যেটি পেয়েছিলেন তার থেকে আলাদা হয় , কারণ পিন কোডটি আপনি গতবারের মতো পেয়েছিলেন না। তবে আপনার অনুরোধটি কেবল ইমেলের সাথে জিপ কোড সম্পর্কিত নয়। সুতরাং আপনার প্যাচএইচ ডকুমেন্টটি এখনও আদর্শবান - আপনি প্যাচএইচএচ-এ পাঠানো ইমেলটি এখন সত্তার ইমেল ঠিকানা।
সুতরাং যখন প্যাচচ যখন আদর্শবান হয় না, তখন?
এই প্রশ্নের সম্পূর্ণ চিকিত্সার জন্য, আমি আবার আপনাকে জেসন হেইটজারের উত্তরটি উল্লেখ করব । আমি কেবল এটি এ ছেড়ে চলেছি, কারণ আমি সত্যই বলে মনে করি না যে আমি ইতিমধ্যে তার অংশের চেয়ে এই অংশটির উত্তর দিতে পারি।