কেন প্যাচ পদ্ধতিটি আদর্শবান নয়?


48

আমি এই সম্পর্কে হতাশ ছিল।

ধরুন আমার userসাথে ক্ষেত্র idএবং nameক্ষেত্র রয়েছে। আমি যদি কোনও ক্ষেত্র আপডেট করতে চাই তবে আমি এই জাতীয় উত্সটিতে কেবল একটি প্যাচ অনুরোধটি করতে পারি

PATCH /users/42
{"name": "john doe"} 

এবং তারপরে অ্যাপ্লিকেশনটি ব্যবহারকারী 42 নাম আপডেট করবে।

তবে কেন আমি যদি এই অনুরোধটি পুনরায় বলি তবে ফলাফলটি ভিন্ন হবে?

আরএফসি 5789 অনুযায়ী

প্যাচচ না নিরাপদ বা আদর্শবান


আমন্ত্রণের মধ্যে যদি অন্য কেউ ব্যবহারকারী 42{"name": "bendjamin franklin"}
gnat

@ গনট পুট পদ্ধতির জন্য একই ধরণের যুক্তি রাখে না যা পরিবর্তে আদর্শবান হিসাবে বিবেচিত হয়? ( goo.gl/t24ZSJ দেখুন )
ম্যাটেকাপু

"পুটটিতে আদর্শিক শব্দার্থক শব্দ রয়েছে এবং সুতরাং এটি সম্পূর্ণরূপে আপডেটের জন্য নিরাপদে ব্যবহার করা যেতে পারে (অর্থাত্ আমরা সংস্থার পুরো রাজ্যটি সার্ভারের কাছে প্রেরণ করি), তবে আপেক্ষিক আপডেটের জন্যও নয় (যেমন আমরা রিসোর্স স্টেটে কেবল পরিবর্তনগুলি প্রেরণ করি) , যেহেতু এটি লঙ্ঘন করবে তার শব্দার্থবিদ্যা ... "( পোষ্ট এবং রাখ অনুরোধ - এটা শুধু কনভেনশন কি? )
মশা

1
স্পষ্টতই ... তবে আপনি বলতে পারেন PUT আদর্শবান নয় কারণ দুটি সমান অনুরোধের মধ্যে একটি দ্বিতীয় ক্লায়েন্ট উভয়ের মধ্যে একটি তৃতীয় অনুরোধ করতে পারে তবে আমরা যেহেতু পূর্ববর্তী ডেটা সম্পর্কে চিন্তা করি না, এটি কোনও সমস্যা নয়। একই আর্গুমেন্ট প্যাচচ অনুরোধগুলির জন্য ধারণ করে।
ম্যাটেকাপু

2
আমি প্রাসঙ্গিক স্পেসিফিকেশন একটি রেফারেন্স যোগ করার স্বাধীনতা গ্রহণ, কারণ আমি বিশ্বাস করি যে এই প্রশ্নের প্রসঙ্গে অত্যন্ত প্রাসঙ্গিক।
পিট

উত্তর:


34

একটি প্যাচ অনুরোধ আদর্শবান হতে পারে, তবে এটি হওয়ার দরকার নেই। এ কারণেই এটি অ-আদর্শহীন হিসাবে চিহ্নিত হয়।

প্যাচচএইচ আদর্শবান হতে পারে কিনা তা প্রয়োজনীয় পরিবর্তনগুলি কীভাবে যোগাযোগ করা হয় তার উপর দৃ strongly়তার সাথে নির্ভর করে।
উদাহরণস্বরূপ, যদি প্যাচ ফর্ম্যাটটি আকারে থাকে {change: 'Name' from: 'benjamin franklin' to: 'john doe'}তবে প্রথমটির পরে কোনও প্যাচচ অনুরোধের প্রথম অনুরোধের চেয়ে আলাদা প্রভাব (ব্যর্থতার প্রতিক্রিয়া) থাকতে পারে।
আদর্শহীনতার অন্য কারণ হ'ল মূল উত্সের চেয়ে অন্য কোনও কিছুর পরিবর্তনের প্রয়োগটি সংস্থানটিকে অবৈধ রাখতে পারে। আপনি যদি পরিবর্তনটি একাধিকবার প্রয়োগ করেন তবে এটির ক্ষেত্রেও হবে।


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

3
@ রবিনগ্রিন: ধরে নিন যে সংস্থানটি সর্বাধিক একটি <name>উপাদান থাকা প্রয়োজনের সাথে এক্সএমএলে প্রতিনিধিত্ব করা হয়েছে । যদি প্যাচচএইচটি কোনও সংস্থায় একটি <name>উপাদান যুক্ত করে যা মূলত একটিতে থাকে না, তবে দু'বার প্যাচ প্রয়োগ করা (বা ইতিমধ্যে এটিতে থাকা একটি সংস্থায় এটি প্রয়োগ করা <name>) সংস্থানটিকে অবৈধ করে তোলে, কারণ এতে হঠাৎ করে দুটি <name>উপাদান থাকবে যা অনুমোদিত নয় যেমন সংস্থান জন্য।
বার্ট ভ্যান ইনজেন শেহেনো

