POST- র জন্য HTTP প্রতিক্রিয়া কোড যখন রিসোর্স ইতিমধ্যে বিদ্যমান


842

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

আমি API টি সংজ্ঞায়িত করেছি যাতে ক্লায়েন্টরা PUT ব্যবহার করে অবজেক্ট তৈরি বা সংশোধন করতে পারে:

PUT /objects/{id} HTTP/1.1
...

{json representation of the object}

{Id the অবজেক্ট আইডি, সুতরাং এটি অনুরোধ-ইউআরআইয়ের অংশ।

এখন, আমি ক্লায়েন্টদের POST ব্যবহার করে অবজেক্ট তৈরি করার অনুমতি দেওয়ার বিষয়েও বিবেচনা করছি:

POST /objects/ HTTP/1.1
...

{json representation of the object, including ID}

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


5
জুন ২০১ 2016 পর্যন্ত এফবি স্পষ্টতই 200 টি নিবন্ধকরণে সেট করে যখন ইমেল উপস্থিত থাকে
সবুজ

4
ইতিমধ্যে ব্যবহৃত যে নামের সাথে একটি সংস্থান (দল / রেপো) তৈরি করার চেষ্টা করার সময় গিথুব এপিআই 422 ফেরত দেয়
কেন

1
আপনি যদি বস্তুর অস্তিত্বকে ত্রুটি বা না বিবেচনা করেন তবে এটি নির্ভর করে। আপনি যদি অ্যাপেনডটি প্রক্রিয়া করেন তবে 200 বা 204 হ'ল সবচেয়ে উপযুক্ত প্রতিক্রিয়া কোড।
সানকাট 2000

উত্তর:


1055

আমার অনুভূতি 409 Conflictসর্বাধিক উপযুক্ত, তবে খুব কমই অবশ্যই বন্য অঞ্চলে দেখা যায়:

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

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


11
কেন 400 খারাপ অনুরোধের জন্য যান না? আমার কাছে এটি কিছুটা বৈধতা ত্রুটির মতো দেখাচ্ছে (আপনি অবৈধ আইডি সহ ভুল পেওড সরবরাহ করছেন)।
ম্যানুয়েল আলডানা

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

42
@ ব্রিকেন এটি এখন আর সঠিক নয়। এইচটিটিপি 400 টি আরএফসি 7231 এ পরিবর্তিত হয়েছে যার অর্থ " কোনও ক্লায়েন্ট ত্রুটি বলে মনে করা হচ্ছে এমন কোনও কারণে সার্ভারটি অনুরোধটি প্রক্রিয়া করতে পারে না বা করবে না (যেমন, ত্রুটিযুক্ত অনুরোধ বাক্য গঠন, অবৈধ অনুরোধ বার্তা ফ্রেমিং, বা প্রতারণামূলক অনুরোধ রাউটিং)"। আমি বলছি না 400 এই ক্ষেত্রে সঠিক ব্যবহার কিন্তু এটা পারে এর 400 নতুন সংজ্ঞা সঙ্গে সঠিক হতে
javajavajavajavajava

19
@ জাভাজাভাজভাবাভাবা: এখনও, সদৃশ ডেটা আমার মনে 'ক্লায়েন্ট ত্রুটি' নয়, তবে এটি অবশ্যই দর্শকের নজরে রয়েছে।
রিক্কেন

21
আমি বিদ্যমান / বিবাদী সংস্থান সম্পর্কে ইঙ্গিত করে শিরোনাম HTTP 409নিয়ে ফিরে আসছি Location
গিলি

100

আরএফসি 7231 অনুসারে , একটি 303 দেখুন অন্য ব্যবহৃত হতে পারে যদি কোনও পোষ্টের প্রক্রিয়াজাতকরণের ফলাফলটি কোনও বিদ্যমান সংস্থার প্রতিনিধিত্বের সমতুল্য হয়


4
আমার মতে, এটি সম্ভবত গ্রহণযোগ্য উত্তর হতে পারে। যদিও "MAY" সম্পূর্ণ alচ্ছিক আইটেমকে ইঙ্গিত করে, এটি সরকারী আরএফসি 7231 নথি দ্বারা প্রস্তাবিত একমাত্র প্রতিক্রিয়া কোড ।
নন্দো

16
এটি সবচেয়ে বিশ্রামযুক্ত উত্তর।
শেঠ

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

11
দুঃখিত, আমি এটিকে কম দেখছি। এইচটিটিপি 300 গুলি পুনঃনির্দেশের বিষয়ে রয়েছে এবং অন্য কোনও অবজেক্টে পুনঃনির্দেশ করা যা সম্ভবত বিভিন্ন বৈশিষ্ট্যযুক্ত খুব বিভ্রান্তিকর হবে।
মাইকেল শ্যাপার

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

86

ব্যক্তিগতভাবে আমি ওয়েবডিএভি এক্সটেনশনের সাথে যাই 422 Unprocessable Entity

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

422 Unprocessable Entityস্থিতি কোড মানে সার্ভারটি অনুরোধটি সত্তা (অত: পর একটি বিষয়বস্তুর প্রকার বুঝতে পারে 415 Unsupported Media Typeস্থিতি কোড অনুপযুক্ত), এবং অনুরোধ সত্তা সিনট্যাক্স সঠিক (এইভাবে একটি 400 Bad Requestস্থিতি কোড অনুপযুক্ত) কিন্তু অন্তর্ভুক্ত নির্দেশাবলী প্রক্রিয়া করতে পারেনি।


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

4
ত্রুটিযুক্ত জেএসওএন একটি সিন্ট্যাক্টিক্যালি সঠিক সত্তা নয়, সুতরাং 422আমাকে
বিরল

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

1
তামের মন্তব্যে যোগ করা, যদি দ্বিতীয় অনুরোধটি প্রথম আসে, তবে এটি সফল হবে, যা যদি শব্দার্থগতভাবে সঠিক হয় তবে সম্ভব হবে না। সুতরাং সঠিক শব্দার্থবিজ্ঞান এখানে প্রয়োগ করা হবে না।
হরিশ

4
@ টিমার কেন? "দয়া করে xy অবজেক্ট তৈরি করুন" কমান্ডটি সিন্টেক্সিকভাবে সঠিক। এটি শব্দার্থগতভাবে কেবলমাত্র তখনই xy অবজেক্ট তৈরি করা সম্ভব। যদি xy অবজেক্টটি ইতিমধ্যে বিদ্যমান থাকে তবে এটি আর তৈরি করা যায় না, সুতরাং এটি একটি অর্থগত ত্রুটি।
হেগেন ভন ইটজেন

47

এগুলি সমস্ত প্রসঙ্গে এবং অনুরোধে নকলগুলি পরিচালনা করার জন্য কে দায়ী (সার্ভার বা ক্লায়েন্ট বা উভয়)


যদি সার্ভার কেবল নকলটি নির্দেশ করে , 4XX এ দেখুন:

  • 400 খারাপ অনুরোধ - যখন সার্ভারটি একটি অনুরোধ প্রক্রিয়া করবে না কারণ এটি ক্লায়েন্টের স্পষ্ট ত্রুটি
  • 409 সংঘাত - যদি সার্ভার কোনও অনুরোধ প্রক্রিয়া করে না তবে তার কারণ ক্লায়েন্টের দোষ নয়
  • ...

জন্য অন্তর্নিহিত সদৃশ সামলাচ্ছে, 2XX তাকান:

  • 200 ঠিক আছে
  • 201 তৈরি হয়েছে
  • ...

যদি সার্ভারটি কিছু ফেরত প্রত্যাশিত হয় তবে 3 এক্সএক্স দেখুন:

  • 302 পাওয়া গেছে
  • 303 অন্যান্য দেখুন
  • ...

যখন সার্ভারটি বিদ্যমান সংস্থানটি চিহ্নিত করতে সক্ষম হয়, তখন এটি একটি পুনঃনির্দেশ নির্দেশ করে।


যদি উপরেরটি পর্যাপ্ত না হয় তবে প্রতিক্রিয়াটির শরীরে কিছু ত্রুটি বার্তা প্রস্তুত করা সর্বদা একটি ভাল অনুশীলন।


2
অনুরোধটি কোনও সংস্থার সদৃশ নয়, এটি একটিতে ডেটা যুক্ত করছে। আমার মতে আপনারা সবার সেরা উত্তর।
সানকাট 2000

28

গেমটি শেষ হতে পারে তবে একটি রেস্ট এপিআই করার চেষ্টা করার সময় আমি এই শব্দার্থবিজ্ঞানের বিষয়টিতে হোঁচট খেয়েছি।

উইককেনের উত্তরের বিষয়ে কিছুটা প্রসারিত করার জন্য, আমি মনে করি আপনি পরিস্থিতিটির উপর নির্ভর করে 409 Conflictবা ব্যবহার করতে পারেন 403 Forbidden- সংক্ষেপে, 403 ত্রুটি ব্যবহার করুন যখন ব্যবহারকারী দ্বন্দ্ব সমাধান করতে এবং অনুরোধটি সম্পূর্ণ করার জন্য একেবারে কিছুই করতে পারেন না (যেমন তারা কোনও পাঠাতে পারে না) DELETEস্পষ্টভাবে সংস্থানটি সরানোর অনুরোধ করুন), বা 409 ব্যবহার করুন যদি সম্ভবত কিছু করা যায়।

