REST এ PUT বনাম POST


5370

HTTP / 1.1 স্পেস অনুসারে:

POSTপদ্ধতি অনুরোধ করতে ব্যবহৃত হয় যে মূল সার্ভার সত্তা রিসোর্স একটি নতুন অধীনস্থ দ্বারা চিহ্নিত হিসাবে অনুরোধে ঘিরা গ্রহণ Request-URIমধ্যেRequest-Line

অন্য কথায়, তৈরি করতেPOST ব্যবহৃত হয় ।

PUTপদ্ধতি অনুরোধ ঘিরা সত্তা সরবরাহকৃত অধীনে সংরক্ষণ করা Request-URI। যদি Request-URIইতিমধ্যে বিদ্যমান সংস্থানটিকে বোঝায় তবে সংযুক্ত সত্তা মূল সার্ভারে থাকা একের পরিবর্তিত সংস্করণ হিসাবে বিবেচিত হবে। যদি Request-URIবিদ্যমান বিদ্যমান সংস্থানটির দিকে ইঙ্গিত না করে এবং ইউআরআই অনুরোধকারী ব্যবহারকারী এজেন্ট দ্বারা নতুন সংস্থান হিসাবে সংজ্ঞায়িত করতে সক্ষম হয় তবে উত্স সার্ভার সেই ইউআরআই দিয়ে সংস্থান তৈরি করতে পারে ""

অর্থাৎ তৈরি বা প্রতিস্থাপনেPUT ব্যবহৃত হয় ।

সুতরাং, কোনটি একটি সংস্থান তৈরি করতে ব্যবহার করা উচিত? নাকি একজনকে দুজনকেই সমর্থন করা দরকার?


56
এইচটিটিপিবিসে সংজ্ঞাগুলি ব্যবহার করা সহায়ক হতে পারে - রায় তাদের স্পষ্ট করার জন্য যথেষ্ট পরিমাণে কাজ রেখেছিলেন। দেখুন: সরঞ্জাম. ietf.org/html/…
মার্ক নটিংহাম

16
শুধুমাত্র সাম্প্রতিক পুনর্বিবেচনা @ MarkNottingham এর মন্তব্য আনতে, এখানে পোষ্ট এবং PUT যেমন HTTPbis সংজ্ঞাসমূহ।
মারিয়াস বুটুক

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

5
দুর্ভাগ্যক্রমে প্রথম উত্তরগুলি পোষ্ট সম্পর্কে ভুল। : পার্থক্য একটি ভাল ব্যাখ্যা জন্য আমার উত্তর চেক করুন stackoverflow.com/a/18243587/2458234
7hi4g0

23
PUT এবং POST উভয়ই অনিরাপদ পদ্ধতি। তবে, পুট আদর্শবান, যদিও পোষ্টটি নেই। - আরও দেখুন এখানে: রেস্টকুকবুক.com
দিনেশ

উত্তর:


4235

সার্বিক:

PUT এবং POST উভয়ই তৈরির জন্য ব্যবহার করা যেতে পারে।

আপনাকে জিজ্ঞাসা করতে হবে "আপনি এ্যাকশনটি কী করছেন?" আপনার কী ব্যবহার করা উচিত তা আলাদা করতে। ধরে নেওয়া যাক আপনি প্রশ্ন জিজ্ঞাসার জন্য একটি এপিআই ডিজাইন করছেন। আপনি যদি পোষ্টটি ব্যবহার করতে চান তবে আপনি প্রশ্নের তালিকায় এটি করতে পারেন। আপনি যদি পুট ব্যবহার করতে চান তবে আপনি এটি একটি বিশেষ প্রশ্নে করতে পারেন।

দুর্দান্ত দুটিই ব্যবহার করা যেতে পারে, তাই আমার বিশ্রামের নকশায় কোনটি ব্যবহার করা উচিত:

আপনার PUT এবং পোস্ট উভয়ই সমর্থন করার দরকার নেই।

যা ব্যবহৃত হয় তা আপনার কাছে রেখে দেওয়া হয়। তবে অনুরোধে আপনি কোন বিষয়টিকে উল্লেখ করছেন তার উপর নির্ভর করে সঠিকটি ব্যবহার করতে ভুলবেন না।

কিছু বিবেচনা:

  • আপনি কি আপনার ইউআরএল অবজেক্টগুলির নাম স্পষ্টভাবে তৈরি করেছেন, বা সার্ভারকে সিদ্ধান্ত নিতে দিয়েছেন? আপনি যদি তাদের নাম দেন তবে পুট ব্যবহার করুন। আপনি যদি সার্ভারটিকে সিদ্ধান্ত নিতে দেন তবে পোষ্টটি ব্যবহার করুন।
  • পুট আদর্শবান, সুতরাং আপনি যদি কোনও বস্তুকে দু'বার রাখেন তবে এর কোনও প্রভাব নেই। এটি একটি দুর্দান্ত সম্পত্তি, তাই আমি যখন সম্ভব তখন পুট ব্যবহার করব।
  • আপনি একই অবজেক্টের ইউআরএল দিয়ে পুট দিয়ে আপডেট করতে বা একটি সংস্থান তৈরি করতে পারেন
  • পোষ্টের সাহায্যে আপনার কাছে একই সময়ে একটি ইউআরএল সংশোধন করার জন্য দুটি অনুরোধ আসতে পারে এবং তারা বস্তুর বিভিন্ন অংশ আপডেট করতে পারে।

একটি উদাহরণ:

আমি এসও সম্পর্কে আরও একটি উত্তরের অংশ হিসাবে নিম্নলিখিতটি লিখেছি :

পোস্ট:

একটি সংস্থান পরিবর্তন এবং আপডেট করতে ব্যবহৃত হয়

POST /questions/<existing_question> HTTP/1.1
Host: www.example.com/

নোট করুন যে নিম্নলিখিতটি একটি ত্রুটি:

POST /questions/<new_question> HTTP/1.1
Host: www.example.com/

যদি ইউআরএল এখনও তৈরি না হয় তবে নাম নির্দিষ্ট করার সময় আপনি এটি তৈরি করতে পোষ্ট ব্যবহার করবেন না। এর ফলে একটি 'উত্স পাওয়া যায় নি' ত্রুটির ফলস্বরূপ হওয়া উচিত কারণ <new_question>এখনও বিদ্যমান নেই। আপনার <new_question> প্রথমে সার্ভারে সংস্থান স্থাপন করা উচিত ।

আপনি যদিও পোষ্ট ব্যবহার করে একটি সংস্থান তৈরি করতে এরকম কিছু করতে পারেন:

POST /questions HTTP/1.1
Host: www.example.com/

মনে রাখবেন যে এই ক্ষেত্রে সংস্থানটির নাম নির্দিষ্ট করা হয়নি, নতুন অবজেক্টের ইউআরএল পথ আপনাকে ফিরিয়ে দেওয়া হবে।

রাখুন::

একটি উত্স তৈরি করতে বা এটি ওভাররাইট করতে ব্যবহৃত হয়। আপনি সংস্থানগুলি নতুন URL নির্দিষ্ট করার সময়।

নতুন সংস্থার জন্য:

PUT /questions/<new_question> HTTP/1.1
Host: www.example.com/

একটি বিদ্যমান উত্স ওভাররাইট করতে:

PUT /questions/<existing_question> HTTP/1.1
Host: www.example.com/

অতিরিক্তভাবে, এবং আরও কিছুটা সংক্ষিপ্তভাবে, আরএফসি 7231 বিভাগ 4.3.4 পুট স্টেটস (জোর যুক্ত করা হয়েছে),

4.3.4। PUT

পুট পদ্ধতিটি অনুরোধ করে যে লক্ষ্য সংস্থার রাজ্যটি হবে createdবা replacedঅনুরোধ বার্তা পেলোডের মধ্যে থাকা প্রতিনিধিত্ব দ্বারা সংজ্ঞায়িত রাষ্ট্রের সাথে।


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

77
@ জার্গ ডব্লু মিতাগ: প্রয়োজনীয় নয়। দ্বিতীয় সময়ের মধ্যে 409 সংঘাত বা অন্য কোনও কিছু ফিরে আসতে পারে যদি অনুরোধটির মধ্যে অনুরোধটি সংশোধন করা হয় (অন্য কোনও ব্যবহারকারী বা নিজেই প্রথম অনুরোধটি দিয়েছিলেন)।
মিতার

629
আমি যদি ভুল না হয়ে থাকি তবে আমাদের কী চাপ দেওয়া উচিত তা হ'ল পুটকে আদর্শবান হিসাবে সংজ্ঞায়িত করা হয় । আপনাকে এখনও আপনার সার্ভারটি এমনভাবে লিখতে হবে যাতে পুট সঠিকভাবে আচরণ করে, হ্যাঁ? সম্ভবত এটি বলা ভাল "PUT পরিবহণকে আদর্শবোধ হিসাবে ধরে নিয়েছে, যা পরিবহণের আচরণের উপর প্রভাব ফেলতে পারে, যেমন ক্যাচিং" "
ইয়ান নি-লুইস

150
@ জার্গডব্লিউমিতাগ আইডেম্পোটেন্স ক্যাপফ্রেজ? কীভাবে "আমার বন্ধুকে প্রেরণ এবং প্রেরণ এবং প্রেরণ করুন, এটি শেষের কোনও তাত্পর্য রাখে না।"
জেমস বেনিঞ্জার

39
এগুলি তাদের মনে করে: PUT = sertোকান বা আপডেট করুন; পোষ্ট = .োকান। সুতরাং আপনি যখন দুটি পুট তৈরি করেন - আপনি একটি নতুন রেকর্ড পান, যখন আপনি দুটি পোষ্ট করেন - আপনি দুটি নতুন রেকর্ড পান।
ইউজেন কনকভ

2217

আপনি ওয়েবে যে দাবিগুলি খুঁজে পেতে পারেন

দুটোই একদম ঠিক না।


কর্মের আদর্শের উপর ভিত্তি করে PUT এবং POST এর মধ্যে চয়ন করা ভাল ।

পুট মানে একটি সংস্থান স্থাপন করে - প্রদত্ত ইউআরএলে যা পাওয়া যায় তা সম্পূর্ণরূপে আলাদা জিনিস দিয়ে প্রতিস্থাপন করে। সংজ্ঞা অনুসারে, একটি পুট আদর্শবান। এটি আপনার পছন্দমতো বার করুন এবং ফলাফলটি একই। x=5আদর্শবান। আপনি কোনও সংস্থান পূর্বে বিদ্যমান কিনা তা স্থাপন করতে পারেন (যেমন, তৈরি করতে বা আপডেট করতে)!

POST একটি সংস্থান আপডেট করে, সহায়ক সংস্থান যোগ করে বা পরিবর্তনের কারণ ঘটায়। একটি পোষ্ট আদর্শবান নয়, যেভাবে x++আদর্শবান নয়।


এই যুক্তি অনুসারে, PUT তৈরির জন্য যখন আপনি যখন আপনি যে জিনিসটি তৈরি করবেন তার URL জানবেন। আপনি তৈরি করতে চান এমন বিভাগের জন্য "ফ্যাক্টরি" বা পরিচালকের ইউআরএল জানেন তখন তৈরি করতে পোষ্ট ব্যবহার করা যেতে পারে।

তাই:

POST /expense-report

বা:

PUT  /expense-report/10929

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

16
পোস্ট যদি কোনও সংস্থান আপডেট করতে পারে তবে তা কীভাবে আদর্শবান নয়? যদি আমি PUT ব্যবহার করে কোনও শিক্ষার্থীর বয়স পরিবর্তন করি এবং যদি এটি একবার করে করি তবে শিক্ষার্থীদের বয়স 10x বার একই হয় do
জ্যাক উকলেজা

