কোনও বিশ্রামের 'পুট' অপারেশনকে কিছু ফেরাতে হবে


437

আমি ভাবছিলাম যে জনগণের মতামতগুলি একটি রেস্টলফুল PUTঅপারেশন সম্পর্কে কী যা প্রতিক্রিয়া সংস্থায় কিছুই (নাল) দেয় না।

উত্তর:


614

এইচটিটিপি স্পেসিফিকেশন ( আরএফসি 2616 ) এর বেশ কয়েকটি সুপারিশ রয়েছে যা প্রযোজ্য। এখানে আমার ব্যাখ্যা:

  • 200 OKবিদ্যমান সংস্থানটিতে আপডেটের সফল PUT এর জন্য HTTP স্থিতি কোড । কোনও প্রতিক্রিয়া দেহের প্রয়োজন নেই। ( বিভাগ 9.6 অনুযায়ী , 204 No Contentআরও বেশি উপযুক্ত))
  • 201 Createdলোকেশন শিরোনাম ক্ষেত্রটিতে নতুন সংস্থার জন্য সুনির্দিষ্ট সুনির্দিষ্ট ইউআরআই সহ কোনও নতুন সংস্থার সফল পিটিউটের জন্য এইচটিটিপি স্থিতির কোডটি প্রতিক্রিয়া সংস্থায় প্রতিবেদনের মূল প্রতিধ্বনিত হয়েছে any ( আরএফসি 2616 ধারা 10.2.2 )
  • 409 Conflictএকটি PUT- র জন্য এইচটিটিপি স্থিতি কোড যা 3 র্থ- পার্টির পরিবর্তনের কারণে ব্যর্থ হয়েছে , যার সাথে সাশ্রয়ী মূল্যের আপডেট এবং বর্তমান সংস্থার মধ্যে পার্থক্যের একটি তালিকা রয়েছে। ( আরএফসি 2616 ধারা 10.4.10 )
  • 400 Bad Requestএকটি অসফল PUT এর জন্য এইচটিটিপি স্থিতির কোড , প্রতিক্রিয়ার মূল অংশে প্রাকৃতিক-ভাষার পাঠ্য (যেমন ইংরাজী) সহ যা পুটটি ব্যর্থ হয়েছিল তা ব্যাখ্যা করে। ( আরএফসি 2616 ধারা 10.4 )

25
@ স্টিয়ান আকর্ষণীয়! এটি মোজিলার পক্ষে বেশ অহঙ্কারী বলে মনে হচ্ছে, যেহেতু আমি আরএফসি 2616 তে উল্লেখযোগ্য কিছু পাই না (বিশেষত বিভাগ 10.2 সফল 2 এক্সএক্সএক্স এবং 10.2.1 200 ঠিক আছে ) যা 200পুট, ডিলেট বা অন্য কোনও পদ্ধতির জন্য বিশেষত ব্যবহারের বিষয়টি অস্বীকার করে। আমি কি কিছু রেখে গেলাম? যেমন মোজিলা ডাব্লু 3 এবং আইইটিএফ এর বস হয়ে যায়? ;) অথবা সম্ভবত তারা পোস্টেলের দৃtel়তা নীতি সম্পর্কে কখনও শুনেনি।
সিস্টেম PAUSE

52
@ স্টিয়ান: এই বাক্যটি 3 ফেব্রুয়ারী 2013 এ অপসারণ করা হয়েছে। সম্ভবত কেউ এখানে এ সম্পর্কে পড়েছেন বলে সম্ভবত। ;) বিকাশকারী.মোজিলা.আর.ইন-
ইউএস / ডকস / এইচটিটিপি /

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

8
@ সিস্টেমেপাস সুন্দর উত্তর। একটি ছোট বিষয়: আপনি যদি একটি সফল ক্রিয়াকলাপের জন্য কোনও প্রতিক্রিয়া সংস্থায় ফিরে আসছেন না, তবে আমি 204 একচেটিয়াভাবে ব্যবহারের পরামর্শ দেব। কিছু ক্লায়েন্ট (উদাহরণস্বরূপ jQuery Ajax) তারা শূন্য-দৈর্ঘ্যের প্রতিক্রিয়ার প্রত্যাশা করে তবে তা না পেলে শ্বাসরোধ করবে। আপনি এই প্রশ্নের একটি উদাহরণ দেখতে পারেন ।
নিক_ডাব্লু