10.4.4 403 নিষিদ্ধ

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

আজকাল, কেউ "403" বলে এবং একটি অনুমতি বা প্রমাণীকরণের সমস্যা মনে আসে, তবে অনুমানটি বলে যে এটি মূলত সার্ভার ক্লায়েন্টকে বলে যে এটি করছে না, এটি আবার জিজ্ঞাসা করবেন না, এবং এখানে ক্লায়েন্টকে কেন করানো উচিত নয় here 'টি।

জন্য PUT বনাম POST... POSTব্যবহারকারীর যখন সংস্থার জন্য কোনও সনাক্তকারী তৈরি করার বা তার উপায় নেই তখন কোনও সংস্থার নতুন উদাহরণ তৈরি করতে ব্যবহার করা উচিত। PUTযখন উত্সটির পরিচয় জানা যায় তখন ব্যবহৃত হয়।

9.6 পুট

...

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

এটি একটি 301 (স্থায়ীভাবে সরানো) প্রতিক্রিয়া পাঠাতে হবে; ইউজার এজেন্ট মাই এর পরে অনুরোধটি পুনর্নির্দেশ করতে হবে কিনা সে সম্পর্কে নিজস্ব সিদ্ধান্ত নিতে পারে।


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

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

3
অনুমান অনুসারে, এটি বোঝানো হয়েছে যে 409 টি ত্রুটি কোনও POSTঅনুরোধের মাধ্যমে (সঠিকভাবে ব্যবহার করা হলে) ফেরানো যাবে না , কারণ এটি উল্লেখ করেছে যে লক্ষ্য সংস্থার সাথে দ্বন্দ্ব হলে এটি ফিরিয়ে দেওয়া উচিত । যেহেতু লক্ষ্য সংস্থানটি এখনও পোস্ট করা হয়নি, এটি সম্ভবত দ্বন্দ্ব করতে পারে না এবং সুতরাং এর সাথে উত্তর দেওয়ার 409 Conflictকোনও অর্থ হয় না।
গ্রান্ট গ্রিকজান