28
@ স্নাইডার, এক্ষেত্রে আপনার সার্ভার আদর্শশক্তির গ্যারান্টি বাড়ানোর জন্য অতিরিক্ত চেষ্টা করছে তবে এটি বিজ্ঞাপন দিচ্ছে না। ব্রাউজারগুলি এখনও যদি এই জাতীয় পোস্টের অনুরোধটি পুনরায় লোড করার চেষ্টা করে তবে তারা ব্যবহারকারীকে সতর্ক করবে।
টুবু

47
@ স্নাইডার পোষ্ট একটি সহায়ক সংস্থান তৈরি করতে পারে; অতএব আপনি পোষ্ট / ব্যয়-প্রতিবেদনের মতো সংগ্রহের জন্য পোস্ট করতে পারেন এবং এটি আপনার সার্ভারে যতগুলি অনুরোধ পাঠিয়েছে তার পরিমাণ হিসাবে অনেক সত্তা (ব্যয় রিপোর্ট) তৈরি করতে পারে, যদিও সেগুলি সম্পূর্ণরূপে সমান হয়। এটিকে ডিবি টেবিলের (/ ব্যয়-প্রতিবেদন) অটো-বর্ধিত প্রাথমিক কী সহ একই সারিটি asোকানো হিসাবে ভাবেন Think ডেটা একই থাকে, কী (এই ক্ষেত্রে ইউআরআই) সার্ভার দ্বারা উত্পাদিত হয় এবং প্রতিটি অন্যান্য সন্নিবেশ (অনুরোধ) এর জন্য পৃথক। সুতরাং, পোস্ট প্রভাব আদর্শবান হতে পারে, তবে তা নাও পারে not সুতরাং, পোষ্ট আদর্শবান নয়
স্নিফ

11
ধরা যাক আমাদের সত্তা রয়েছে যার দুটি বৈশিষ্ট্য থাকতে পারে - nameএবং date। আমরা যদি সঙ্গে একটি সত্তা আছে একটি বিদ্যমান nameএবং date, কিন্তু তারপর শুধুমাত্র একটি নির্দিষ্ট এটি অনুরোধ করতে name, সঠিক আচরণ PUT ধ্বংস হবে dateসত্তা, যেহেতু পোষ্ট শুধুমাত্র বৈশিষ্ট্য নিদিষ্ট আপডেট করতে পারে অনির্দিষ্ট বৈশিষ্ট্য রেখে তারা ছিল, অনুরোধ করার আগে। এই শব্দটি কি সঠিক / যুক্তিসঙ্গত, বা এটি PUT এর অনুপযুক্ত ব্যবহার (আমি প্যাচ-এর উল্লেখগুলি দেখেছি , যা এটি আরও উপযুক্ত বলে মনে হয়, তবে এখনও বিদ্যমান নেই)?
জন z

706
  • একটি ইউআরএল পোস্ট করুন একটি সার্ভার সংজ্ঞায়িত URL এ একটি শিশু সংস্থান তৈরি করে
  • কোনও ইউআরএল-তে পুট ক্লায়েন্টের সংজ্ঞায়িত ইউআরএলে সংস্থানটি সম্পূর্ণরূপে তৈরি করে / প্রতিস্থাপন করে
  • প্যাচ কোন URL- এ আপডেট অংশ রিসোর্সের যে ক্লায়েন্ট সংজ্ঞায়িত URL এ।

পুট এবং পোষ্টের জন্য প্রাসঙ্গিক স্পেসিফিকেশন হ'ল আরএফসি 2616 -9.5 ফাফ।

POST একটি শিশু সংস্থান তৈরি করে , তাই POST /itemsএমন একটি সংস্থান তৈরি করে যা সংস্থার অধীনে /itemsথাকে। যেমন। /items/1। একই পোস্ট প্যাকেট দু'বার পাঠানো দু'টি সংস্থান তৈরি করবে।

PUT ক্লায়েন্ট দ্বারা পরিচিত একটি ইউআরএলে একটি সংস্থান তৈরি বা প্রতিস্থাপনের জন্য ।

অতএব: পুট হ'ল কেবলমাত্র ক্রিয়েটের প্রার্থী যেখানে ক্লায়েন্টটি ইতিমধ্যে সংস্থান তৈরির আগে ইউআরএলটি জানে। যেমন। /blogs/nigel/entry/when_to_use_post_vs_putযেমন শিরোনামটি রিসোর্স কী হিসাবে ব্যবহৃত হয়

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

আরএফসি এইভাবে পড়ে:

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

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

আপডেট 2018 : একটি মামলা রয়েছে যা পুট এড়ানোর জন্য তৈরি করা যেতে পারে। "PUT ছাড়াই বিশ্রাম" দেখুন

“PUT ছাড়া REST” কৌশল সহ ধারণাটি এই যে গ্রাহকরা নতুন 'নামযুক্ত' অনুরোধ সংস্থান পোস্ট করতে বাধ্য হন। যেমনটি আগে আলোচনা করা হয়েছে, গ্রাহকের মেইলিং ঠিকানা পরিবর্তন করা একটি নতুন "চেঞ্জঅফএড্রেস" সংস্থার কাছে একটি পোষ্ট, কোনও ভিন্ন মেইলিং ঠিকানার ক্ষেত্রের মান সহ কোনও "গ্রাহক" সংস্থার পুট নয়।

আরইএসটি এপিআই ডিজাইন থেকে নেওয়া - চিন্তাবিদদের প্রকাশ সুব্রহ্মণিয়াম কর্তৃক গৃহীত রিসোর্স মডেলিং

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


53
বা বেড়ার অন্য দিক থেকে: ক্লায়েন্ট যদি ফলাফলের উত্সের ঠিকানা নির্ধারণ করে, সার্ভার এটি করে তবে পোস্ট করুন।
ড্যানম্যান

3
আমি মনে করি যে @ ড্যানমন খুব সাধারণ উপায়ে কী নির্দেশ করেছেন তা আরও পরিষ্কার করার জন্য এই উত্তরটি সম্পাদনা করা উচিত। আমি এখানে যেটি সবচেয়ে মূল্যবান বলে মনে করি তা হ'ল নোটটি, উল্লেখ করে যে একটি পুট কেবলমাত্র পুরো সম্পদ প্রতিস্থাপনের জন্য ব্যবহার করা উচিত।
হার্মিস

3
প্যাচ কমপক্ষে কয়েক বছরের জন্য বাস্তববাদী বিকল্প নয়, তবে আমি আদর্শের সাথে একমত।
ক্রাশ করুন

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

5
আপনি সঠিক. একটি বিদ্যমান পোস্ট হিসাবে একই url এ একটি ব্লগ পোস্ট পুট করা সেই বিদ্যমান পোস্টে একটি আপডেটের কারণ হতে পারে (যদিও আপনি সম্ভবত একটি জিইটি দিয়ে প্রথমে পরীক্ষা করতে পারেন)। এটি নির্দেশ করে যে URL হিসাবে কেবল শিরোনামটি ব্যবহার করা কেন খারাপ ধারণা হবে। এটি তথ্যের যে কোনও প্রাকৃতিক কী ছিল তা কোথাও কাজ করবে ... যা আমার অভিজ্ঞতায় বিরল। বা আপনি যদি জিইউইডি ব্যবহার করেন
নাইজেল থর্ন

221

সারসংক্ষেপ:

সৃষ্টি:

নিম্নলিখিত উপায়ে PUT বা পোস্ট উভয় দিয়ে সম্পাদন করা যেতে পারে:

PUT

তৈরি করা হয় সাথে নতুন রিসোর্স newResourceId / সম্পদ কোনো URI, অথবা অধীনে শনাক্তকারী হিসেবে সংগ্রহ

PUT /resources/<newResourceId> HTTP/1.1 

পোস্ট

/ রিসোর্স ইউআরআই বা সংগ্রহের অধীনে একটি নতুন সংস্থান তৈরি করে । সাধারণত সনাক্তকারী সার্ভার দ্বারা ফিরে আসে।

POST /resources HTTP/1.1

হালনাগাদ:

নিম্নলিখিত পদ্ধতিতে কেবল পুট দিয়ে সম্পাদন করা যেতে পারে:

PUT

/ রিসোর্স ইউআরআই বা সংগ্রহের অধীনে সনাক্তকারী হিসাবে বিদ্যমান রিসোর্সআইডি সহ সংস্থানটি আপডেট করে ।

PUT /resources/<existingResourceId> HTTP/1.1

ব্যাখ্যা:

আরআরইএসটি এবং ইউআরআই হিসাবে সাধারণ হিসাবে কাজ করার সময় আপনার বামদিকে জেনেরিক থাকে এবং ডানদিকে নির্দিষ্ট থাকে । জেনেরিক্স সাধারণত বলা হয় সংগ্রহের এবং আরো নির্দিষ্ট আইটেম বলা যেতে পারে রিসোর্স । মনে রাখবেন, যে সম্পদ একটি থাকতে পারে সংগ্রহে

উদাহরণ:

<- জেনেরিক - নির্দিষ্ট ->

URI: website.com/users/john
website.com  - whole site
users        - collection of users
john         - item of the collection, or a resource

URI:website.com/users/john/posts/23
website.com  - whole site
users        - collection of users
john         - item of the collection, or a resource
posts        - collection of posts from john
23           - post from john with identifier 23, also a resource

আপনি যখন পোষ্ট ব্যবহার করেন আপনি সর্বদা কোনও সংগ্রহকে সুনির্দিষ্ট করে তোলেন , তাই যখনই আপনি বলেন:

POST /users HTTP/1.1

আপনি ব্যবহারকারীদের সংগ্রহে একটি নতুন ব্যবহারকারী পোস্ট করছেন ।

আপনি যদি যান এবং এই জাতীয় কিছু চেষ্টা করুন:

POST /users/john HTTP/1.1

এটি কাজ করবে, কিন্তু শব্দার্থগতভাবে আপনি বলছেন যে আপনি একটি সম্পদ যোগ করতে চান জন সংগ্রহে অধীনে ব্যবহারকারীদের সংগ্রহ

একবার আপনি করা ব্যবহার করছেন আপনি যদি একটি উল্লেখ করা হয় রিসোর্স বা একক আইটেম, সম্ভবত একটি ভিতরে সংগ্রহ । সুতরাং আপনি যখন বলবেন:

PUT /users/john HTTP/1.1

আপনি সার্ভার আপডেটটি বলছেন, বা এটি উপস্থিত না থাকলে তৈরি করুন, ব্যবহারকারী সংগ্রহের অধীনে জন সম্পদ

ফটকা খেলা:

আমি অনুমানের কিছু গুরুত্বপূর্ণ অংশ হাইলাইট করি:

পোস্ট

পোস্ট পদ্ধতি অনুরোধ করতে ব্যবহৃত হয় যে মূল সার্ভার গ্রহণ সত্তা হিসেবে অনুরোধে ঘিরা নতুন অধীনস্থ সংস্থান অনুরোধ-লাইন অনুরোধ-কোনো URI দ্বারা চিহ্নিত

অত: পর, একটি নতুন সৃষ্টি রিসোর্স একটি উপর সংগ্রহে

PUT

