যদি কোনও প্যারামিটার সিনট্যাক্টিক্যালি সঠিক হয় তবে একটি ব্যবসার নিয়ম লঙ্ঘন করে তবে কি আমি একটি HTTP 400 (খারাপ অনুরোধ) স্থিতি ফিরিয়ে আনব?


56

বলুন যে আমার কাছে একটি বিশ্রামের শেষ পয়েন্ট রয়েছে যা একটি পূর্ণসংখ্যা হিসাবে প্যারামিটার হিসাবে নেয়:

/makeWaffles?numberOfWaffles=3

এই ক্ষেত্রে, আমি সংখ্যাটি ইতিবাচক হতে চাই কারণ আমি নেতিবাচক সংখ্যক ওয়াফলগুলিকে তৈরি করতে পারি না (এবং 0 টি ওয়েফেলগুলি অনুরোধ করা সময়ের অপচয়)। সুতরাং আমি এমন কোনও অনুরোধকে প্রত্যাখ্যান করতে চাই যাতে ইতিবাচক পূর্ণসংখ্যা থাকে না। আমি এমন একটি অনুরোধও প্রত্যাখ্যান করতে চাই যা কিছু সর্বোচ্চ পূর্ণসংখ্যাকে ছাড়িয়ে যায় (আসুন এখনই বলা যাক যে এটি MAX_INTEGER)।

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

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

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

যদি কোনও প্যারামিটার সিনট্যাক্টিকভাবে সঠিক হয় তবে ব্যবসায়ের নিয়ম লঙ্ঘন করে তবে কি আমার এইচটিটিপি 400 (খারাপ অনুরোধ) স্থিতি ফিরিয়ে দেওয়া উচিত? নাকি প্রত্যাবর্তনের জন্য আরও উপযুক্ত স্থিতি রয়েছে?



উত্তর:


38

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

আরএফসি 2616 (জুন 1999)

10.4.1 400 খারাপ অনুরোধ

অনুরোধটি ত্রুটিযুক্ত সিনট্যাক্সের কারণে সার্ভারের দ্বারা বোঝা গেল না। ক্লায়েন্টটি কোনও পরিবর্তন ছাড়াই অনুরোধটির পুনরাবৃত্তি করা উচিত নয়।

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

আরএফসি 4918 (জুন 2007)

11.2। 422 অপ্রয়োজনীয় সত্তা

422 (অপ্রসারণযোগ্য সত্তা) স্থিতি কোডটির অর্থ সার্ভারটি অনুরোধ সত্তার সামগ্রীর ধরণটি বোঝে (অতএব একটি 415 (অসমর্থিত মিডিয়া প্রকার) স্থিতি কোড অনুপযুক্ত), এবং অনুরোধ সত্তার বাক্য গঠনটি সঠিক (সুতরাং 400) (খারাপ অনুরোধ) ) স্থিতি কোড অনুপযুক্ত) তবে এতে থাকা নির্দেশাবলী প্রক্রিয়া করতে অক্ষম ছিল। উদাহরণস্বরূপ, যদি কোনও এক্সএমএল অনুরোধের শরীরে সু-গঠিত (যেমন সিন্টেক্সটিক্যালি সঠিক) থাকে তবে এই শব্দ ত্রুটিযুক্ত শর্তটি হতে পারে, এক্সএমএল নির্দেশাবলী se

4X স্থিতি কোডের মূল স্পেসিফিকেশনে শব্দার্থক বৈধতার শূন্যস্থান পূরণ করার জন্য 422 অপ্রয়োজনীয় সত্তা তৈরি করা হয়েছিল। যাইহোক, আর একটি প্রাসঙ্গিক আরএফসি ২০১৪ সালে আসে যা 400 কে সাধারণ আকারে তৈরি করে সিনট্যাক্সের জন্য নির্দিষ্ট নয়

আরএফসি 7231 (জুন 2014, স্পষ্টভাবে আরএফসি 2616 কে অপ্রচলিত করে)

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

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

মনে রাখবেন যে 422 বিবরণে বলা হয়েছে যে 400 টির জন্য অনুপযুক্ত কারণ 400 (আরএফসি 2616 হিসাবে) কেবল খারাপ অনুরোধ সিনট্যাক্সের জন্য প্রত্যাবর্তন করা উচিত। তবে, আরএফসি 7231 হিসাবে, কঠোর বাক্য গঠন-ত্রুটির সংজ্ঞা আর 400 এর জন্য প্রযোজ্য নয়

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


42

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

আইইটিএফ থেকে

422 অপ্রয়োজনীয় সত্তা (ওয়েবডিএভি; আরএফসি 4918) অনুরোধটি সুসংহত হয়েছিল তবে শব্দার্থত ত্রুটির কারণে তা অনুসরণ করা যায়নি

আপনার অনুরোধটি সু-গঠিত হওয়ার কারণে এটি আরও উপযুক্ত প্রতিক্রিয়ার মতো বলে মনে হচ্ছে, তবে আপনার বৈধতার বিধিগুলি পাস করে না।


5
"400 এর অর্থ খারাপ সিনট্যাক্স, 422 এর অর্থ খারাপ শব্দার্থক" as
cbojar