1
আমি এটি অনুমান করব না যে একটি দ্বারা 409 ত্রুটি ফিরে পাওয়া যাবে না POST, আসলে আমি এর বিপরীতে অনুমান করবো কারণ " পিইটি অনুরোধের প্রতিক্রিয়াতে সংঘাত সম্ভবত সবচেয়ে বেশি ঘটে।" অন্যান্য অনুরোধ পদ্ধতিগুলিও এই কোডটি ব্যবহার করতে পারে বলে মনে হয়। অতিরিক্ত হিসাবে, "প্রতিক্রিয়া সংস্থার দ্বন্দ্বের উত্সটি সনাক্ত করতে ব্যবহারকারীর জন্য পর্যাপ্ত তথ্য অন্তর্ভুক্ত করা উচিত I আদর্শভাবে, প্রতিক্রিয়া সত্তা ব্যবহারকারী বা ব্যবহারকারী এজেন্টকে সমস্যা সমাধানের জন্য পর্যাপ্ত তথ্য অন্তর্ভুক্ত করবে; তবে, এটি সম্ভবত সম্ভব না এবং হতে পারে প্রয়োজন নেই । " ( webdav.org/specs/rfc2616.html#status.409 )
জেডব্লিউস্পিন

14

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

তবে এটি এখনও আরএফসির দ্বারা "পাওয়া" রিসোর্সটি পেতে এই ইউআরএলটিতে দর্শনার্থীকে রাখে। এটিকে সরাসরি "পাওয়া" ইউআরএল-এ সরাসরি যেতে "303 অন্যটি দেখুন" ব্যবহার করা উচিত, যা বোধগম্য হয় তবে এটির নিম্নলিখিত URL টি GET এ অন্য কলটি জোর করে। ভাল দিক থেকে, এই জিইটি ক্যাশেযোগ্য।

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

আপডেট: আরএফসিটি পুনরায় পড়ার পরেও আমি এখনও মনে করি যে একটি অযোগ্য " 4XX + 303 পাওয়া" কোডটি সঠিক হওয়া উচিত। তবে, "409 কনফ্লিক্ট" হ'ল বিদ্যমান বিদ্যমান উত্তর কোড (@ ব্রিকঙ্কেন দ্বারা নির্দেশিত), সম্ভবত উপস্থিত সংস্থার দিকে ইঙ্গিত করে কোনও অবস্থান শিরোনাম সহ।


88
3xx স্ট্যাটাসগুলি পুনঃনির্দেশের জন্য বোঝানো হয়েছে
আভিরাম নেটানেল

1
"অনুরোধ করা সংস্থানটি সাময়িকভাবে আলাদা ইউআরআইয়ের অধীনে থাকে।" থেকে w3.org/Protocols/rfc2616/rfc2616-sec10.html
statueofmike

1
আইএমএইচও, "307 অস্থায়ী পুনঃনির্দেশ" হ'ল আসল অস্থায়ী পুনঃনির্দেশ। "302" অস্পষ্ট, তবে "ফাউন্ড !!" এখানে সত্যিই কাঙ্ক্ষিত বার্তা। সেরা দ্ব্যর্থহীন আপসটি এইচটিটিপি শব্দার্থবিজ্ঞানের "303 অন্যান্য দেখুন"। আমি "303 অন্যান্য দেখুন" নিয়ে যাব।
অ্যালানজডস

@ ডেভিড ভার্টানিয়ান হুম ... আমি এখানে একটি ত্রুটি দেখতে পাচ্ছি না। ক্লায়েন্ট একটি সঠিক অনুরোধ পাঠান, তবে কীভাবে "দুঃখিত, তবে আপনি যা এখানে তৈরি করতে চাইছেন তা ইতিমধ্যে সেখানে উপস্থিত" কীভাবে বলা যায়? কিছু 3xx এর জন্য একটি কাজ মনে হচ্ছে। এটি ক্লায়েন্টের ত্রুটি না থাকায় এটি আমার পক্ষে 4XX নয়।
অ্যালানজডস

1
@ ডেভিড ভার্টানিয়ান আলোচনার জন্য ধন্যবাদ। উত্তরটি 409 এর দিকে আপডেট করেছে । ক্লায়েন্ট অসম্ভব জিনিসগুলি জিজ্ঞাসা করা ভুল, এমনকি যদি এটি না জানা থাকে তবে এটি অসম্ভব।
অ্যালানজডস 20'16

11

আমার মনে হয় না আপনার এই কাজ করা উচিত।

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

আইডি ছাড়াই কোনও আইটেম যুক্ত করতে এটি ব্যবহার করুন। এটি সেরা অনুশীলন।

আপনি যদি একটি অনন্য বাধা (আইডি নয়) ক্যাপচার করতে চান তবে আপনি 409 সাড়া দিতে পারবেন, যেমন আপনি পিটি অনুরোধগুলিতে করতে পারেন। তবে আইডি নয়।


একটি যুক্ত টেবিলের সম্পর্কযুক্ত কোনও জিনিসের কী হবে? বলুন আমাদের কাছে ডেটাবেস টেবিল হিসাবে অ্যাকাউন্ট, পণ্য এবং অ্যাকাউন্ট_র উত্পাদন রয়েছে। আমি একটি অ্যাকাউন্টে একটি পণ্য যুক্ত করতে চাই, তাই আমি / অ্যাকাউন্ট / {আইডি} / প্রোডাক্টে পণ্য_আইডি সহ পোস্ট করতে চাই। যদি কেবল একটি অ্যাকাউন্ট-পণ্যের সম্পর্কের অনুমতি দেওয়া হয় তবে আমার কী ফিরিয়ে দেওয়া উচিত?
পার্কাইল 0

2
ডাটাবেস টেবিলগুলি ভুলে যান। ধরা যাক কোনও পণ্য কেবলমাত্র কোনও অ্যাকাউন্টের সাথে সম্পর্কিত হতে পারে ... তারপরে এটি বহু সম্পর্কের মধ্যে একটি। সুতরাং, O 'অ্যাকাউন্ট': অ্যাকাউন্ট_id} সহ পোষ্ট / পণ্য / account আইডি}} আপনার যদি সর্বাধিক কার্ডিনালিটি '1' তে সেট থাকে (একের সাথে এক সম্পর্ক) .... কেন তারা বিশ্রামের অবজেক্টগুলিকে পৃথক করে? কার্ডিনালিটির ত্রুটি মাত্র 400 ত্রুটি হবে। সহজবোধ্য রাখো. আমি আশা করি আপনার প্রশ্নটি আমি বুঝতে পেরেছি।
আলফোনসো টাইেন্ডা

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