3
উত্তর দেওয়ার পরে সম্ভবত আরএফসি 2616 আপডেট করা হয়েছে। 9.6 এ যেখানে No response body needed200 এর সাথে সম্পর্কিত তা উল্লেখ করা হয়নি In বাস্তবে প্রতিক্রিয়া সংস্থার কোনও পুট সম্পর্কিত কোনও বিষয়ই উল্লেখ করা হয়নি। এটি কেবলমাত্র জানিয়েছেIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
জেমস

164

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

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


3
"সার্ভার এই সংস্থানটিতে কিছু প্রক্রিয়াজাতকরণ প্রয়োগ করতে পারে": আমি এটি নতুন। আসলেই কি বিশ্রাম?
রায়েডওয়াল্ড

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

19
@ র্যান্ডলফো রিস্টের প্রয়োজন নেই যে পুরো রিসোর্সটি একটি পুটকে আপডেট করা উচিত এটি প্যাচ-এর মতো হওয়া উচিত নয়?
মার্কো সিয়ামব্রোন

14
@ মারকোসিআমব্রোন হ্যাঁ, আমি সম্মত এবং আমি আমার পূর্ববর্তী মন্তব্যটি পুনরায় বলি। আমি REST এবং PUT- এ আমার টিউনটি পরিবর্তন করেছি - PUT সর্বদা আদর্শবান হওয়া উচিত এবং আংশিক আপডেটের জন্য কখনও ব্যবহার করা উচিত নয়। PATCH সমর্থিত না হলেই POST একমাত্র বিকল্প, সেক্ষেত্রে প্যাচচইচ একটি ভাল বিকল্প হতে পারে। প্যাচএচচ হ'ল একটি নতুন ক্রিয়া, তবে এটি কিছু সার্ভার-সাইড ফ্রেমওয়ার্ক দ্বারা সমর্থনযোগ্য নয়।
র্যান্ডলফো

2
উত্তরটি rfc7231 এর আগে ভাল লেখা হয়েছিল, তবে বিভাগ ৪.৩.৪ এটিকে পরিষ্কার করে দিয়েছে " পিটি পদ্ধতিটি অনুরোধ বার্তা পেলোডের অন্তর্ভুক্ত প্রতিনিধিত্ব করে রাষ্ট্রের সাথে লক্ষ্য সংস্থার রাজ্য তৈরি বা প্রতিস্থাপনের অনুরোধ করে"
আআআআআআ

3

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

যদি আমি কেবল পুটকে গ্রহণ করি এবং তার কাছে রিপোর্ট করার মতো কিছু না থাকে তবে আমি কোনও দেহবিহীন স্থিতি কোড 204 ব্যবহার করি। যদি আমার কাছে রিপোর্ট করার কিছু থাকে তবে আমি স্ট্যাটাস কোড 200 ব্যবহার করি এবং একটি বডি অন্তর্ভুক্ত করি।


2

HTTP- র / 1.1 বৈশিষ্ট (অনুচ্ছেদ 9.6) যথাযথ প্রতিক্রিয়া / ত্রুটি কোডের আলোচনা করা হয়েছে। তবে এটি প্রতিক্রিয়া সামগ্রীতে ঠিকানা দেয় না।

আপনি কি আশা করবেন? একটি সাধারণ এইচটিটিপি প্রতিক্রিয়া কোড (200 ইত্যাদি) আমার কাছে সোজা এবং দ্ব্যর্থহীন বলে মনে হচ্ছে।


হ্যাঁ, তবে আপনি যদি পিটি বা পোস্টের পরে bোকানো ডেটাটি সত্যিকার অর্থে আপনার পছন্দসই ডেটা উপস্থাপন করে কিনা তা পরীক্ষা করে দেখতে চান what এইচটিটিপি যদি প্রতিক্রিয়ার মূল অংশটি ফেরত পাঠাতে পারে তবে এটি আরও ভাল।
tnkh