33
সমস্ত x00 কোডগুলি জেনেরিক কোডগুলি "সমস্ত ক্যাচ করুন"। একটি 400 অনুপযুক্ত নয় , কেবল কম সুনির্দিষ্ট
জ্যাক 21 ই

1
ভাল উত্তর, কিন্তু @ GoFree দ্বারা প্রদত্ত অ্যানসিভারটি আমার পক্ষে আরও অর্থবোধ করে।
ইওয়ারটন

2
কোডগুলি প্রত্যাবর্তনের জন্য সত্যই একটি শক্তিশালী কেস রয়েছে যা সবাই জানে। অবশ্যই প্রত্যেকেরই 422 সন্ধান করা প্রয়োজন এবং আমি বাজি ধরব যে এটি এখনও কী তৈরি করতে হবে তা বেশিরভাগই জানেন না।
sylvanaar

8

হ্যাঁ, ইনপুট যা শেষ পয়েন্টের অন্তর্নিহিত চুক্তিটি অনুসরণ করে না এটি হ'ল "ক্লায়েন্টের ত্রুটি বলে মনে করা হয়" এবং এটি 400 করে ফিরে আসে।

এর ব্যতিক্রমগুলি হ'ল ব্যবসায়ের বিধি যদি সুরক্ষা সম্পর্কিত হয় (তবে 401 Unauthorizedবা 403 Forbiddenআরও ভাল হবে)। বিকল্পভাবে, যদি 400 পাঠানো কোনও কিছুর অস্তিত্ব সম্পর্কে তথ্য ফাঁস করে এবং তারপরে 404 Not Foundএটি আরও উপযুক্ত হতে পারে।


8

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

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

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

https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1

200 ঠিক আছে

অনুরোধটি সফল হয়েছে। তথ্য প্রতিক্রিয়া সঙ্গে ফিরে অনুরোধে ব্যবহৃত পদ্ধতি উপর নির্ভরশীল , উদাহরণস্বরূপ

ক্রিয়নের ফলাফল বর্ণনা বা ধারণ করে এমন একটি সত্ত্বা পোস্ট করুন ;

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

PS: "400 খারাপ অনুরোধ" এর অর্থ, ওয়েব সার্ভার এটি থেকে আপনি কী চান তা বুঝতে পারে নি । এর অর্থ হ'ল আপনার আবেদনের সার্ভার অংশটি এমনকি অনুরোধটি গ্রহণ করে নি। বা কমপক্ষে এর অর্থ হ'ল :-)

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


1
হ্যাঁ, 404 ফিরে আসা ঠিক আছে। আমি বলছি না যে সার্ভারের শরীরে কোনও ব্যাখ্যা দিয়ে সর্বদা 200 ওকে প্রেরণ করা উচিত।
GoFree

আমি এখনও অবধি ভাল ব্যাখ্যা। আমি এই আছে একই প্রশ্ন এবং মনে হচ্ছে যে সব শব্দ আমার কাছ থেকে differente মনে এবং আপনি @GoFree
Ewerton

@ GoFree এটি এপিআই ডিজাইন পুনর্বিবেচনা করার জন্য একটি সত্যিই ভাল উত্তর। তবে এটি কি নয়, যখন আমরা একটি REST এপিআই ব্যবহার করি তখন আমরা HTTP এবং এর প্রতিক্রিয়া কোডটি ব্যবসার নিয়মের স্তরটির বিশিষ্ট অংশ হিসাবে ব্যবহার করি?
থমাস লরিয়া

1
@ থমাস লরিয়া আমি এখনও RESTFUL এপিআই এর যথাযথ প্রয়োগ করতে দেখিনি। যাইহোক, আরইএসটি এপিআই আজ একটি গুঞ্জনশব্দ তাই প্রতিটি সংস্থাকে এটির পিছনে ধারণাটি না বুঝে এটি ব্যবহার করতে হবে (প্রযুক্তিটি নয়, শব্দটি)। হ্যাঁ, এটি সর্বত্র একটি ভুল উপায়ে ব্যবহৃত হচ্ছে। প্রোগ্রামাররা সাধারণত যা তৈরি করে তা কোনও REST এপিআই নয়, HTTP API বা API ওভার এইচটিটিপি। প্রকৃতপক্ষে কয়েকটি ভাল বিশিষ্ট বাস্তবায়নগুলির মধ্যে একটি হ'ল এইচটিটিপি নিজেই :)
GoFree

1
200-ওকে ব্যবহার করা বিশেষত যৌক্তিক যদি অ্যাপ্লিকেশনটিতে কোনও ব্যবসায়-স্তরের ত্রুটি যেমন ইনপুট মান খুব বেশি বা খুব কম বা অনুপস্থিত, পণ্য স্টক আউট ইত্যাদি বর্ণনা করার জন্য কোনও "ত্রুটি" ক্ষেত্র অন্তর্ভুক্ত করে থাকে
রোল্যান্ড

-3

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


5
409 এর অর্থ "আপনি যে রাষ্ট্রটি এটির মধ্যে রাখার চেষ্টা করছেন তার সাথে বিরোধী অন্য কোনও ক্লায়েন্ট এটি রাখার চেষ্টা করছেন", এটি সমবর্তী লেখাগুলি অবরুদ্ধ করার জন্য (উদাহরণস্বরূপ ETags ব্যবহার করে)
জ্যাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.