PUT পদ্ধতি অনুরোধ ঘিরা সত্তা করা সঞ্চিত সরবরাহকৃত অনুরোধ-URL থেকে। যদি অনুরোধ-ইউআরআই একটি ইতিমধ্যে বিদ্যমান সংস্থানটিকে বোঝায় , আবদ্ধ সত্তা মূল সার্ভারে থাকা ব্যক্তির পরিবর্তিত সংস্করণ হিসাবে বিবেচিত হবে । অনুরোধ-কোনো URI হয়, তাহলে একটি বিদ্যমান নির্দেশ না রিসোর্স এবং কোনো URI যে সক্ষম একটি হিসাবে সংজ্ঞায়িত করা হচ্ছে নতুন রিসোর্স অনুরোধ ইউজার এজেন্ট দ্বারা, মূল সার্ভার পারেন তৈরি যে কোনো URI সঙ্গে সম্পদ। "

সুতরাং, সংস্থানটির অস্তিত্বের ভিত্তিতে তৈরি বা আপডেট করুন ।

রেফারেন্স:


11
এই পোস্টটি বোঝার ক্ষেত্রে আমার পক্ষে সহায়ক ছিল যে প্রদত্ত সংগ্রহ (ইউআরআই) তে পোস্ট একটি শিশু হিসাবে "কিছু" যুক্ত করে, অন্যদিকে ইউটিআর নির্দিষ্ট স্থানে প্রদত্ত ইউআরআই অবস্থানে "স্পষ্টভাবে" কিছু "সংজ্ঞা দেয়"।
kwah

3
এটিই এখানে সেরা উত্তর, আমি মনে করি: এই "পোস্টের কোনওই কোনও সংস্থান আপডেট করতে পারে না" বাজে কথা। আপনার বক্তব্যটি আমার পছন্দ হয়েছে, "আপডেট কেবল PUT দিয়ে করা যায়"।
থমাস

4
না, পুট আপডেট বা তৈরির জন্য নয়। এটি প্রতিস্থাপনের জন্য। নোট করুন যে আপনি তৈরির প্রভাবের জন্য কোনও কিছুর সাথে প্রতিস্থাপন করতে পারবেন না।
thecoshman

2
@ 7hi4g0 পুট একটি সম্পূর্ণ প্রতিস্থাপনের সাথে আপডেট করার জন্য, অন্য কথায়, এটি প্রতিস্থাপন করে। আপনি কোনও কিছুর সাথে কিছুই বা সম্পূর্ণ নতুন কিছু দিয়ে প্রতিস্থাপন করেন। পুট একটি ছোটখাট পরিবর্তন করার জন্য নয় (যদি না আপনার কাছে ক্লায়েন্ট সেই ছোটখাট পরিবর্তন করে এবং পুরো নতুন সংস্করণটি প্রদান করে, এমনকি একইটি কী থাকে)। আংশিক পরিবর্তনের জন্য, প্যাচচইচ হ'ল পছন্দের পদ্ধতি।
thecoshman

1
@ থেকোশম্যান আপনি পারতেন, তবে এটি খুব পরিষ্কার হবে না যে সেখানে তৈরিও coveredাকা রয়েছে। এই ক্ষেত্রে, এটি পরিষ্কার করা ভাল।
7hi4g0

175

POST "" নতুন তৈরি করুন "এর অর্থ" এখানে ব্যবহারকারী তৈরির জন্য ইনপুট রয়েছে, এটি আমার জন্য তৈরি করুন "।

PUT "ব্যবহারকারীর 5 ডেটা এখানে" হিসাবে যেমন "সন্নিবেশ করান, ইতিমধ্যে উপস্থিত থাকলে প্রতিস্থাপন করুন" means

আপনি POSTউদাহরণস্বরূপ @ URLব্যবহারকারীর কাছে যেহেতু আপনি এখনও ব্যবহারকারীর নাম জানেন না , আপনি সার্ভারটি এটি তৈরি করতে চান।

আপনি PUTউদাহরণস্বরূপ / ব্যবহারকারী / আইডিতে যেহেতু আপনি নির্দিষ্ট ব্যবহারকারীকে প্রতিস্থাপন / তৈরি করতে চান ।

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

একটি সাধারণ পরামর্শ হ'ল POSTযখন URLআপনার সংস্থানগুলির উত্পন্নকরণের নিয়ন্ত্রণে থাকা সার্ভারের প্রয়োজন হয় use PUTঅন্যথায় ব্যবহার করুন । PUT ওভার পছন্দ POST


12
Opালুতার কারণে এটি সাধারণত শেখানো হতে পারে যে আপনার কেবলমাত্র দুটি ক্রিয়া প্রয়োজন: GET এবং POST। পেতে GET করুন, পরিবর্তন করতে পোস্ট করুন। এমনকি PUT এবং DELETE পোস্ট ব্যবহার করে সম্পাদিত হয়েছিল। পুট বলতে আসলে কী বোঝাচ্ছে 25 বছর পরে এমন কোনও চিহ্ন যা আমরা প্রথমে এটি ভুল শিখেছি। REST জনপ্রিয়তা মানুষকে বেসিকগুলিতে ফিরিয়ে নিয়েছে যেখানে আমাদের এখন অতীতের খারাপ ভুলগুলি শিখতে হবে। পোষ্টকে অতিরিক্ত ব্যবহার করা হয়েছিল এবং এখন সাধারণত ভুলভাবে শেখানো হয়। সেরা অংশ: "একই তথ্য দিয়ে দু'বার পোস্ট করা মানে দুটি অভিন্ন [সংস্থান] তৈরি করা"। দুর্দান্ত পয়েন্ট!
ম্যাক্সপলক

1
আপনি কীভাবে আইডি দ্বারা রেকর্ড তৈরি করতে PUT ব্যবহার করতে পারেন, উদাহরণস্বরূপ user 5এটি উপস্থিত না থাকলে? মানে না update, replace if already exists? বা কিছু
লুক

@ কুলটন: আমি যা লিখেছিলাম তা বোঝাতে চেয়েছি। আপনি 5 / ব্যবহারকারী / 5 এবং # 5 উপস্থিত না থাকলে 5 ব্যবহারকারীর প্রবেশ করান।
আলেকজান্ডার টর্সলিং

@ কুলটন: এবং এটির সামগ্রিকভাবে বিদ্যমান সংস্থার মান প্রতিস্থাপনPUT করতেও ব্যবহার করা যেতে পারে ।
ডেভিডআরআর

1
"পুট ওপরে পোস্ট পছন্দ করুন" ... তা প্রমাণ করার জন্য যত্ন?
thecoshman

173

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

সুতরাং: একটি বিদ্যমান ব্যবহারকারীর সংরক্ষণ করতে, বা ক্লায়েন্ট যেখানে আইডি উত্পন্ন করে এবং যাচাই করা হয়েছে যে আইডিটি অনন্য:

PUT /user/12345 HTTP/1.1  <-- create the user providing the id 12345
Host: mydomain.com

GET /user/12345 HTTP/1.1  <-- return that user
Host: mydomain.com

অন্যথায়, প্রথমে অবজেক্টটি তৈরি করতে POST ব্যবহার করুন এবং অবজেক্টটি আপডেট করার জন্য PUT করুন:

POST /user HTTP/1.1   <--- create the user, server returns 12345
Host: mydomain.com

PUT /user/12345 HTTP/1.1  <--- update the user
Host: mydomain.com

17
আসলে, এটি হওয়া উচিত POST /users। (দ্রষ্টব্য যে /usersবহুবচন।) এটির ফলে একটি নতুন ব্যবহারকারী তৈরি করা এবং এটি /usersসংগ্রহের চাইল্ড রিসোর্স তৈরি করে ।
ডেভিডআরআর

6
@ ডেভিডআরআর সুষ্ঠু হতে, গ্রুপগুলি কীভাবে পরিচালনা করা যায় তা সম্পূর্ণরূপে আরেকটি বিতর্ক। GET /usersআপনি যেভাবে চান তা এটি পড়েছে, তবে আমি ঠিক আছি GET /user/<id>বা POST /user(নতুন ব্যবহারকারীটির জন্য পেলোডের সাথে) থাকব কারণ এটি সঠিকভাবে পড়েছে 'আমাকে 5 ব্যবহারকারী করুন' বিজোড়, তবে 'আমাকে ব্যবহারকারী 5 করুন' বেশি স্বাভাবিক। আমি সম্ভবত এখনও বহুবচনের পাশে পড়ে
যাব

126

তৈরি করতে POST এবং আপডেট করার জন্য PUT ব্যবহার করুন। যেভাবেই হোক, রেল অন রুবেল এটি করছে।

PUT    /items/1      #=> update
POST   /items        #=> create

4
POST /itemsইতিমধ্যে সংজ্ঞায়িত সংস্থান ('আইটেম') এ একটি নতুন আইটেম যুক্ত করে। এটি উত্তর দেয় না, "একটি দল তৈরি করুন"। আমি কেন বুঝতে পারছি না যে এতে 12 টি ভোট রয়েছে।
ডেভিড জে।

বাক্সের বাইরে, রেলগুলি REST এর মাধ্যমে 'একটি গোষ্ঠী তৈরি' সমর্থন করে না। 'একটি গোষ্ঠী তৈরি করতে' যার অর্থ 'উত্স তৈরি করুন' আপনাকে সোর্স কোডের মাধ্যমে এটি করতে হবে।
ডেভিড জে।

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

2
আমি সামান্য পরিবর্তনের সাথে উত্তরটির সাথে একমত। উত্সটি তৈরি করতে POST ব্যবহার করুন এবং সম্পদটি সম্পূর্ণ আপডেট করুন UT আংশিক আপডেটের জন্য আমরা PUT বা প্যাচ ব্যবহার করতে পারি। বলি আমরা একটি গোষ্ঠীর স্থিতি আপডেট করতে চাই। আমরা স্থিতির সাথে PUT / গোষ্ঠী / 1 / স্থিতিটি হ'ল অনুরোধ পেওলড বা PATCH / গোষ্ঠী / 1 পেলোডের ক্রিয়া সম্পর্কে বিশদ সহ
java_geek

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

123

উভয় ক্লায়েন্টের মধ্যে ক্লায়েন্টের মধ্যে ডেটা সংক্রমণের জন্য ব্যবহৃত হয় তবে তাদের মধ্যে সূক্ষ্ম পার্থক্য রয়েছে, যা হ'ল:

এখানে চিত্র বিবরণ লিখুন

সাদৃশ্য:

  • পুট অর্থাত্ যেখানে থাকুন সেখানে নিয়ে যান।
  • পোস্ট অফিসে মেল প্রেরণ হিসাবে পোস্ট করুন

এখানে চিত্র বর্ণনা লিখুন

সামাজিক মিডিয়া / নেটওয়ার্ক সাদৃশ্য:

  • সোশ্যাল মিডিয়ায় পোস্ট করুন: আমরা যখন বার্তা পোস্ট করি তখন এটি নতুন পোস্ট তৈরি করে।
  • আমরা ইতিমধ্যে পোস্ট করা বার্তার জন্য (অর্থাত্ সম্পাদনা) রাখুন

21
@ মোটরবোন না, আরআরএসটি পদ্ধতিগুলি CRUD নয়।
jlr

1
আমি ইউপিএসআরটিএসের জন্য পুট বলব
হোলা সোয়া এডু ফেলিজ নাভিদাদ

@ মোটরবোন নং: পোস্ট করুন যখন আপনি একটি নতুন সংস্থান তৈরি করেন এবং আপনি এটি পেতে চূড়ান্ত শেষ পয়েন্টটি জানেন না। অন্যান্য ক্ষেত্রে পুট।
পোর্তেকোই

67

REST একটি খুব উচ্চ-স্তরের ধারণা। আসলে, এটি এমনকি HTTP মোটেও উল্লেখ করে না!

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

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

এটমপব রিসোর্স তৈরি সম্পর্কে যা বলেছে (বিভাগ 9.2):