1
@ টনখ আপনি যে পরামর্শ দিচ্ছেন তা সম্পূর্ণ ভয়ঙ্কর ধারণা। আপনি যা চান তা অর্জন করতে একটি সফল আপডেটের পরে একটি পৃথক জিইটি কল করুন। কর্মক্ষমতা নিশ্চিত করার জন্য আপনি যদি এই বিভাগে সমস্যার মুখোমুখি হন তবে একটি ক্যাচিং স্তর প্রবর্তন করুন। 'সব কিছু যায়' ধরণের যুক্তি দিয়ে গন্ডগোল করে আমরা এই সমস্যাগুলি সমাধান করতে পারি না। 2020 সালে সাধারণ জ্ঞান হওয়া উচিত যা 'সলিড' এবং বেসিক প্রোগ্রামিং নীতিগুলি নিয়ে গণ্ডগোল করবেন না It's এটি একটি অপমানজনক!
এক্সডিএস

@ এক্সডিএস আমি আপনার মন্তব্যের প্রথম অংশটি স্বীকার করি। কিন্তু তার পরে আমার চোখ রোল করতে থামাতে পারবেন না।
হাস্যকর

আপনি কেন এটি হাসিখুশি মনে করেন তা ব্যাখ্যা করার জন্য ধন্যবাদ।
এক্সডিএস

2

যদি REST এপিআই এর ব্যাকএন্ডটি কোনও এসকিউএল রিলেশনাল ডাটাবেস হয়, তবে

  1. আপডেট হওয়া যায় এমন প্রতিটি রেকর্ডে আপনার রোভার্শন থাকা উচিত ( হারানো আপডেট সমস্যা এড়াতে )
  2. আপনার সবসময় PUT এর পরে রেকর্ডটির একটি নতুন অনুলিপি ফিরে আসতে হবে (নতুন রোভার্সন পেতে )।

যদি আপনি হারানো আপডেটগুলি সম্পর্কে চিন্তা করেন না, বা আপনি যদি আপনার ক্লায়েন্টদের PUT এর পরপরই GET করতে বাধ্য করতে চান, তবে পুট থেকে কোনও কিছুই ফিরিয়ে দেবেন না।


1

"তৈরি" এর জন্য ২০১২ এর এইচটিপি প্রতিক্রিয়া কোডটি "লোকেশন" শিরোনাম সহ ক্লায়েন্টটি নতুনভাবে তৈরি হওয়া সংস্থানটি কোথায় খুঁজে পেতে পারে তা নির্দেশ করে।


5
রাখুন বস্তু নয় (অথবা করা উচিত হবে না) নব নির্মিত সম্পদ
kdazzle

9
@ কেডাজল পুট অবশ্যই একটি নতুন তৈরি সম্পদ হতে পারে, এবং প্রায়শই হবে। w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6
চার্লি শ্লিসার

3
আমার মন্তব্যটি আরও ভালভাবে ব্যাখ্যা করার জন্য। পুট মানে, এই আইটেমটি এই নির্দিষ্ট স্থানে রাখুন, বর্তমানে কী রয়েছে তা প্রতিস্থাপন করুন (যদি প্রযোজ্য হয়)।
user1751825

3
ঠিক আছে, "বর্তমানে সেখানে প্রতিস্থাপন করা" মূল বাক্যাংশ। এটি ইতিমধ্যে থাকা উচিত এবং এটি প্রতিস্থাপন করা হচ্ছে। পুট নতুন সংস্থান তৈরি করার জন্য হওয়া উচিত নয়।
কেভিন এম