13
আপনি যে প্রথম উদাহরণ দিয়েছেন তা আইএমএইচও সম্পর্কিত নয় কারণ এটি আদর্শবান it ডিএলটিইটির সাথে উদাহরণ যা আদর্শবান, প্রথম অনুরোধ: রিসোর্সটি বিদ্যমান ছিল তবে মুছে ফেলা হয়েছে (2XX রিটার্ন দেয়), দ্বিতীয় অনুরোধ: রিসোর্সের অস্তিত্ব নেই এবং অনুরোধের পরেও বিদ্যমান নেই, 4XX ফেরত দেয়। সার্ভারের স্থিতি পরিবর্তিত হয়নি, এভাবে আদর্শিক শক্তি। আপনার উদাহরণস্বরূপ, প্রথম অনুরোধ: বেনফ্রা থেকে জনডো পর্যন্ত প্যাচ, উত্সের নাম বেনফ্রা ছিল কিন্তু এখন জনডো (2XX রিটার্ন), দ্বিতীয় অনুরোধ: বেনফ্রা থেকে জনডো পর্যন্ত প্যাচ, উত্সের নাম জনডো এবং এখনও জোহডো (4XX ফেরত) রয়েছে। সুতরাং এটি দেখায় না যে প্যাচচিএইচআইপি হতে পারে।
sp00m

এখানে আরো বিস্তারিত: stackoverflow.com/q/4088350/1225328
sp00m

8

আমি যখন স্পষ্ট উত্তরটি মনে করি তখন যখন প্যাচএইচসিএইচটি আদর্শহীন নয় তখন এই অনুচ্ছেদটি আরএফসি 5789 থেকে এসেছে:

এমনও রয়েছে যেগুলি প্যাচ ফর্ম্যাটগুলিকে একটি পরিচিত বেস-পয়েন্ট (যেমন, ফাইলগুলিতে লগ করার জন্য পাঠ্য লাইন যুক্ত করা, বা ডাটাবেস টেবিলগুলিতে অ-সংঘর্ষকৃত সারিগুলি সংযোজন করা) থেকে পরিচালনা করার প্রয়োজন নেই, এই ক্ষেত্রে ক্লায়েন্টের অনুরোধগুলিতে একই যত্নের প্রয়োজন নেই ।

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


2

PATCHঅনুরোধগুলি কোনও উত্সটিতে প্রয়োগ করার জন্য অপারেশনগুলির একটি সেট বর্ণনা করে, যদি আপনি একই সংস্থানটিতে একই সংস্থার দু'বার প্রয়োগ করেন, ফলাফলটি একই রকম নাও হতে পারে। এটি কারণ অপারেশনগুলি সংজ্ঞায়িত করা আপনার উপর নির্ভর করে। অন্য কথায় আপনাকে মার্জ করার নিয়মগুলি সংজ্ঞায়িত করতে হবে ।

মনে রাখবেন যে একটি PATCHঅনুরোধ কেবল জেএসএন নয়, বিভিন্ন ধরণের বিন্যাসে সংস্থান প্যাচানোর জন্য ব্যবহৃত হতে পারে।

সুতরাং আপনি যদি মার্জিং বিধিগুলি আদর্শবান হিসাবে সংজ্ঞায়িত করেন তবে একটি PATCHঅনুরোধ আদর্শবান হতে পারে

উদাসীন উদাহরণ:

// Original resource
{
  name: 'Tito',
  age: 32
}

// PATCH request
{
  age: 33
}

// New resource
{
  name: 'Tito',
  age: 33
}

আদর্শহীন উদাহরণ:

// Original resource
{
  name: 'Tito',
  age: 32
}

// PATCH request
{
  $increment: 'age'
}

// New resource
{
  name: 'Tito',
  age: 33
}

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

এখন আপনি ভাবতে পারেন যে এই জাতীয় কোনও তৈরি সিনট্যাক্স ব্যবহার করা বৈধ কিনা। মান অনুসারে , এটি হ'ল:

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

এবং আপনিও ভাবতে পারেন যে PATCHএইভাবে অনুরোধগুলি ব্যবহার করা প্রশান্তিজনক কিনা এবং অনেক লোক বিবেচনা করে যে তারা তা নয়, এখানে সমস্যা সম্পর্কে প্রচুর মন্তব্য সহ একটি উত্তরের উত্তর রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.