কোনও সংগ্রহে সদস্য যুক্ত করতে, ক্লায়েন্টরা সংগ্রহের ইউআরআইতে পোস্টের অনুরোধগুলি প্রেরণ করে।


8
পুটকে রিসোর্স তৈরি করতে দেয়ায় কোনও ভুল নেই। কেবল সচেতন হন যে এর অর্থ ক্লায়েন্টটি ইউআরএল সরবরাহ করে।
জুলিয়ান রিশকে

5
পুটকে সংস্থান তৈরি করার অনুমতি দেওয়ার সাথে খুব খারাপ কিছু আছে: ক্লায়েন্টটি ইউআরএল সরবরাহ করে। এটাই সার্ভারের কাজ!
জোশকোডস

@ জোশকোডস ক্লায়েন্ট আইডিগুলি তৈরি করা সার্ভারের কাজ এটি সর্বদা হয় না। আমি ক্রমবর্ধমান নকশাগুলি দেখেছি যা ক্লায়েন্টরা সংস্থান আইডি হিসাবে কোনও ধরণের ইউআইডি তৈরি করতে দেয়। এই নকশাটি স্কেল বাড়ানোর জন্য নিজেকে বিশেষভাবে ধার দেয়।
জাস্টিন ওহমস

@ জাস্টিনহহমস আমি ক্লায়েন্ট উত্পন্ন আইডি সম্পর্কে আপনার বক্তব্যের সাথে একমত (পার্শ্ব নোট: ২০০৮ সাল থেকে আমার দ্বারা ডিজাইন করা সমস্ত সিস্টেমে ক্লায়েন্টকে ইউআইডি / গাইড হিসাবে আইডি তৈরি করা প্রয়োজন)। এর অর্থ এই নয় যে ক্লায়েন্টটির URL টি নির্দিষ্ট করা উচিত।
জোশকডস

1
হ্যাঁ, যদি উত্স ইতিমধ্যে বিদ্যমান থাকে তবে PUT ব্যবহার করুন। তবে প্রায় সব ক্ষেত্রেই, পোস্টগুলি দিয়ে সংস্থানগুলি তৈরি করা উচিত এবং ক্লায়েন্টের ইউআরএল সরবরাহ করা উচিত নয়। রায় ফিল্ডিং এই বিবৃতিতে একমত পোষণ করেছেন FWIW
জোশকডস

61

HTTP + REST এপিআই সহ সার্ভারে একটি উত্স তৈরি করতে PUT বা POST ব্যবহার করবেন কিনা সে সিদ্ধান্তটি ইউআরএল কাঠামোর মালিক যার উপর ভিত্তি করে। ক্লায়েন্টকে জানা বা সংজ্ঞায়িত করার অংশীদার হওয়া URL টি স্ট্রোকটি এসওএ থেকে উদ্ভূত অনাকাঙ্ক্ষিত কাপলিংয়ের অনুরূপ একটি অপ্রয়োজনীয় মিলন। রিপস্টের ধরণের জনপ্রিয়তার কারণগুলি REST এত জনপ্রিয়। অতএব, ব্যবহারের সঠিক পদ্ধতিটি হ'ল পোষ্ট। এই নিয়মের ব্যতিক্রম রয়েছে এবং যখন ক্লায়েন্ট এটি স্থাপন করা সংস্থার অবস্থানের কাঠামোর উপর নিয়ন্ত্রণ বজায় রাখতে চায় তখন সেগুলি ঘটে। এটি বিরল এবং সম্ভবত এর অর্থ অন্য কিছু ভুল।

এই মুহুর্তে কিছু লোক যুক্তিযুক্ত হতে পারে যে যদি RESTful- ইউআরএল ব্যবহার করা হয় তবে ক্লায়েন্টটি সংস্থানটির URL জানতে পারে এবং তাই একটি পুট গ্রহণযোগ্য। সর্বোপরি, এই কারণেই ক্যানোনিকাল, নরমালাইজড, রুবে অন রেলস, জাজানো ইউআরএলগুলি গুরুত্বপূর্ণ, টুইটার এপিআইতে দেখুন ... ব্লাহ ব্লাহ ব্লাহ। এই লোকদের বোঝার দরকার বিশ্রাম-ইউআরএল বলে কোনও জিনিস নেই এবং রয় ফিল্ডিং নিজেই বলেছেন যে :

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

http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

একটি আরএসএফুল-ইউআরএল এর ধারণাটি আসলে আরআরএসের লঙ্ঘন কারণ সার্ভারটি ইউআরএল কাঠামোর দায়িত্বে রয়েছে এবং মিলন এড়ানোর জন্য কীভাবে এটি ব্যবহার করবেন তা সিদ্ধান্ত নিতে নির্দ্বিধায় উচিত। যদি আপনি এআইপি ডিজাইনে স্ব আবিষ্কারের তাত্পর্য সম্পর্কে পড়েন তবে এটি বিভ্রান্ত হয়।

সংস্থানগুলি তৈরি করতে POST ব্যবহার করা একটি নকশার বিবেচনার সাথে আসে কারণ POST আদর্শবান নয়। এর অর্থ হ'ল পোষ্টকে বেশ কয়েকবার পুনরাবৃত্তি করা প্রতিবার একই আচরণের গ্যারান্টি দেয় না। এটি লোকেরা যখন সংস্থান না করা উচিত তখন সংস্থান তৈরি করতে PUT ব্যবহারে ভয় দেখায়। তারা জানে যে এটি ভুল (পোষ্ট তৈরির জন্য) তবে তারা যেভাবেই করতে পারে কারণ তারা কীভাবে এই সমস্যার সমাধান করবেন তা জানেন না। এই উদ্বেগ নিম্নলিখিত পরিস্থিতিতে প্রদর্শিত হয়:

  1. ক্লায়েন্ট সার্ভারে একটি নতুন সংস্থান পোস্ট করে।
  2. সার্ভারটি অনুরোধটি প্রক্রিয়া করে এবং একটি প্রতিক্রিয়া প্রেরণ করে।
  3. ক্লায়েন্ট কখনই প্রতিক্রিয়া পায় না।
  4. সার্ভারটি অজানা, ক্লায়েন্ট প্রতিক্রিয়া পাননি।
  5. ক্লায়েন্টটির সংস্থানটির জন্য কোনও URL নেই (অতএব পুট কোনও বিকল্প নয়) এবং পোষ্টটি পুনরাবৃত্তি করে।
  6. পোষ্ট আদর্শবান এবং সার্ভার নয় ...

Step ষ্ঠ পদক্ষেপটি যেখানে লোকেরা সাধারণত কী করবেন তা নিয়ে বিভ্রান্ত হন। তবে, এই সমস্যাটি সমাধান করার জন্য একটি পাদদেশ তৈরি করার কোনও কারণ নেই। পরিবর্তে, এইচটিটিপি আরএফসি 2616 তে উল্লিখিত হিসাবে ব্যবহার করা যেতে পারে এবং সার্ভারের জবাব:

10.4.10 409 সংঘাত

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

বিবাদটির উত্সটি সনাক্ত করতে ব্যবহারকারীর জন্য তথ্য। আদর্শভাবে, প্রতিক্রিয়া সত্তা ব্যবহারকারী বা ব্যবহারকারী এজেন্টের জন্য সমস্যা সমাধানের জন্য পর্যাপ্ত তথ্য অন্তর্ভুক্ত করবে; তবে এটি সম্ভব নাও হতে পারে এবং প্রয়োজনও নেই।

PUT অনুরোধের প্রতিক্রিয়া হিসাবে সংঘাতগুলি সম্ভবত সবচেয়ে বেশি ঘটে। উদাহরণস্বরূপ, যদি সংস্করণটি ব্যবহার করা হয়ে থাকে এবং সত্তাটি PUT হ'ল এমন কোনও সংস্থার পরিবর্তনগুলি অন্তর্ভুক্ত করে যা পূর্বের (তৃতীয় পক্ষের) অনুরোধের সাথে বিরোধী হয় তবে সার্ভারটি 409 প্রতিক্রিয়াটি ব্যবহার করে এটি অনুরোধটি সম্পূর্ণ করতে পারে না তা বোঝাতে পারে । এই ক্ষেত্রে, প্রতিক্রিয়া সত্তায় প্রতিক্রিয়া সামগ্রী-প্রকার দ্বারা সংজ্ঞায়িত করা ফর্ম্যাটে দুটি সংস্করণের মধ্যে পার্থক্যের একটি তালিকা থাকতে পারে।

409 কনফ্লিক্টের একটি স্থিতি কোডের সাথে উত্তর দেওয়া সঠিক উপায় কারণ :

  • সিস্টেমে ইতিমধ্যে একটি সংস্থার সাথে মেলে এমন একটি আইডি রয়েছে এমন একটি ডেটা পোস্টের সম্পাদন করা "সম্পদের বর্তমান অবস্থার সাথে বিরোধ"।
  • যেহেতু গুরুত্বপূর্ণ অংশটি ক্লায়েন্টের জন্য সার্ভারটি বোঝার জন্য এটির সংস্থান রয়েছে এবং যথাযথ ব্যবস্থা গ্রহণ করা উচিত। এটি এমন একটি "পরিস্থিতি (পরিস্থিতি) যেখানে আশা করা যায় যে ব্যবহারকারী দ্বন্দ্ব সমাধান করতে এবং অনুরোধটি পুনরায় জমা দিতে সক্ষম হবেন।"
  • একটি প্রতিক্রিয়া যা সংঘাতের আইডি সহ সংস্থার URL এবং সংস্থানটির যথাযথ পূর্বশর্তগুলি ধারণ করে "ব্যবহারকারী বা ব্যবহারকারী এজেন্টকে সমস্যা সমাধানের জন্য পর্যাপ্ত তথ্য" সরবরাহ করবে যা আরএফসি 2616 প্রতি আদর্শ ক্ষেত্রে।

2616 প্রতিস্থাপন করতে আরএফসি 7231 এর রিলিজের ভিত্তিতে আপডেট

আরএফসি 7231 2616 প্রতিস্থাপন করার জন্য ডিজাইন করা হয়েছে এবং বিভাগ 4.3.3 এ একটি পোস্টের জন্য সম্ভাব্য প্রতিক্রিয়ার বর্ণনা করে

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

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

এই সম্পর্কে আরও তথ্যের জন্য, এই নিবন্ধটি পড়ুন


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

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

@ জোশকডস কি আপনি বিরোধ নিষ্পত্তি প্রক্রিয়া সম্পর্কে আরও বলতে পারেন? এই ক্ষেত্রে, ব্যবহারকারীর নামটি ইতিমধ্যে উপস্থিত থাকলে কি ক্লায়েন্টটি শেষ ব্যবহারকারীকে আলাদা আলাদা ব্যবহারকারীর জন্য অনুরোধ করবে? ক্লায়েন্ট যদি ব্যবহারকারীর নাম পরিবর্তনের জন্য POST ব্যবহার করার চেষ্টা করে থাকে তবে কী হবে? প্যারামিটারগুলি আপডেট করার জন্য কি পিইটি অনুরোধগুলি এখনও ব্যবহার করা উচিত, যখন POST অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয় তা এক সাথে একাধিক বা একাধিক? ধন্যবাদ।
বিফার

@ BFar2 যদি ব্যবহারকারীর নামটি ইতিমধ্যে বিদ্যমান থাকে তবে ক্লায়েন্টটি ব্যবহারকারীকে অনুরোধ করবে। ব্যবহারকারীর নাম পরিবর্তন করে ধরে নেওয়া, ইউজার নেমটি ইতিমধ্যে তৈরি হওয়া উত্সের অংশ যা পরিবর্তিত হওয়া দরকার, PUT ব্যবহার করা হবে কারণ আপনি সঠিক, POST সর্বদা তৈরির জন্য ব্যবহৃত হয়, আপডেটের জন্য সর্বদা এবং পুট হয়।
জোশকোডস