3
@ কেভিনিম সর্বশেষ আরএফসি ডক আরএফসি 7231 এর মতো এটিও বলেছে যে সংস্থান তৈরি করা যেতে পারে: " পুট পদ্ধতিটি অনুরোধ করে যে টার্গেট রিসোর্সের রাজ্য তৈরি করা বা প্রতিস্থাপন করা [...]" এবং আপনি যে কারণটি ভাবছেন পিটিটি তৈরি করতে পারে না নতুন সংস্থান হ'ল কারণ আপনি অগত্যা নতুন সংস্থানটির অবস্থান জানেন না। তবে আপনি যদি এর অবস্থান / সনাক্তকারী জানেন তবে এটি এখনও সেখানে না থাকলে এটি তৈরি করা যেতে পারে।
লিও লেই

0

আমি আমার পরিষেবাগুলিতে RESTful API ব্যবহার করেছি, এবং এখানে আমার মতামত: প্রথমে আমাদের অবশ্যই একটি সাধারণ দৃষ্টিতে পৌঁছাতে হবে PUTcreate এমন একটি সংস্থান তৈরি করতে বা না পেয়ে আপডেট করতে ব্যবহৃত হয়।

আমি সংস্থানগুলি সংজ্ঞায়িত করেছি: Stateless resourceএবং Stateful resource:

  • রাষ্ট্রবিহীন সংস্থানগুলি এই সংস্থানগুলির জন্য, খালি শরীরের সাথে এইচটিপি কোডটি ফিরিয়ে দিন, এটি যথেষ্ট।

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

কিন্তু , একটি পরিষেবা বা সিস্টেম জন্য, রাখা এটাsimple,clearly,easy to use and maintainসবচেয়ে গুরুত্বপূর্ণ বিষয়।


6
"PUT একটি সংস্থান তৈরি বা না পেয়ে আপডেট করার জন্য ব্যবহৃত হয়।" - এটি সত্য বা সাধারণ নয়। বিশ্লেষণ দ্বারা, পুট সংস্থান তৈরি করতে পারে। পরিষ্কার = সাধারণভাবে পরিচিত অনুমান অনুসরণ করা।
ইম্রে পহভেল

-3

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


-3

মনে হচ্ছে ঠিক আছে ... যদিও আমি মনে করি সাফল্য / ব্যর্থতা / পোস্টের সময় / # বাইট প্রাপ্ত / ইত্যাদির একটি প্রাথমিক সূচক। ভাল হবে।

সম্পাদনা করুন: আমি ডেটা অখণ্ডতা এবং / অথবা রেকর্ড রাখার লাইন ধরে ভাবছিলাম; মেটাডেটা যেমন একটি এমডি 5 হ্যাশ বা টাইমস্ট্যাম্প প্রাপ্ত সময়ের জন্য বড় ডেটা ফাইলগুলির জন্য সহায়ক হতে পারে।


1
স্থিতি প্রতিক্রিয়া শিরোনামে প্রায় 200 ঠিক আছে কীভাবে? মনে করেন কি "" ভাল কাজ ধন্যবাদ? "
এন্থনিডব্লু জোন্স 13

প্রতিক্রিয়া শিরোনামে স্থিতি কোড থাকবে, এবং হ্যাঁ আমরা এই মুহুর্তে এইচটিটিপি সম্পর্কে কথা বলছি :)
অ্যাওওয়ার্ডকোডার

-4

আদর্শভাবে এটি একটি সাফল্য / ব্যর্থ প্রতিক্রিয়া ফিরিয়ে আনবে।


13
যদিও প্রতিক্রিয়া সংস্থায় নেই। এইচটিটিপি স্থিতি কোড এর জন্য জায়গা। হতে পারে যদি কোনও ত্রুটি হয় তবে কিছু বর্ধিত ত্রুটির তথ্য প্রতিক্রিয়া বিডিতে ফিরে আসতে পারে
দ্য

-4

এইচটিটিপি প্রতিক্রিয়াটির শিরোনাম এবং শরীরে পার্থক্য রয়েছে। PUT কখনই কোনও শরীর ফেরত দেওয়া উচিত নয়, তবে অবশ্যই শিরোনামটিতে একটি প্রতিক্রিয়া কোড দিতে হবে। সফল হলে 200 বেছে নিন এবং যদি 4 xxx না হয় তবে বেছে নিন। নাল রিটার্ন কোডের মতো কোনও জিনিস নেই। আপনি কেন এটা করতে চান?

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