@ পার্টকাইল পিকেগুলি পাবলিক আইডি হিসাবে ব্যবহার বন্ধ করুন !!
সিনেটেস্ট্যাটিক

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

9

আমি সাথে যেতে হবে 422 Unprocessable Entity , যা কোনও অনুরোধটি অবৈধ হলে ব্যবহৃত হয় তবে বিষয়টি সিনট্যাক্স বা প্রমাণীকরণে নেই।

অন্যান্য উত্তরের বিরুদ্ধে যুক্তি হিসাবে, কোনও অ- 4xxত্রুটি কোড ব্যবহার করা বোঝায় এটি ক্লায়েন্টের ত্রুটি নয় এবং এটি অবশ্যই। অ-ব্যবহার করতে4xxএকটি ক্লায়েন্ট ত্রুটি উপস্থাপন ত্রুটি কোড ঠিক কোনও অর্থে আসে না।

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

রেকর্ডের জন্য, 422 হ'ল স্থিতি কোডটি হ'ল গিটহাব যখন আপনি ইতিমধ্যে ব্যবহৃত কোনও নাম দ্বারা একটি সংগ্রহস্থল তৈরি করার চেষ্টা করেন তখন তা ব্যবহার করে।


422 ওয়েবডাব স্পেক তাই আমি এটি একটি REST এপিআই
rwenz3l