সংক্ষিপ্ত এবং কার্যকর ভাষা ব্যবহার করে জিনিসগুলি ব্যাখ্যা করাও একটি পছন্দসই দক্ষতা
জুনচেন লিউ

53

আরটিএফসি 2616 এর PUT সংজ্ঞা থেকে আমি এই পরামর্শটি পছন্দ করি :

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

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

আমি এটি ব্যাখ্যা করি, এবং পিটিউতে আদর্শের প্রয়োজনীয়তা, যার অর্থ:

  • সংগ্রহের অধীনে নতুন অবজেক্ট তৈরি করার জন্য POST ভাল (এবং তৈরিকে আদর্শবান হওয়ার দরকার নেই)
  • PUT বিদ্যমান অবজেক্টগুলি আপডেট করার জন্য ভাল (এবং আপডেটটি আদর্শবান হওয়া দরকার)
  • POST বিদ্যমান বস্তুগুলির জন্য আদর্শহীন আপডেটের জন্যও ব্যবহার করা যেতে পারে (বিশেষত পুরো জিনিসটি নির্দিষ্ট করে না দিয়ে কোনও বস্তুর অংশ পরিবর্তন করা - আপনি যদি এটির বিষয়ে চিন্তা করেন তবে কোনও সংগ্রহের নতুন সদস্য তৈরি করা আসলে এই ধরণের একটি বিশেষ ক্ষেত্রে সংগ্রহের দৃষ্টিকোণ থেকে আপডেট করুন)
  • PUT তৈরির জন্যও ব্যবহার করা যেতে পারে এবং যদি আপনি ক্লায়েন্টকে সংস্থানটির নামকরণের অনুমতি দেন। তবে যেহেতু আরআরইএসটি ক্লায়েন্টরা ইউআরএল কাঠামো সম্পর্কে অনুমান করার কথা নয়, তাই এটি বিষয়গুলির অনুভূতিতে কম less

3
"POST বিদ্যমান অবজেক্টগুলিতে আদর্শহীন আপডেটের জন্যও ব্যবহার করা যেতে পারে (বিশেষত পুরো জিনিসটি নির্দিষ্ট করে না দিয়ে কোনও জিনিসের অংশ পরিবর্তন করা" প্যাচটি হ'ল
স্নাগস

48

সংক্ষেপে:

পুট আদর্শবান, যেখানে একই ক্রিয়াকলাপটি একবার বা একাধিকবার কার্যকর করা হলে রিসোর্স স্টেট একই হবে।

POST অ-আদর্শহীন, যেখানে একক সময় কার্যকর করার তুলনায় অপারেশনটি একাধিকবার কার্যকর করা হলে রিসোর্স স্টেটটি ভিন্ন হয়ে উঠতে পারে।

ডাটাবেস ক্যোয়ারীর সাথে সাদৃশ্য

PUT আপনি "আপডেট স্টুডেন্ট সেট ঠিকানা =" অ্যাবসি "যেখানে id =" 123 "এর মতোই ভাবতে পারেন;

পোস্ট আপনি "INSERT INTO STUDENT (নাম, ঠিকানা) ভ্যালু (" abc "," xyzzz ") এর মতো কিছু সম্পর্কে ভাবতে পারেন;

শিক্ষার্থী আইডি স্বয়ংক্রিয়ভাবে উত্পন্ন হয়।

PUT- এর সাথে যদি একই প্রশ্নটি একাধিকবার বা এক সময় কার্যকর করা হয় তবে শিক্ষার্থীর টেবিলের অবস্থা একই থাকে।

পোস্টের ক্ষেত্রে যদি একই কোয়েরিটি একাধিকবার কার্যকর করা হয় তবে ডাটাবেসে একাধিক শিক্ষার্থী রেকর্ড তৈরি হয় এবং "ইনসার্ট" ক্যোয়ারির প্রতিটি সম্পাদনের ক্ষেত্রে ডাটাবেস স্টেট পরিবর্তন হয়।

দ্রষ্টব্য: পুটকে একটি সংস্থান স্থানের প্রয়োজন (ইতিমধ্যে-সংস্থান) যার উপর আপডেট হওয়া দরকার, অন্যদিকে পোষ্টের এটির প্রয়োজন হয় না। অতএব স্বজ্ঞাতপরিচয়টি একটি নতুন সংস্থান তৈরির জন্য বোঝানো হয়েছে, যদিও ইতিমধ্যে বিদ্যমান সংস্থানটি আপডেট করার জন্য পিইউটি প্রয়োজন।

কিছু পোস্টের সাথে আপডেটগুলি সম্পাদন করা যেতে পারে with আপডেটগুলির জন্য কোনটি ব্যবহার করা উচিত বা কোনটি তৈরির জন্য ব্যবহার করা উচিত সে সম্পর্কে কোনও কঠোর নিয়ম নেই। আবার এগুলি কনভেনশনস এবং স্বজ্ঞাতভাবে আমি উপরোক্ত উল্লিখিত যুক্তির সাথে ঝুঁকেছি এবং এটি অনুসরণ করি।


6
জন্য PUT অনুরূপ ঢোকান বা আপডেট কোয়েরি
Eugen Konkov

1
প্রকৃতপক্ষে আপনি "আপডেট স্টুডেন্ট সেট ঠিকানা =" অ্যাবসি "যেখানে আইডি =" 123 "এর অনুরূপ ভাবতে পারেন; প্যাচ-এর জন্য একটি বিবৃতি হবে" 123 "PUT
mko

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

43

পোষ্ট হ'ল মেলবক্সে একটি চিঠি পোস্ট করার বা ইমেল কাতারে একটি ইমেল পোস্ট করার মতো। পুট এমন হয় যখন আপনি কোনও কিউবি হোল বা কোনও শেল্ফের কোনও জায়গাতে রাখেন (এটির একটি পরিচিত ঠিকানা রয়েছে)।

পোষ্টের সাথে, আপনি কোয়ের বা ঠিকানার ঠিকানাতে পোস্ট করছেন। পুট দিয়ে, আপনি আইটিইএমের ঠিকানায় রাখছেন।

পুট আদর্শবান। আপনি অনুরোধটি 100 বার প্রেরণ করতে পারেন এবং এটি কোনও ব্যাপার নয়। পোষ্ট আদর্শবান নয়। আপনি যদি অনুরোধটি 100 বার প্রেরণ করেন তবে আপনি আপনার ডাক বাক্সে 100 টি ইমেল বা 100 টি চিঠি পাবেন।

একটি সাধারণ নিয়ম: আপনি যদি আইটেমটির আইডি বা নাম জানেন তবে PUT ব্যবহার করুন। আপনি যদি আইটি বা আইটেমের নামটি গ্রহণকারী পক্ষের দ্বারা নির্ধারিত করতে চান তবে POST ব্যবহার করুন।

পোষ্ট বনাম পুট


1
না, পুটটি বোঝায় যে আপনি ইউআরএল জানেন। আপনি যদি কেবল আইডিটি জানেন তবে ইউআরএল পাওয়ার জন্য সেই আইডি দিয়ে পোস্ট করুন।
জোশকোডস

6
আইডি ইউআরএল এর অংশ, সুতরাং হ্যাঁ, আপনি যদি ইউআরএল জানেন (তবে এতে আইডি অন্তর্ভুক্ত থাকে) তবে পুট ব্যবহার করুন।
হোমার 6

না, ইউআরএল সার্ভার দ্বারা নির্ধারিত হয় এবং আইডি ইউআরএলটির অগত্যা অংশ হয় না। রায় ফিল্ডিং আপনাকে একই কথা বলবে বা আপনি কেবল তাঁর থিসিসটি পড়তে পারতেন ।
জোশকোডস

@ জোশকডস, এটি কি বিশ্রাম নিচ্ছে? একটি বিশিষ্ট আর্কিটেকচারে, আইটেম আইডিটি অবশ্যই: / জনগণ / 123 হিসাবে ইউআরএল-এর একটি অংশ। আমি REST এর জন্য এই সাইটটি পছন্দ করি: microformat.org/wiki/rest/urls
বীজ

1
@Beez mircoformats লিঙ্কের জন্য একটি ভালো উপায় প্রস্তাব দেওয়া সার্ভার তাদের URL গুলি লিখতে হবে কিন্তু সার্ভার URL টি নির্ধারণ করে। ক্লায়েন্ট পরের থেকে কখনও না। আপনি যদি বুঝতে না পারেন তবে আমার উত্তর বা সম্পর্কিত নিবন্ধটি দেখুন ।
জোশকোডস

39

নতুন উত্তর (এখন আমি REST আরও ভালভাবে বুঝতে পেরেছি):

পুট হ'ল ক্লায়েন্ট দ্বারা চিহ্নিত সংস্থার উপস্থাপনা উপস্থাপনের জন্য এখন থেকে পরিষেবাটি কী সামগ্রীতে হওয়া উচিত তা একটি বিবৃতি; POST হ'ল পরিষেবাটি এখন থেকে কী সামগ্রীতে থাকা উচিত (সম্ভবত ডুপ্লিকেট করা) তবে এটি কীভাবে কীভাবে বিষয়বস্তুটি সনাক্ত করতে হয় তা সার্ভারের উপর নির্ভর করে।

PUT x(যদি xকোনও সংস্থান চিহ্নিত করে ): " xআমার সামগ্রীর সাহায্যে চিহ্নিত সংস্থার সামগ্রীটি প্রতিস্থাপন করুন " "

PUT x(যদি xকোনও সংস্থান চিহ্নিত না করে): "আমার সামগ্রীযুক্ত একটি নতুন সংস্থান তৈরি করুন এবং xএটি সনাক্ত করতে ব্যবহার করুন " "

POST x: "আমার সামগ্রী সংরক্ষণ করুন এবং আমাকে এমন একটি শনাক্তকারী দিন যা আমি বলার মতো সামগ্রী (সম্ভবত অন্য সামগ্রীর সাথে মিশ্রিত) যুক্ত একটি সংস্থান (পুরাতন বা নতুন) সনাক্ত করতে ব্যবহার করতে পারি Sa বলেছে যে সংস্থানটি xসনাক্তকারীগুলির সাথে অভিন্ন বা অধস্তন হওয়া উচিত " " " Y এর সম্পদ জুনিয়ার ক্যানো এক্স গুলি রিসোর্স" সাধারণত কিন্তু অগত্যা করে বাস্তবায়িত হয় না Y একটি subpath এক্স (যেমন এক্স = /fooএবং Y = /foo/bar) এবং প্রতিনিধিত্ব (গুলি) পরিবর্তন এক্স এর রিসোর্স অস্তিত্ব প্রতিফলিত একটি নতুন সংস্থান, যেমন y এর হাইপার লিঙ্ক সহএর সংস্থান এবং কিছু মেটাডেটা। কেবলমাত্র সঠিক আধুনিক নকশার জন্যই অত্যাবশ্যক, কারণ ইউআরএলগুলি REST এ অস্বচ্ছ - আপনি যেভাবেই পরিষেবাটি অবিচ্ছিন্ন করতে ক্লায়েন্ট-সাইড URL নির্মাণের পরিবর্তে হাইপারমিডিয়া ব্যবহার করার কথা ।

REST- এ "সামগ্রী" সম্বলিত কোনও উত্স বলে কিছু নেই as আমি উপস্থাপনা ধারাবাহিকভাবে রেন্ডার করতে পরিষেবা ব্যবহার করে এমন ডেটাতে "সামগ্রী" হিসাবে উল্লেখ করি। এটিতে সাধারণত কোনও ডাটাবেস বা কোনও ফাইলে সম্পর্কিত সম্পর্কিত সারি থাকে (যেমন একটি চিত্র ফাইল)। ব্যবহারকারীর বিষয়বস্তুকে পরিষেবাটি যে কোনও কিছু ব্যবহার করতে পারে তা রূপান্তর করার জন্য এটি পরিষেবাটির উপর নির্ভর করে, যেমন একটি জেএসওএন পেলোডকে এসকিউএল স্টেটমেন্টগুলিতে রূপান্তর করে।

আসল উত্তর (পড়া সহজ হতে পারে) :

PUT /something(যদি /somethingইতিমধ্যে বিদ্যমান থাকে): "আপনার কাছে যা আছে তা নিয়ে যান /somethingএবং আমি আপনাকে যা দিয়েছি তা প্রতিস্থাপন করুন" "

PUT /something(যদি /somethingইতিমধ্যে বিদ্যমান না থাকে): "আমি আপনাকে যা দিচ্ছি তা নিয়ে যাও এবং এতে রেখে দেবে /something"।

POST /something: "আমি আপনাকে যা দিচ্ছি তা নিন এবং /somethingআপনি যখনই কাজটি শেষ করেন আমাকে তার ইউআরএল দিন যতক্ষণ না আপনি এটি চান সেখানে রাখুন " "


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

1
@ রনিএক্সেল্রাড: পুট হ'ল ডাটাবেস "ইনসার্ট বা আপডেট" বিবরণের মতো যেখানে আপনি বিবৃতিতে কীটি অন্তর্ভুক্ত করছেন তাই কেবল প্রযোজ্য যেখানে আপনি কোনও সংঘর্ষের গ্যারান্টি দিতে পারবেন না। যেমন। আপনার ডোমেনের একটি 'প্রাকৃতিক কী' আছে বা আপনি কোনও গাইড ব্যবহার করেন। পোস্ট হ'ল একটি টেবিলের মধ্যে একটি স্বয়ংক্রিয় বাড়ানোর কী সহ সন্নিবেশ করানোর মতো। ডাটাবেস দ্বারা আপনাকে জানাতে হবে এটি gotোকানোর পরে এটি কোন আইডি পেয়েছে। নোট করুন আপনার "অন্তর্ভুক্ত বা আপডেট করুন" বিদ্যমান থাকলে কোনও পূর্ববর্তী ডেটা প্রতিস্থাপন করবে।
নাইজেল থর্ন

আপনার উত্তরের জন্য ধন্যবাদ সুতরাং উদাহরণস্বরূপ যদি আমি একটি ইউআরআই সহ পুস্তক আইডি 10 পুট করার চেষ্টা করছি: পুট বই / 10। যদি আইডি 10 বইয়ের অস্তিত্ব না থাকে তবে আমার সঠিক আইডি 10 সহ একটি বই তৈরি করা উচিত? তবে আমি তৈরি আইডি অঙ্কটি নিয়ন্ত্রণ করতে পারি না, কারণ এটি স্বয়ংক্রিয়ভাবে বৃদ্ধি। এই পরিস্থিতিতে আমার কী করা উচিত?
রনি এক্সেলরড

1
@RoniAxelrad REST PUT যে আইডি নেই তা সার্ভারের কাছে একটি উত্স তৈরি করার অনুরোধ। এটি এখনও অনুমতি দিতে চায় কিনা তা সিদ্ধান্ত নেওয়ার বিষয়টি এখনও সার্ভারের হাতে রয়েছে। সার্ভার দায়িত্বে আছে। এটি "না। আমি এটি করতে যাচ্ছি না" দিয়ে প্রতিক্রিয়া জানাতে পারে। আপনি যদি ইতিমধ্যে ব্যবহারকারীর পর্যাপ্ত অনুমতি না থাকে ... ইত্যাদি করে থাকেন। সার্ভারের জন্য "না" বলা ঠিক আছে। REST একটি কনভেনশন যা আমাদের বিভিন্ন ধরণের অনুরোধের অর্থ সংজ্ঞায়িত করতে দেয় ... আপনার সার্ভার সিদ্ধান্ত নিয়েছে যে আপনার ব্যবসায়িক যুক্তির ভিত্তিতে requests অনুরোধগুলির সাথে কী করা উচিত :) এমনকি যদি এটি "না" বলে তবে এটি REST অনুসরণ করছে :)
নাইজেল থর্ন

38

সংক্ষিপ্ত উত্তর:

থাম্বের সহজ নিয়ম: তৈরি করতে POST ব্যবহার করুন, আপডেট করতে PUT ব্যবহার করুন।

দীর্ঘ উত্তর:

পোস্ট:

  • POST সার্ভারে ডেটা প্রেরণে ব্যবহৃত হয়।
  • যখন উত্সটির URL অজানা থাকে তখন দরকারী

রাখুন::

  • PUT সার্ভারে রাষ্ট্র স্থানান্তর করতে ব্যবহৃত হয়
  • কোনও সংস্থার ইউআরএল জানা থাকলে দরকারী

দীর্ঘ উত্তর:

এটি বোঝার জন্য আমাদের প্রশ্ন করা দরকার কেন পিইউটির প্রয়োজন ছিল, পুটগুলি কী কী সমস্যাগুলি সমাধান করার চেষ্টা করছিল যা পোস্টটি পারেনি।

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

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


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

36

আঞ্চলিক আপডেটগুলি করতে রুবে অন রেল 4.0.০ PUT এর পরিবর্তে 'প্যাচ' পদ্ধতিটি ব্যবহার করবে।

আরএফসি 5789 প্যাচচএইচ সম্পর্কে বলেছেন (1995 থেকে):

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

" এজ রেলস: আপডেটগুলির জন্য প্যাচটিচই নতুন প্রাথমিক এইচটিটিপি পদ্ধতি " এটি ব্যাখ্যা করে।


27

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

আপনি যখন ক্লায়েন্টকে সঠিক কাজটি করার জন্য পুরোপুরি বিশ্বাস করতে পারবেন না, তখন কোনও নতুন আইটেম তৈরি করতে POST ব্যবহার করা আরও ভাল হবে এবং তারপরে প্রতিক্রিয়াতে ক্লায়েন্টের কাছে URL টি আবার প্রেরণ করুন।


2
আমি এই বিষয়ে কিছুটা দেরি করেছি - তবে অন্য ওয়েবসাইটে অনুরূপ কিছু বলার জন্য আমার কাছে ক্লিক করতে পেলেন। যদি আপনি কোনও উত্স তৈরি করেন এবং কোনও ব্যবহারকারী নির্ধারিত নামের পরিবর্তে এটি "সনাক্তকারী" হিসাবে একটি স্ব-বর্ধিত আইডি ব্যবহার করেন তবে এটি একটি পোস্ট হওয়া উচিত।
Ixmatus

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

1
@ জোশকডগুলি ভুলে যাবেন না যে আপনার অনেকগুলি ইউআরআই একই একই অন্তর্নিহিত সংস্থানটিকে উল্লেখ করতে পারে। সুতরাং ইথার যা বলেছিলেন তা হ'ল পরামর্শ, ক্লায়েন্টটি কোনও ইউআরএল (যা আরও বেশি শব্দার্থক, যেমন হতে পারে ) PUT /X-files/series/4/episodes/max/X-Ffiles/episodes/91
লাগাতে

@ থিকোশম্যান ইস্যুটি হ'ল ইউআরএল কাঠামো ক্লায়েন্টের নয় for স্ব-আবিষ্কার সম্পর্কে পড়া (আরএসটি-র অংশও) এটিকে পরিষ্কার করতে সহায়তা করতে পারে।
জোশকডস

@ জোশকোডগুলি তখন সেই যুক্তি অনুসারে কোনও ক্লায়েন্টকে কখনও তৈরি করার জন্য PUT ব্যবহার করা উচিত নয় কারণ তারা URL সরবরাহের ক্ষেত্রে উদ্বিগ্ন হওয়া উচিত নয়। ঠিক আছে ... যদি না সার্ভার PUT- র কাছে কোনও URL সরবরাহ না করে যদি ক্লায়েন্টটি এটি রাখতে চায় ... "PUT / মন্তব্য / নতুন" এর মতো কিছু এবং সার্ভার "204 / মন্তব্য / 234532" সাড়া দিতে পারে তবে এটি কিছুটা মনে হয় আমার কাছে আরপিসি, ক্লায়েন্টকে কেবল মন্তব্য করতে / মন্তব্য করা উচিত ...
থোকোশম্যান

24

খুব সাধারণ উপায়ে আমি ফেসবুক টাইমলাইনের উদাহরণ নিচ্ছি।

কেস 1: আপনি যখন আপনার টাইমলাইনে কিছু পোস্ট করেন, এটি একটি নতুন নতুন এন্ট্রি। সুতরাং এই ক্ষেত্রে তারা POST পদ্ধতি ব্যবহার করে কারণ POST পদ্ধতিটি আদর্শহীন।

কেস ২: আপনার বন্ধু যদি আপনার পোস্টে প্রথমবার মন্তব্য করে, তবে এটি পোস্টের পদ্ধতিটি ব্যবহার করে ডাটাবেসে একটি নতুন এন্ট্রি তৈরি করবে।

কেস 3: আপনার বন্ধু যদি তার মন্তব্য সম্পাদনা করে, এক্ষেত্রে তাদের একটি মন্তব্য আইডি ছিল, তাই তারা ডাটাবেসে একটি নতুন এন্ট্রি তৈরির পরিবর্তে একটি বিদ্যমান মন্তব্য আপডেট করবে। সুতরাং এই ধরণের অপারেশনের জন্য PUT পদ্ধতিটি ব্যবহার করুন কারণ এটি আদর্শবান is

একক লাইনে, ডাটাবেসে একটি নতুন এন্ট্রি যুক্ত করতে POST ব্যবহার করুন এবং ডাটাবেজে কোনও আপডেট করার জন্য PUT করুন


4
মন্তব্যটি যদি কোনও আইডি যেমন ব্যবহারকারীর আইডি, তৈরি তারিখ, মন্তব্য-বার্তা ইত্যাদির মতো কোনও সম্পত্তি থাকে এবং সম্পাদনার সময় কেবল মন্তব্য-বার্তা আপডেট হয় তবে প্যাচচিএইচ এখানে করা উচিত?
হবিব পারওয়াদ

মন্তব্যটি আপডেট করার জন্য পিবিটি এফবি দ্বারা ব্যবহৃত হয় কারণ একটি বিদ্যমান সংস্থান আপডেট করা হচ্ছে, এবং এটি পিইটি করে তোলে (কোনও সংস্থান আপডেট করে)। PUT POST এর বিপরীতে আদর্শবান হয়ে ওঠে। এইচটিটিপি ক্রিয়াটি আদর্শবান হয়ে ত্রুটি পরিচালনার উপর প্রভাব ফেলে তবে ব্যবহার নির্দেশ দেয় না। আমার উত্তর একটি আরো বিস্তারিত ব্যাখ্যার জন্য দেখুন stackoverflow.com/questions/630453/put-vs-post-in-rest/...
Joshcodes

21

সর্বাধিক গুরুত্বপূর্ণ বিবেচনাটি নির্ভরযোগ্যতা । যদি কোনও পোষ্ট বার্তা হারিয়ে যায় তবে সিস্টেমের অবস্থা অপরিজ্ঞাত। স্বয়ংক্রিয় পুনরুদ্ধার অসম্ভব। পুট বার্তাগুলির জন্য, রাষ্ট্রটি প্রথম সফল পুনরায় চেষ্টা না করা পর্যন্ত কেবল অনির্ধারিত।