7

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

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


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

বিতর্কযোগ্য ইমো। আপনি যদি / ব্যবহারকারীদের পোস্ট করেন তবে পৃথক রেকর্ড / ব্যবহারকারী / {আইডি instead এর পরিবর্তে সংস্থানটি হ'ল
সিনাইস্টেটিক

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

PUTযদিও আপনার পরামর্শটি আমি ব্যবহার করতে চাই পছন্দ করি ।
গ্রান্ট গ্রিকজান

4

আর একটি সম্ভাব্য চিকিত্সা সর্বোপরি PATCH ব্যবহার করছে। একটি প্যাচকে এমন কিছু হিসাবে সংজ্ঞায়িত করা হয় যা অভ্যন্তরীণ স্থিতি পরিবর্তন করে এবং সংযোজনে সীমাবদ্ধ নয়।

প্যাচচ আপনাকে ইতিমধ্যে বিদ্যমান আইটেমগুলিকে আপডেট করার অনুমতি দিয়ে সমস্যার সমাধান করবে। দেখুন: আরএফসি 5789: প্যাচ


2
প্যাচ PUT এর মতো তবে সম্পূর্ণ প্রতিস্থাপন নয়। সম্পদের কোনও অংশটিকে পুরোপুরি পরিবর্তনের পরিবর্তে সংস্থার একক উপাদান যুক্ত করা, অপসারণ বা সংশোধন করার জন্য এটি ব্যবহার করা হয়।
সিনাইস্টেটিক

4

কেন না 202 গৃহীত হয় না ? এটি একটি ঠিক অনুরোধ (200s), প্রতি সেয়ে কোনও ক্লায়েন্ট ত্রুটি (400s) ছিল না।

থেকে 10 স্থিতি কোড সংজ্ঞা :

"202 স্বীকৃত processing

... কারণ এটি সম্পন্ন করার দরকার নেই, কারণ এটি ইতিমধ্যে বিদ্যমান ছিল। ক্লায়েন্ট জানেন না যে এটি ইতিমধ্যে বিদ্যমান, তারা কোনও ভুল করেনি।

আমি একটি 202 নিক্ষেপের দিকে ঝুঁকছি, এবং জিইটি কী ফিরে আসবে তার অনুরূপ সামগ্রী /{resource}/{id}ফিরে আসবে।


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

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

1
সার্ভারটি এখনও অনুরোধটি প্রক্রিয়া করা থাকলে এটি উপযুক্ত হবে। 200 বা 204 আরও সাধারণ হবে। যেহেতু ওপি একটি অ্যাপেন্ড অনুরোধ করছে, তাই বস্তুর অস্তিত্ব একটি প্রত্যাশিত শর্ত এবং ত্রুটি নয়।
সানকাট 2000

ক্লায়েন্টকে এই অনুরোধটি গ্রহণ করা হয়েছে বলে কোনও ধারণা নেই কারণ আপনি ইতিমধ্যে জানেন যে এটি ছিল না!
lucastamoios

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

2

সদৃশ রেকর্ডের জন্য সঠিক কোডটি পরীক্ষা করার সময় এই প্রশ্নটিতে হোঁচট খেয়েছে।

আমার অজ্ঞতা ক্ষমা করুন তবে আমি বুঝতে পারি না কেন সবাই "300" কোডটিকে কেন উপেক্ষা করছে যা স্পষ্টভাবে "একাধিক পছন্দ" বা "দ্ব্যর্থহীন" বলে

আমার মতে এটি আপনার নিজের ব্যবহারের জন্য একটি মানহীন বা একটি নির্দিষ্ট সিস্টেম তৈরির জন্য উপযুক্ত কোড হবে। আমিও ভুল হতে পারি!

https://tools.ietf.org/html/rfc7231#section-6.4.1


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

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

2

এটি সম্ভবত বেশি 400 Bad Request

6.5.1। 400 খারাপ অনুরোধ


৪০০ (খারাপ অনুরোধ) স্থিতি কোডটি ইঙ্গিত দেয় যে ক্লায়েন্ট ত্রুটি বলে মনে করা এমন কোনও কারণে (যেমন, বিকৃত অনুরোধ বাক্য গঠন, অবৈধ অনুরোধ বার্তা ফ্রেমিং, বা প্রতারণামূলক অনুরোধ রাউটিং) এর কারণে সার্ভার অনুরোধটি প্রক্রিয়া করতে বা করতে পারে না।

অনুরোধটিতে সদৃশ মান রয়েছে (যে মানটি ইতিমধ্যে বিদ্যমান) তাই এটি ক্লায়েন্ট ত্রুটি হিসাবে ধরা যেতে পারে। পরবর্তী চেষ্টা করার আগে অনুরোধটি পরিবর্তন করা দরকার।
এই সত্যগুলি বিবেচনা করে আমরা HTTP STATUS 400 খারাপ অনুরোধ হিসাবে উপসংহারে পৌঁছাতে পারি।


1
খারাপ অনুরোধের অর্থ প্যাকেটের সিনট্যাক্সের সাথে অন্তর্নিহিত সমস্যা রয়েছে। যদি, অন্য কোনও প্রসঙ্গে (যেমন
রিসোর্সটি

1

208 - http://httpstatusdogs.com/208-already-reported সম্পর্কে কি ? এটি কি বিকল্প?

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


এটি কোনও বিকল্প নয় কারণ আপনি কোনও নির্দিষ্ট আইটেম যুক্ত করতে চান যা আইডি ইতিমধ্যে বিদ্যমান। সুতরাং আপনি কিছু যুক্ত করার চেষ্টা করুন তবে এটি ইতিমধ্যে রয়েছে। যদি ডেটা সেট বড় হয়ে থাকে তবে একটি ঠিক আছে। কিছু যুক্ত করুন -> ঠিক আছে আমি কিছুই সংযোজন করিনি। ফিট করে না, আমার ধারণা।
মার্টিন কার্স্টেন

আমি যেমন বলেছি, আমি এটিকে ত্রুটি বলে মনে করি না। তবে আমি @ মার্টিনের দিকটি দেখছি
ফার্নান্দো

যদি সংস্থানটি সফলভাবে তৈরি না হয় তবে সংজ্ঞা অনুসারে একটি ত্রুটি রয়েছে।
গ্রান্ট গ্রিকজান

POST ডেটা সংযোজনের জন্যও ব্যবহৃত হয়। এটি সংজ্ঞা অনুসারে , ত্রুটি নয়
সানক্যাট 2000

@ সানকাট ২000 এমনকি তথ্যটি যদি সফলভাবে সংযোজন না করা হয় তবে এখনও ত্রুটি রয়েছে। এবং যদি উত্সটি ইতিমধ্যে বিদ্যমান থাকে তবে কোনও ডেটা সংযোজন করা হবে না।
গ্রান্ট গ্রিকজান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.