উদাহরণস্বরূপ, পোষ্টের মাধ্যমে ক্রেডিট কার্ডের লেনদেন তৈরি করা ভাল ধারণা নয়।

আপনি যদি আপনার উত্সটিতে স্বয়ংক্রিয়ভাবে ইউআরআই তৈরি করে থাকেন তবে ক্লায়েন্টের কাছে উত্পন্ন ইউআরআই (একটি খালি সংস্থানকে নির্দেশ করে) পাস করার পরেও আপনি পুট ব্যবহার করতে পারবেন।

কিছু অন্যান্য বিবেচনা:

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

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

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

একজন ইউজারজেন্ট পোষ্ট অপারেশনটিকে যতবার চায় "নিরাপদে" চেষ্টা করতে পারে। এটি শুধু একটি ডুপ্লিকেট আইডি ত্রুটি পাবেন (অভিমানী রিসোর্স বা সদৃশ ডেটা ত্রুটি একটি আইডি আছে) (বলা যাচ্ছে যে একটি বিষয় এবং রিসোর্স ID- র নেই)।
জোশকোডস

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

@bbsimonbb, HTTP এর তীব্র প্রতিক্রিয়াগুলির একটি দৃ .় এবং ডকুমেন্টেড সেট রয়েছে। এই প্রশ্নের আমার উত্তর ( stackoverflow.com/questions/630453/put-vs-post-in-rest/… ) কীভাবে ধারাবাহিকতা অর্জনের জন্য স্পেসিফিকেশন অনুসারে HTTP ব্যবহার করবেন covers
জোশকডস

17

এই বিষয়টিতে নতুন পাঠক আপনার কী করা উচিত তা নিয়ে অফুরন্ত আলোচনা এবং অভিজ্ঞতা থেকে পাঠের আপেক্ষিক অনুপস্থিতি দ্বারা হতবাক হবে। এসওএপি-এর চেয়ে আরএসইএসটি "পছন্দসই" হওয়ার বিষয়টি হ'ল, আমি মনে করি, অভিজ্ঞতা থেকে একটি উচ্চ-স্তরের শিক্ষণ, তবে আমাদের সেখানে ধার্মিকতা অবশ্যই অগ্রগতি করেছে? এটি 2016. রয়ের গবেষণামূলক প্রবন্ধটি 2000 সালে ছিল we আমরা কী বিকাশ করেছি? এটা কি মজা ছিলো? এর সাথে একীকরণ করা কি সহজ ছিল? সাহায্য করা? এটি কি স্মার্টফোন এবং ফ্লাইকি মোবাইল সংযোগগুলির উত্থান পরিচালনা করবে?

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

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

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

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

আপনি প্রতিশ্রুতিগুলির সাথে দ্রুত মিল খুঁজে পাবেন: আমরা কিছু করার আগে ফলাফলের জন্য স্থানধারক তৈরি করি এবং ফিরিয়ে দেব। প্রতিশ্রুতির মতো, কোনও ক্রিয়া একবারে সফল বা ব্যর্থ হতে পারে, তবে এর ফলাফল বারবার আনা যায়।

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

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

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

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

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


1
প্রতিক্রিয়া স্টোর করবেন না কোনও সেশন বজায় রাখার মতো? যা (অনুভূমিক) স্কেলিংয়ের সমস্যা সৃষ্টি করবে।
সৌরভ হরভান্দে

17

অন্যদের প্রস্তাবিত পার্থক্য ছাড়াও, আমি আরও একটি যুক্ত করতে চাই।

ইন পোষ্ট পদ্ধতি শরীরের প্যারাম পাঠাতে পারেনform-data

ইন PUT পদ্ধতি শরীরের প্যারাম পাঠাতে হবেx-www-form-urlencoded

শিরোলেখ Content-Type:application/x-www-form-urlencoded

এই অনুসারে, আপনি PUT পদ্ধতিতে ফাইল বা মাল্টিপার্ট ডেটা প্রেরণ করতে পারবেন না

সম্পাদনা

"অ্যাপ্লিকেশন / x-www-form-urlencoded" বিষয়বস্তু ধরণের বৃহত পরিমাণে বাইনারি ডেটা বা এসএসআইআই অক্ষরযুক্ত পাঠ্য পাঠানোর জন্য অক্ষম। "মাল্টিপার্ট / ফর্ম-ডেটা" বিষয়বস্তু ফাইলগুলি ফর্ম জমা দেওয়ার জন্য ব্যবহার করা উচিত যা ফাইলগুলি, অ-এএসসিআইআই ডেটা এবং বাইনারি ডেটা ধারণ করে।

যার অর্থ যদি আপনাকে জমা দিতে হয়

ফাইল, অ-এএসসিআইআই ডেটা এবং বাইনারি ডেটা

আপনার পোষ্ট পদ্ধতিটি ব্যবহার করা উচিত


3
কেন এটি upvated ছিল না? যদি সত্য হয় তবে এটি একটি জটিল পার্থক্য নয় কি?
আইফ্যাকচার

2
প্রোফাইল আপডেটের জন্য এপিআই বাস্তবায়ন করার সময় আমি এটির মুখোমুখি হয়েছিলাম যার মধ্যে ব্যবহারকারী প্রোফাইল পিক আপলোড অন্তর্ভুক্ত রয়েছে। তারপরে আমি এটি পোস্টম্যান, আজাক্স, পিএইচপি কার্ল এবং ল্যারাভেল 5.6 ব্যাকএন্ড হিসাবে পরীক্ষা করেছি tested
রোহিত ধিমান

14

REST পরিষেবাদির জন্য HTTP পোষ্ট বনাম HTTP পুট পদ্ধতি কখন ব্যবহার করবেন তা নিয়ে সর্বদা কিছু বিভ্রান্তি দেখা যায়। বেশিরভাগ বিকাশকারী সিআরইউডি অপারেশনগুলি সরাসরি এইচটিটিপি পদ্ধতিতে যুক্ত করার চেষ্টা করবে। আমি যুক্তি দিয়ে বলব যে এটি সঠিক নয় এবং কেউ সিআরইউডি ধারণাগুলি এইচটিটিপি পদ্ধতিগুলির সাথে সংযুক্ত করতে পারে না। এটাই:

Create => HTTP PUT
Retrieve => HTTP GET
Update => HTTP POST
Delete => HTTP DELETE

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

এইচটিটিপি ১.১ স্পেসিফিকেশন অনুসারে জিইটি, হেড, ডিলেট এবং পুট পদ্ধতি অবশ্যই আদর্শবান এবং পোষ্ট পদ্ধতিটি আদর্শবান নয় mp এর অর্থ এটি যদি বলা হয় যে কোনও অপারেশনটি যদি একাধিক বা একাধিকবার কোনও উত্সে সঞ্চালিত হতে পারে এবং সর্বদা সেই সংস্থানটির একই অবস্থানে ফিরে আসে তবে mp যেখানে একটি অ-আদর্শবান অপারেশন সংস্থার পরিবর্তিত স্থিতিকে এক অনুরোধ থেকে অন্য অনুরোধে ফিরিয়ে দিতে পারে। অতএব, একটি আদর্শহীন অপারেশনে, কোনও উত্সের একই অবস্থা প্রাপ্তির কোনও গ্যারান্টি নেই।

উপরোক্ত আদর্শবান সংজ্ঞাটির ভিত্তিতে, আরএসটি পরিষেবার জন্য এইচটিটিপি পোষ্ট পদ্ধতি ব্যবহারের বিপরীতে HTTP PUT পদ্ধতিটি ব্যবহার করা আমার গ্রহণযোগ্যতা: যখন HTTP পুট পদ্ধতিটি ব্যবহার করুন:

The client includes all aspect of the resource including the unique identifier to uniquely identify the resource. Example: creating a new employee.
The client provides all the information for a resource to be able to modify that resource.This implies that the server side does not update any aspect of the resource (such as an update date).

উভয় ক্ষেত্রেই, একই ক্রিয়াকলাপগুলির সাথে এই ক্রিয়াকলাপগুলি একাধিকবার করা যেতে পারে। একাধিকবার অপারেশনটির অনুরোধ করে রিসোর্সটি পরিবর্তন করা হবে না। অতএব, একটি সত্য আদর্শ কর্মক্ষম। HTTP পোষ্ট পদ্ধতিটি ব্যবহার করুন যখন:

The server will provide some information concerning the newly created resource. For example, take a logging system. A new entry in the log will most likely have a numbering scheme which is determined on the server side. Upon creating a new log entry, the new sequence number will be determined by the server and not by the client.
On a modification of a resource, the server will provide such information as a resource state or an update date. Again in this case not all information was provided by the client and the resource will be changing from one modification request to the next. Hence a non idempotent operation.

উপসংহার

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


2
আপডেট => এইচটিটিপি পোস্ট: পোস্ট আপডেট করার জন্য নয়
প্রেমরাজ

@ প্রিমরাজ আপনি এমন ধারণা নিয়েছিলেন যে বুরহান আপনাকে না করতে বলছেন; যথা, আপনি CRUD, REST এবং HTTP কে বিবাদ দিচ্ছেন। আপনি যদি আরএফসি 7231 পড়েন, যেখানে এই জিনিসগুলি সংজ্ঞায়িত করা হয়েছে, আপনি দেখতে পাবেন যে এইচটিটিপি প্রোটোকলে, পোস্টের সংজ্ঞা অবশ্যই আপডেট করার অনুমতি দেয়। এটি কেবলমাত্র আরএসটি-র সীমাবদ্ধতা যা অন্যথায় বলে।
আইএএম_এল_এক্স

13

উত্স সার্ভারটি সেই ইউআরআই দিয়ে সংস্থান তৈরি করতে পারে

সুতরাং আপনি POST এবং সম্ভবত ব্যবহার করেন তবে সংস্থান তৈরির জন্য প্রয়োজনীয় পুট নয়। আপনি উভয় সমর্থন করতে হবে না। আমার জন্য পোষ্ট পুরোপুরি যথেষ্ট। সুতরাং এটি একটি ডিজাইনের সিদ্ধান্ত।

আপনার উদ্ধৃতি হিসাবে উল্লিখিত হিসাবে, আপনি তৈরির জন্য PUT ব্যবহার করেন কোনও আইআরআই-এর জন্য কোনও সংস্থান সংস্থান নেই এবং আপনি যে কোনও উপায়ে কোনও সংস্থান তৈরি করতে চান। উদাহরণস্বরূপ, PUT /users/123/passwordসাধারণত পুরানো পাসওয়ার্ডটি একটি নতুন দিয়ে প্রতিস্থাপন করে তবে আপনি এটি পাসওয়ার্ড তৈরি করতে ব্যবহার করতে পারেন যদি এটি ইতিমধ্যে বিদ্যমান না থাকে (উদাহরণস্বরূপ, সদ্য নিবন্ধিত ব্যবহারকারীদের দ্বারা বা নিষিদ্ধ ব্যবহারকারীদের পুনরুদ্ধার করে)।


আমি মনে করি আপনি কীভাবে পুট ব্যবহার করবেন সে সম্পর্কে কয়েকটি ভাল উদাহরণ সরবরাহ করতে পেরেছেন, ভাল হয়েছে।
থোকোশম্যান

12

আমি নিম্নলিখিত সঙ্গে অবতরণ করতে যাচ্ছি:

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

পোস্টটি মূলত একটি ফর্ম ফর্ম বার্তা, যার অর্থ 'ব্যান্ডের বাইরে' সংজ্ঞায়িত করা হয়। যদি কোনও বার্তাকে কোনও ডিরেক্টরিতে কোনও সংস্থান যুক্ত করার অর্থ ব্যাখ্যা করা যায়, তবে তা ঠিক আছে তবে মূলত আপনাকে কী বার্তা পাঠাচ্ছে তা (পোস্টিং) রিসোর্সের সাথে কী হবে তা বুঝতে হবে।


কারণ পুট এবং জিইটি এবং ডিলেট একটি সংস্থানকে উল্লেখ করে, তারা সংজ্ঞা আদর্শ দ্বারাও হয়।

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

একটি পুট একটি তৈরি করা প্রয়োজন হয় না; যদি সংস্থানটি ইতিমধ্যে তৈরি না করা হয় তবে পরিষেবাটি ত্রুটি করতে পারে তবে অন্যথায় এটি আপডেট করুন। বা তদ্বিপরীত - এটি সংস্থান তৈরি করতে পারে, তবে আপডেটের অনুমতি দেয় না। পুট সম্পর্কে কেবলমাত্র প্রয়োজনীয় এটি হ'ল এটি একটি নির্দিষ্ট সংস্থানকে নির্দেশ করে এবং এর পেডলোডটি সেই সংস্থানটির প্রতিনিধিত্ব করে। একটি সফল পুট মানে (হস্তক্ষেপ ব্যতীত) যে একটি জিইটি একই সংস্থানটি পুনরুদ্ধার করবে।


সম্পাদনা করুন: আর একটি জিনিস - একটি পুট তৈরি করতে পারে তবে তা যদি হয় তবে আইডিটি প্রাকৃতিক আইডি হতে হবে - একে একে একটি ইমেল ঠিকানা। আপনি যখন দুইবার পুট করেন, দ্বিতীয় পুটটি প্রথমটির একটি আপডেট। এটি এটিকে আদর্শবান করে তোলে ।

যদি আইডিটি উত্পন্ন হয় (উদাহরণস্বরূপ একটি নতুন কর্মচারী আইডি), তবে একই ইউআরএলযুক্ত দ্বিতীয় পুট একটি নতুন রেকর্ড তৈরি করবে, যা আদর্শবান্ধব নিয়ম লঙ্ঘন করে। এক্ষেত্রে ক্রিয়াপদটি হবে পোস্ট, এবং বার্তাটি (সংস্থান নয়) এই বার্তায় বর্ণিত মানগুলি ব্যবহার করে একটি উত্স তৈরি করা হবে।


9

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

আমি যে সম্মেলনগুলি সর্বাধিক ব্যবহৃত হয় এবং সর্বাধিক দরকারী সেগুলি বর্ণনা করব:

যখন আপনি কোনও নির্দিষ্ট ইউআরএলে কোনও সংস্থান রাখেন তখন যা হয় তা হ'ল এটি সেই URL- এ বা সেই লাইন বরাবর কিছু সংরক্ষণ করা উচিত।

আপনি যখন কোনও নির্দিষ্ট ইউআরএলটিতে কোনও উত্স পোস্ট করেন, প্রায়শই আপনি সেই URL তে সম্পর্কিত কোনও টুকরো পোস্ট করেন। এটি সূচিত করে যে URL এ থাকা সংস্থানটি ইতিমধ্যে বিদ্যমান।

উদাহরণস্বরূপ, আপনি যখন একটি নতুন স্ট্রিম তৈরি করতে চান, আপনি এটিকে কিছু ইউআরএল রাখতে পারেন। তবে আপনি যখন কোনও বিদ্যমান স্ট্রিমে কোনও বার্তা পোস্ট করতে চান, আপনি তার ইউআরএল পোস্ট করতে পারেন।

স্ট্রিমের বৈশিষ্ট্যগুলিকে সংশোধন করার জন্য, আপনি এটি PUT বা পোস্টের মাধ্যমে করতে পারেন। মূলত, অপারেশনটি আদর্শহীন হলে কেবল "PUT" ব্যবহার করুন - অন্যথায় POST ব্যবহার করুন।

দ্রষ্টব্য, তবে, সমস্ত আধুনিক ব্রাউজারগুলি জিইটি বা পোষ্ট ব্যতীত HTTP ক্রিয়াগুলি সমর্থন করে না।


আপনি পোষ্টকে যা বর্ণনা করেন তা হ'ল প্যাচএইচএইচটির আচরণ করা উচিত। পোষ্টের অর্থ "মেলিং তালিকায় পোস্টে" যেমন "সংযোজন" এর অনুরূপ আরও কিছু হবে to
আলেকজান্ডার টর্সলিং

8

বেশিরভাগ সময়, আপনি এগুলি ব্যবহার করুন:

  • একটি সংগ্রহের মধ্যে একটি উত্স পোস্ট করুন
  • সংগ্রহ /: আইডি দ্বারা চিহ্নিত একটি সংস্থান রাখুন

উদাহরণ স্বরূপ:

  • পোস্ট / আইটেম
  • পুট / আইটেম / 1234

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

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

মনে রাখবেন, আপনার এপিআই সহজ রাখার জন্য REST হ'ল কনভেনশন এবং গাইডলাইনের একটি সেট। যদি আপনি কেবল "আরইএসটিফুল" বাক্সটি পরীক্ষা করতে কোনও জটিল কাজ শেষ করেন তবে আপনি উদ্দেশ্যটিকে পরাস্ত করছেন;)


7

যদিও এগুলি বর্ণনা করার সম্ভবত অজ্ঞাব্য উপায় রয়েছে তবে এটি ওয়েবসাইটের উত্তরগুলি থেকে বিভিন্ন বিবৃতিতে বিরোধী বলে মনে হচ্ছে।

আসুন এখানে খুব স্পষ্ট এবং সরাসরি থাকুন। আপনি যদি ওয়েব নেটওয়্যার সাথে কাজ করে একটি নেট নেটওয়ার্ক বিকাশকারী হন তবে তথ্যগুলি হ'ল (মাইক্রোসফ্ট এপিআই ডকুমেন্টেশন থেকে), http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web -পি-যা-ক্রুড-অপারেশনগুলি সমর্থন করে :

1. PUT = UPDATE (/api/products/id)
2. MCSD Exams 2014 -  UPDATE = PUT, there are **NO** multiple answers for that question period.

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

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


7

এখানে একটি সহজ নিয়ম:

PUTকোনও ইউআরএল-তে ব্যবহার করা উচিত সেই URL এ অবস্থিত হতে পারে এমন সংস্থানটি আপডেট করতে বা তৈরি করতে।

কোনও ইউআরএল-এর পোস্টে কোনও সংস্থান আপডেট করতে বা তৈরি করতে ব্যবহার করা উচিত যা অন্য কোনও ("অধস্তন") URL এ অবস্থিত, বা HTTP- র মাধ্যমে লোকেশনযোগ্য নয়।


1
পুট আপডেটের জন্য নয়, এটি প্রতিস্থাপনের জন্য, নোট করুন যে আপনাকে তৈরি করতে কোনও কিছুর সাথে কিছুই প্রতিস্থাপন করা হচ্ছে না। পোস্ট কোনও ফর্মের আকারের আপডেটের জন্য একেবারেই নয়।
thecoshman

2
এইচটিপি-র স্পেক কি বলে? বা আপনি আপনার মন্তব্যটি অন্য কোনও বিষয়ে ভিত্তি করছেন?
অ্যাডাম গ্রিফিথস

এটি কেবল সাধারণ জ্ঞান, আপনি কীভাবে কোনও আপডেট করবেন যখন আপনি জানেন না যে এটি আপনি কী করছেন তা আপডেট করছেন? পোস্ট একটি নতুন সংস্থান তৈরি করার জন্য।
thecoshman

2
থোকোশম্যান - আপনি এখানে শব্দার্থবিজ্ঞানের অপব্যবহার করছেন - কয়েকটি পার্থক্য সহ একই উত্স হলে কোনও প্রতিস্থাপন আপডেট হতে পারে। যদি প্রতিস্থাপন একই সংস্থান পরিবর্তন করতে ব্যবহৃত হয় তবে কেবল প্রতিস্থাপনের জন্য তা কার্যকর হয়। একটি নতুন এবং বিভিন্ন সংস্থান দিয়ে প্রতিস্থাপন করা অবৈধ (পুরানো সরান এবং নতুন যুক্ত করবেন?), বিশেষত যদি 'নতুন' সংস্থানটির কোনও প্রাকৃতিক ID থাকে না। পোষ্ট, ওটিওএইচ এমন একটি জিনিস যা তৈরি করতে, আপডেট করতে, প্রতিস্থাপন করতে এবং মুছতে পারে - পোস্ট ব্যবহার করে বোঝাতে কোনও বার্তা রয়েছে কি না তার উপর নির্ভর করে যেমন 'ছাড় প্রয়োগ করুন', যা নির্ভর করে সংস্থান পরিবর্তন করতে পারে বা নাও করতে পারে যুক্তি।
জেরার্ড ওনিল

আপনার দ্বিতীয় মন্তব্য হিসাবে - আপনি কীভাবে সম্পদটি 'পাবেন', আপনার প্রয়োজনীয় ক্ষেত্রগুলি পরিবর্তন করুন এবং তারপরে এটি আবার রেখে দিতে পারেন? অথবা কীভাবে যদি উত্সটি অন্য উত্স থেকে আসে তবে একটি প্রাকৃতিক আইডি (বাহ্যিক আইডি) ব্যবহার করে - মূল তথ্য পরিবর্তিত হলে পুস্তকটি স্বাভাবিকভাবেই URL এ সংস্থানটি আপডেট করে।
জেরার্ড ওনিল

6

আপনি যদি ডাটাবেস ক্রিয়াকলাপগুলির সাথে পরিচিত হন তবে তা রয়েছে

  1. নির্বাচন করা
  2. সন্নিবেশ
  3. হালনাগাদ
  4. মুছে ফেলা
  5. মার্জ করুন (ইতিমধ্যে বিদ্যমান থাকলে আপডেট করুন, অন্যথায় sertোকান)

আমি PUTমার্জ এবং আপডেট হিসাবে অপারেশন এবং POSTসন্নিবেশগুলির জন্য ব্যবহার করি ।


5

অনুশীলনে, POST সংস্থান তৈরির জন্য ভাল কাজ করে। নতুন তৈরি করা সংস্থার URL টি অবস্থান প্রতিক্রিয়া শিরোনামে ফিরে আসতে হবে। সম্পদ সম্পূর্ণরূপে আপডেট করার জন্য PUT ব্যবহার করা উচিত। একটি RESTful API নকশা করার সময় দয়া করে বুঝতে পারেন যে এগুলি সর্বোত্তম অনুশীলন। যেমন HTTP স্পেসিফিকেশন সংস্থান তৈরি / আপডেট করার জন্য কয়েকটি বিধিনিষেধের সাথে PUT / POST ব্যবহার সীমাবদ্ধ করে না। Http://techoctave.com/c7/posts/71-twitter-rest-api-dissected এ দেখুন যা সেরা অনুশীলনের সংক্ষিপ্তসার করে।


বেশিরভাগ ক্ষেত্রে, এই সমস্ত গোলমালটি পড়া থেকে আপনি মনে করছেন বলটি। যদিও আমি বলব, আমাদের তৈরি করা / আপডেট করার পরিবর্তে প্রতিস্থাপন পদ্ধতি হিসাবে PUT উল্লেখ করা উচিত। আমি মনে করি এটি এটি যা করে তার মধ্যে এটি আরও ভালভাবে বর্ণনা করে।
thecoshman
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.