কোনও জিজ্ঞাসার অস্তিত্ব নেই এমন একটি অবজেক্টের রেফারেন্স দেওয়ার জন্য কি কোনও REST এপিআই 500 টি অভ্যন্তরীণ সার্ভার ত্রুটি ফিরিয়ে দেবে?


39

আমি একটি REST এপিআই নিয়ে কাজ করছি যা এমন সার্ভারে থাকে যা প্রচুর আইওটি ডিভাইসগুলির জন্য ডেটা পরিচালনা করে।

আমার কাজটি হ'ল ডিভাইসগুলি সম্পর্কে নির্দিষ্ট পারফরম্যান্সের তথ্য সংগ্রহ করতে এপিআই ব্যবহার করে সার্ভারকে জিজ্ঞাসা করা।

একটি উদাহরণে, আমি উপলব্ধ ডিভাইস এবং তাদের সম্পর্কিত শনাক্তকারীদের একটি তালিকা পেয়েছি, পরে সেই শনাক্তকারীদের (জিইউডি) ব্যবহার করে আরও বিশদ জানতে সার্ভারটি জিজ্ঞাসা করব।

সার্ভারটি 500 Internal Server Errorএই আইডিগুলির মধ্যে একটিতে একটি প্রশ্নের জন্য ফেরত দিচ্ছে। আমার আবেদনে, একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছে এবং আমি ত্রুটি সম্পর্কে বিশদটি দেখতে পাচ্ছি না। যদি আমি পোস্টম্যানের সাথে প্রতিক্রিয়াটি আরও ঘনিষ্ঠভাবে পরীক্ষা করি তবে আমি দেখতে পাচ্ছি যে সার্ভারটি শরীরে জেএসএন ফিরিয়ে দিয়েছে যা এতে রয়েছে:

errorMessage: "This ID does not exist"

সার্ভার ID শুরু করার সাথে সাথে সত্যটি সরবরাহ করেছিল তা উপেক্ষা করুন - এটি বিকাশকারীদের জন্য একটি পৃথক সমস্যা।

500 Internal Server Errorকোনও জিজ্ঞাসা অস্তিত্ব নেই এমন একটি অবজেক্টের রেফারেন্স দেওয়ার জন্য কোনও REST এপিআই কি ফিরিয়ে দেবে ? আমার চিন্তাভাবনা অনুসারে, HTTP প্রতিক্রিয়া কোডগুলি অবশ্যই API এর অভ্যন্তরীণ যান্ত্রিকতার চেয়ে REST কলের স্থিতি সম্পর্কে কঠোরভাবে উল্লেখ করা উচিত। আমি 200 OKত্রুটি এবং বিবরণ সম্বলিত প্রতিক্রিয়া সহ একটি প্রত্যাশা করব , যা প্রশ্নে থাকা API এর মালিকানাধীন হবে।


আমার কাছে এটি ঘটে যে আরএসটি কল কীভাবে কাঠামোগত হয় তার উপর নির্ভর করে প্রত্যাশার মধ্যে একটি সম্ভাব্য পার্থক্য রয়েছে।

এই উদাহরণগুলি বিবেচনা করুন:

  1. http://example.com/restapi/deviceinfo?id=123
  2. http://example.com/restapi/device/123/info

প্রথম ক্ষেত্রে, ডিভাইস আইডি একটি জিইটি ভেরিয়েবল হিসাবে পাস করা হয়। একটি 404 বা 500 ইঙ্গিত দেয় যে পাথ ( /restapi/deviceinfo) হয় না পাওয়া যায় বা সার্ভারের ত্রুটির ফলস্বরূপ।

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


এই শর্তটি কি আপনি একটি সাফল্য বা ব্যর্থতা হিসাবে বিবেচনা করছেন?
রবার্ট হার্ভে


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

18
একটি আইডি আমার কাছে 404 এর মতো শব্দ নেই। 500 টির ত্রুটির সর্বাধিক সাধারণ কারণ হ'ল হোস্টিং সার্ভারটি পরিচালনা করার জন্য কোনও অভ্যন্তরীণ ব্যতিক্রম বাধা দেয় প্রোগ্রামাররা। কখনও কখনও সত্যিই ব্যতিক্রমী কেস হয় যেখানে এটি ঘটে এবং কখনও কখনও এটি কেবল অলস প্রোগ্রামিং হয়। এখানে যা চলছে তা বলা শক্ত।
বেরিন লরিটস

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

উত্তর:


96

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

আরএফসি 2616 অনুসারে , 404 স্থিতি কোডের সংজ্ঞাটি হ'ল:

10.4.5 404 পাওয়া
যায় নি সার্ভারটি অনুরোধ-ইউআরআইয়ের সাথে মিলে এমন কিছু খুঁজে পায়নি। শর্তটি অস্থায়ী বা স্থায়ী কিনা সে সম্পর্কে কোনও ইঙ্গিত দেওয়া হয়নি। 410 (গন) স্থিতি কোডটি ব্যবহার করা উচিত যদি সার্ভারটি জানতে পারে যে কোনও অভ্যন্তরীণভাবে কনফিগারযোগ্য ব্যবস্থার মাধ্যমে জানা যায় যে কোনও পুরানো সংস্থান স্থায়ীভাবে অনুপলব্ধ এবং এর কোনও ফরোয়ার্ডিং ঠিকানা নেই। এই স্থিতি কোডটি সাধারণত ব্যবহৃত হয় যখন অনুরোধটি কেন অস্বীকার করা হয়েছে বা যখন অন্য কোনও প্রতিক্রিয়া প্রযোজ্য নয় ঠিক তখনই সার্ভারটি প্রকাশ করতে চায় না।


6
404 কেবলমাত্র শব্দার্থক ম্যাচ যদি অস্তিত্ব নেই যে আইডিটি পুনরুদ্ধার করা সংস্থার সাথে সম্পর্কিত হয় correspond
রবার্ট হার্ভে

55
@ থমাস ওভেনস এমন কোনও কোয়েরি নেই যা কোনও ফলাফল না দিলে 200 টি স্ট্যাটাস এবং ফলাফলের খালি অ্যারে ফিরে আসবে। একটি 404 কেবল তখনই প্রত্যাবর্তন করতে পারে যখন কোনও নির্দিষ্ট অবজেক্ট আইডি উল্লেখ করা হয় যা বাস্তবে বিদ্যমান নেই।
শান বার্টন

11
@ থমাস ওভেনস: কলারের দৃষ্টিভঙ্গি থেকে, শেষের দিকটি নয় /questions, এটি /questions/368213। আপনার দৃশ্যপটে সেই শেষ পয়েন্টটি বিদ্যমান নেই। এটি এইভাবে ভাবুন: আপনি যদি / foo / বার একটি জিইটি করেন এবং কোনও বার না থাকে তবে / foo উপস্থিত থাকলে বা না থাকলে প্রতিক্রিয়া কেন আলাদা হবে?
ব্রায়ান ওকলে

17
ঠিক আছে, এটি কোনও সার্ভার ত্রুটি নয় তাই আমরা 5XX প্রেরণ করি না। এটা একটা ক্লায়েন্ট ত্রুটি নেই - ক্লায়েন্ট, কিছু হবে না জানতে চাওয়া তাই আমরা 4xx পাঠান, বিশেষভাবে 404.
bdsl

7
@ থমাস ওভেনস: How do you differentiate between a 404 meaning "the query returned no results" and a 404 meaning "the endpoint does not exist"?- ৪০০ টি খারাপ অনুরোধ।
রবার্ট হার্ভে

34

আমি আপনার উদাহরণ ব্যবহার করব।

http://example.com/restapi/deviceinfo?id=123

যদি শেষ পয়েন্টটি কোনও জসন অ্যারে প্রদান করে , 200 OKফলাফল না পাওয়া গেলে খালি অ্যারের সাথে সেরা পছন্দ choice

শেষবিন্দু একটি ফিরতি করার জন্য ডিজাইন করা হয়, তাহলে একক কোনো ফলাফল , আমার পছন্দ হবে 404 NOT FOUND, কারণ, আমার জন্যে, শেষবিন্দু এই ধরনের জন্য সঠিক বাক্য গঠন হল: http://example.com/restapi/deviceinfo/123। আমি সাধারণত ফিল্টারিংয়ের জন্য অনুরোধ প্যারাম ব্যবহার করি এবং যখন আমার শেষ পয়েন্টটি একটি অ্যারে ফেরত দেয়।

http://example.com/restapi/device/123/info

আমি এই প্রশ্নের ইতিমধ্যে উত্তর দেওয়া হয়েছিল মনে এখানে । পোস্ট বা জিইটি, ভাল পছন্দটি মনে হয় 404 NOT FOUNDকারণ সংস্থানটি 123পাওয়া যায় নি।

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


2
কোন অস্তিত্বহীন আইডি এবং একটি খারাপ URL এর মধ্যে আপনি কীভাবে পার্থক্য করবেন?
রবার্ট হার্ভে

2
@ লুইফ্ফস, আপনি এটি করতে পারেন, আমি তাতে কোনও সমস্যা দেখতে পাচ্ছি না। আমি যে কয়েকটি এপিআই বিকাশ করেছি সেগুলিতে আমি সাফল্যের কোনও শরীর ছাড়াই একটি সফল পুট বা মুছে ফেলতে ( এখানে বর্ণিত হিসাবে ) ব্যবহার করতে পছন্দ করি ।
ধেরিক

10
স্তরের কোনও অস্তিত্বের আইডি এবং খারাপ URL এর মধ্যে কেন পার্থক্য করা উচিত ? যে কোনও উপায়ে আপনি এখনও কোনও বৈধ অনুরোধ করছেন, যতক্ষণ না এইচটিটিপি সম্পর্কিত is সার্ভার ঠিক ... ভাল ... আপনি যে সংস্থানটি সম্বোধন করছেন তা খুঁজে পাচ্ছেন না । একটি খারাপ URL টি একটি ত্রুটিযুক্ত অনুরোধ নয়; এটি ভুল জিনিসের জন্য সুসংহত অনুরোধ ।
সিএওও

6
@ সিএইচএও একটি বিকাশকারী হিসাবে, আমি জানতে চাই যে আমার অ্যাপ্লিকেশনটি ব্যর্থ হচ্ছে কিনা কারণ আইটেমটির অস্তিত্ব নেই, বা যদি আমি ঘটনাক্রমে app.company.cxm / টেস্টে / app.company.cxm / tst / এর পরিবর্তে আমার অ্যাপটিকে নির্দেশ করি
প্যাট্রিক এম

7
@ পেট্রিকএম: একজন বিকাশকারী হিসাবে আপনার জানা উচিত যে ত্রুটি প্রতিক্রিয়াগুলিতে একটি বার্তা শরীরেও থাকতে পারে। আপনি যদি সত্যিই এটি চান তবে ব্যাখ্যামূলক ত্রুটির তথ্য সেখানেই যায়। শব্দার্থবিভাজনগুলি ভেঙে দেবেন না কারণ আপনি চর্বিযুক্ত আঙ্গুলগুলি সম্পর্কে ভৌতিক। HTTP- র স্তরে, এটা কোন ব্যাপার না কিনা তোমার মত বিশৃঙ্খলার সৃষ্টি /itms/1234বা /items/12234
সিএওও

27

HTTP 404 সঠিক, কারণ সার্ভার বুঝতে পারে যে ক্লায়েন্টটি কী সংস্থান চাইছে, কিন্তু এতে সেই সংস্থান নেই।

আপনি "REST API" এর সাথে কাজ করছেন তা হ'ল মূল বিষয়। কোনও ফাংশন সম্পাদন না করে, প্রিপ্রেসিটেশনাল স্টেট ট্রান্সফার সম্পাদনের মতো এপিআইয়ের আচরণ করা উচিত। (অবশ্যই, "REST" শব্দটির বিস্তৃত অর্থ এসেছে, তবে আপনি এর আক্ষরিক অর্থটি এখানে ভাল প্রভাবের জন্য ব্যবহার করতে পারেন)) ক্লায়েন্টটি ইউআরএল দ্বারা বর্ণিত একটি সংস্থার অবস্থা জিজ্ঞাসা করেছে http://example.com/restapi/device/123/info। একটি ক্যোয়ারস্ট্রিং ( /deviceinfo?id=123) পরিস্থিতি পরিবর্তন করবে না। সার্ভারটি জানে যে আপনি 123 ডিভাইসের স্থিতি স্থানান্তর করতে বলছেন, তবে এটি এটি একটি পরিচিত উত্স হিসাবে স্বীকৃতি দেয় না। অত: পর HTTP 404

এখানে আলোচনা করা অন্যান্য সম্ভাব্য প্রতিক্রিয়ারও নির্দিষ্ট অর্থ রয়েছে:

  • HTTP 200- আমরা আপনার জন্য রাষ্ট্র পেয়েছি; এটা প্রতিক্রিয়া বডি হয়।
  • HTTP 204- আমরা আপনার জন্য রাষ্ট্র পেয়েছি; এটা ফাঁকা
  • HTTP 400- আপনি কোন সংস্থান সম্পর্কে জিজ্ঞাসা করছেন তা আমরা বলতে পারি না। আপনার ইউআরএল ঠিক করুন।
  • HTTP 500- আমরা ত্রুটিযুক্ত। আপনার দোষ না.

দেখুন বোঝায় যা RFC 2616 সেক। যথাযথ 10


আমি এই বিষয়ে আপনার গ্রহণের সাথে একমত। সার্ভার যদি 404 ফেরত দেয় তবে এটি কী করছে তার চেয়ে বেশি বোঝা যাবে (500)। ধন্যবাদ.
জেলটন

11

একটি 5xx ত্রুটি সাধারণত সার্ভারে একটি ত্রুটির সম্মুখীন হয়েছে এবং অনুরোধটি সম্পূর্ণ করতে পারে না তা বোঝাতে ব্যবহৃত হয়। যদি সার্ভারটি অনুরোধটি গ্রহণ করে, তবে সফলভাবে এটি বিশ্লেষণ করতে পারে এবং তার কাজটি করে, এর ফলে 5XX ত্রুটি ফিরে পাওয়া উচিত নয়।

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


আমি আপনার উভয় উদাহরণ ( http://example.com/restapi/deviceinfo?id=123এবং http://example.com/restapi/device/123/info) একই ব্যবহার করব - এটি 123প্যারামিটার। উভয় ক্ষেত্রেই আইডি 123 সহ কোনও ডিভাইসের জন্য ডিভাইসের তথ্য পাওয়ার জন্য একটি অনুরোধের কাঠামোর বিভিন্ন উপায়।

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

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

যদি সমস্ত পরামিতি বৈধ হয়, আমি অনুরোধটি প্রক্রিয়া শুরু করব। যদি সিস্টেম বা কোনও নির্ভরতা (একটি ডেটাবেস, একটি তৃতীয় পক্ষের পরিষেবা, অন্য অভ্যন্তরীণ পরিষেবা) অনুপলব্ধ থাকে তবে আমি একটি 5XX কোড ফেরত দেব - 503 নির্দিষ্ট হবে তবে একটি 500 এছাড়াও গ্রহণযোগ্য হবে। উভয় ক্ষেত্রেই, আমি অতিরিক্ত বিশদ সহ একটি শরীর ফেরত দেব। বিবেচনা করুন যে কোনও বাহ্যিক নির্ভরতা যদি 408 এর অনুরোধের সময়সীমার রিপোর্ট করে তবে আমি তা খাব এবং 500 কে আমার ক্লায়েন্টকে ফিরিয়ে দেব, যদি আমার সিস্টেমে আমার অনুরোধটির সময়সীমা শেষ হয়ে যায় তবেই ক্লায়েন্ট 4040 পেতে সক্ষম হয়। যদি সিস্টেমটি অনুরোধটি সম্পূর্ণ করতে সক্ষম হয়, আমি 200 এবং উপযুক্ত বডিটি ফিরিয়ে দেব।

204 কিছু ক্ষেত্রে কার্যকর হতে পারে, তবে এটি আপনাকে প্রতিক্রিয়া বৌকে পাঠানো থেকে বিরত রাখে। বিশেষত একটি এপিআই সেটিংয়ে লগিং বা রিপোর্টিং মেকানিজমে খাওয়ানো যেতে পারে এমন তথ্য সহ একটি প্রতিক্রিয়া সংস্থা পাঠানো বেশিরভাগ ক্ষেত্রে সঠিক সিদ্ধান্ত নেওয়ার মতো বলে মনে হয়।

সার্ভারের একটি /deviceinfoশেষ পয়েন্ট বা /device/:id/infoশেষ পয়েন্ট না থাকলে কেবল একবার 404 ফেরত আসবে ।

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


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

2
যদি আমি এই এপিআইটি ডিজাইন করছিলাম যা আমি জিজ্ঞাসা করছি, আমার কাছে এটি এমন 200 এর সাথে ফিরে আসবে যাতে তার প্রভাবের কিছু থাকে device: 123; status: not found;। তারপরে আমি জানতে পারি যে ক্যোয়ারীটি কাজ করেছে এবং এপিআই আমাকে দরকারী তথ্য বলছে।
জেলটন

7
@ ব্লারফ্লাল যে প্রচুর ওয়েবসাইট 500 টি পৃষ্ঠার শব্দ দ্বারা "ব্যাক আপ" (যদিও "প্রমাণিত" নয়), এটি ব্যাক আপ করা হয়, সাধারণত "আমরা ভুল করেছি, তদন্ত করব" এর মতো কিছু। আমার মনে একটি সঠিকভাবে কার্যকরী সার্ভার কখনই মহাজাগতিক রশ্মির ক্ষেত্রে বাদে 500s পাঠায় না
এমব্রিগ

6
এইচটিপি'র কোনও 'শেষের দিকের' ধারণা নেই, কোনও ভেরিয়েবল এবং বাকি ইউআরএলগুলির মধ্যে কোনও প্রাসঙ্গিক পার্থক্য নেই, এবং তাই উভয়ই বিশ্রাম দেয় না। আপনার একটিতে একটি রাউটিং সিস্টেম থাকতে পারে যা একটি রেইগেক্সের সাথে মেলে এবং কয়েক হাজার ইউআরএলকে একটি নিয়ামক ফাংশনে নিয়ে যায়, তবে এটি বাস্তবায়নের বিশদ, এপিআইর মৌলিক অংশ নয়। যখন অনুরোধ করা সংস্থানটি পুনরুদ্ধার করা হয় তখন কেবলমাত্র একটি পেতে 200 এর প্রতিক্রিয়া case এই ক্ষেত্রে ক্লায়েন্টটি এমন কোনও সংস্থার প্রতিনিধিত্ব চায় যা বিদ্যমান নেই, সুতরাং 404 সঠিক প্রতিক্রিয়া।
বিডিএসএল

8
একটি সঠিকভাবে ফাংশন সিস্টেম কখনই 500 প্রতিক্রিয়া প্রেরণ করে না। একটি সঠিকভাবে ফাংশন সার্ভার একটি 500 প্রেরণ করতে পারে কারণ এটি যদি কোনও বৃহত সিস্টেমের অংশ হয় এবং এটি যদি সেই বৃহত সিস্টেমে অভ্যন্তরীণ একটি ত্রুটি সনাক্ত করে থাকে, উদাহরণস্বরূপ ডাটাবেসটি ডাউন আছে, বা ওয়েব সেবার উপর নির্ভরশীল অন্যরা বাজে ফলাফল দেখাচ্ছে is
বিডএসএল

5

একটি 500-সিরিজের এইচটিটিপি ত্রুটি একটি সার্ভারের ত্রুটি নির্দেশ করে। এছাড়াও 501 Not Implementedএবং 505 HTTP Version Not Supportedএই ত্রুটি কোডগুলি ব্যবহার করার সাথে সাথে এই অনুরোধটি বহন করে যে পরবর্তী সময়ে অনুরোধটির পুনরায় চেষ্টা করা সফল হতে পারে (যদিও এটি কেবল 503 Service Unavailableস্পষ্টভাবেই এতে বলা হয়েছে)। আদর্শভাবে, কোনও সার্ভারের কখনই এই কোডগুলির একটি তৈরি করা উচিত নয়, যদিও বাগ-মুক্ত সফ্টওয়্যার লেখার অক্ষমতা এবং সীমাহীন সংস্থান সহ সার্ভার সরবরাহ করার অর্থ আপনার সময় সময়ে প্রয়োজন হয়।

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


1

আপনার এপিআইর ক্লায়েন্ট হিসাবে আমি যখন এই কলগুলি করি:

  1. http://example.com/restapi/deviceinfo?id=123
  2. http://example.com/restapi/device/123/info

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

REST এপিআই-এর জন্য, আমি 400 এবং 500 স্থিতি কোডগুলি ব্যতিক্রমের মতো কিছু মনে করি। আপনি যে অনুরোধটি পেয়েছেন তার জন্য যখন আপনি "স্বাভাবিক" প্রতিক্রিয়া ফিরিয়ে দিতে পারবেন না তা নির্দেশ করতে আপনি এগুলি ব্যবহার করেন, তাই ক্লায়েন্টকে যে তথ্যটি পুনরুদ্ধার করার প্রত্যাশা ছিল তা প্রক্রিয়া করার চেয়ে ব্যতিক্রমী কিছু করতে হবে।

এর অর্থ, একটি এপিআই গ্রাহক হিসাবে, আমি চেকড-রেস্ট-কল ফাংশনটি ব্যবহার করতে পারি যা কোনও প্রতিক্রিয়া পুনরুদ্ধার করে বা ব্যতিক্রম ছুঁড়ে th দারুণ; আমার সাধারণ যুক্তিটি সরলরেখার কোড হতে পারে এবং আমি স্থানীয় কোডে যেমন করি তেমনিভাবে আমার ত্রুটি-পরিচালনা পরিচালনা করতে পারি। অপ্রত্যাশিত 404s আমার কোনও কিছু না করে ব্যতীত "কোনও রিসোর্স পাওয়া যায় না" হিসাবে প্রকাশিত হবে, পরে যখন প্রক্রিয়া করার পরে আমি { errorMessage: "Device 123 not found" }এটি কোনও DeviceInfoবস্তু হিসাবে প্রক্রিয়া করছি তখন "অনুপস্থিত বৈশিষ্ট্য" ত্রুটি হিসাবে নয় ।

আপনি কারণ শেষবিন্দু যে http://example.com/restapi/deviceinfo হয় পাওয়া যায় নি, এবং এটি শুধুমাত্র এর id=123নয়, এবং তাই শরীরের একটি ত্রুটির বার্তা সঙ্গে 200 আসতে, তাহলে আপনি সি ফাংশন যে হয় একটি ফিরতি পারে যেমন ইন্টারফেস সমস্যার ঠিক একই ধরনের তৈরি করছেন সঠিক ফলাফল বা ত্রুটি কোড, বা পদ্ধতিগুলি যা নির্বিচারে ফিরে এসে সমস্যাগুলি নির্দেশ করেnull। আপনার ইন্টারফেসের একজন ব্যবহারকারী হিসাবে নিয়মিত আয় থেকে "পৃথক" চ্যানেলের মাধ্যমে ত্রুটিগুলি নির্দেশিত হওয়া খুব সুন্দর। এটি এখানেও প্রযোজ্য, যদিও HTTP 200, 404 এবং 500 প্রতিক্রিয়া নিম্ন স্তরের দৃষ্টিকোণ থেকে একই চ্যানেল। এগুলি মানসম্মত এবং আলাদা করে বলা সহজ, যাতে আমার আরএসটি ক্লায়েন্টের কাঠামোগুলি সহজেই সেগুলিকে আমার ভাষায় যথাযথ কাঠামোতে রূপান্তর করতে পারে; JSON স্তর দিয়ে একই জিনিসটি করতে (যেখানে আপনি সর্বদা 200 বলুন এবং আমাকে একটি DeviceInfoবা ত্রুটি বার্তা দিন) আপনার ব্যবহার করা JSON স্কিমার কিছু জ্ঞান এম্বেড করা দরকার।

সুতরাং কেবলমাত্র 200 টি ব্যবহার করুন যখন আপনি প্রত্যাশিত ধরণের বৈধ মানটি ফিরিয়ে দিতে পারেন (যার কারণেই http://example.com/restapi/search-devices?colour=blueযদি কোনও নীল ডিভাইস না থাকে তবে খালি অ্যারে দিয়ে 200 ফিরিয়ে দিতে পারে; একটি খালি অ্যারে একটি বৈধ অ্যারে এবং অনুরোধটির বুদ্ধিমান উত্তর "I সমস্ত নীল ডিভাইসগুলির বিবরণ চাই ")। যদি আপনি না করতে পারেন তবে সবচেয়ে উপযুক্ত নন -200 স্ট্যাটাস কোডটি ব্যবহার করুন। যদিও "ডিভাইস 123 এর অস্তিত্ব নেই" "" আমাকে ডিভাইস 123 এর বিশদ দিন "এর সঠিক প্রতিক্রিয়া এবং এটি সার্ভারের জন্য কোনও ত্রুটি নয় , ক্লায়েন্টের প্রত্যাশার ব্যতিক্রম যে তারা ফিরে পাবেন DeviceInfoএবং উচিত সাধারণ হিসাবে যোগাযোগ করা হবে না "প্রতিক্রিয়া হিসাবে এখানে আপনি যা চেয়েছিলেন তা এখানে।"


দুর্ভাগ্যক্রমে আমিও এই এপিআইয়ের একজন ক্লায়েন্ট এবং এটি পরিবর্তন করতে পারি না। এটি কীভাবে কাজ করা উচিত তার একটি দুর্দান্ত সারাংশ ।
জেলটন

0

404 থেকে পাওয়া যায় না পার্থক্য জানতে আপনি 422 অপ্রসারণযোগ্য সত্তা ত্রুটি ব্যবহার করতে পারেন । 422 এর অর্থ সার্ভারটি অনুরোধটি বুঝতে পারে তবে এটি সঠিক প্রতিক্রিয়া দিতে পারে না। আমি একই পরিস্থিতিতে এই কোডটি ব্যবহার করছি।


4
এই নিবন্ধটি আরও বিশদে 422 ব্যবহার করে বর্ণনা করে। আমি মনে করি না এই ত্রুটি কোডটি এখানে সত্যিই প্রযোজ্য।
রবার্ট হার্ভে

ধন্যবাদ, খুব দরকারী! আমি এই বিষয় আরও গভীর করতে হবে!
ফিনিক্স

0

ত্রুটি 500 সাধারণত নির্দেশ করে যে অনুরোধটি একটি সার্ভার সাইড প্রোগ্রাম ক্র্যাশ করেছে; এন্টারপ্রাইজ পরিবেশে এই ত্রুটিগুলি মুখে একটি ডিম হিসাবে ধরা হয় এবং এড়ানো হচ্ছে are

ত্রুটি 4xx এর প্রোগ্রামারকে সিগন্যাল দেওয়া উচিত যে API এর শেষ পয়েন্ট (সংস্থান) উপস্থিত নেই। ফলস্বরূপ, একবার উপযুক্ত সমাপ্তি পৌঁছে গেলে, সেই বিন্দু থেকে যে কোনও ত্রুটি পরিচালনা করা হ'ল এপিআই-র প্রোগ্রামার দায়িত্ব যা নিখুঁতভাবে পরিচালনা করা উচিত, অর্থাৎ 200 টির প্রতিক্রিয়াটির একটি ত্রুটি বার্তা সহ।


1
সুতরাং আপনি বলছেন "500 ব্যবহার করবেন না কারণ আপনি সার্ভার ক্র্যাশ করছেন না?"
রবার্ট হার্ভে

0

যদিও ডাব্লু 3 নোট করে যে 404 ব্যবহৃত হয় যখন অন্য কোনও প্রতিক্রিয়া প্রযোজ্য হয় না, তবে এটি কি 204 (কোনও সামগ্রী নয়) প্রতিক্রিয়াটির জন্য ভাল? অনুরোধটি একটি প্রক্রিয়াকরণ অবস্থান থেকে বৈধ ছিল এবং সার্ভারটি অনুরোধটি প্রক্রিয়া করেছিল এবং এর ফলস্বরূপ। এটি একটি সাফল্য, যা 2XX প্রতিক্রিয়াগুলির দিকে ঝুঁকছে। এই নির্দিষ্ট অনুরোধের জন্য কোনও বিষয়বস্তু ছিল না তাই 204 ব্যবহারকারীকে বলে যে তাদের প্রশ্নের সাথে কোনও ভুল ছিল না তবে সেখানে কিছুই নেই।

আপনি একটি দুর্বল কেসও করতে পারেন যে 409 (সংঘাত) একটি উপযুক্ত প্রতিক্রিয়া। যদিও 409 প্রায়শই পোষ্টের জন্য ব্যবহৃত হয় তবে এটি বলে

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

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


3
না, একটি অনুরোধে 204 এর প্রতিক্রিয়া কেবল তখনই বোধগম্য হবে যখন অনুরোধ করা সংস্থানটি পাওয়া যায়, এবং এর উপস্থাপনা হুবুহু অক্ষরের দীর্ঘ।
বিডিএসএল

0

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


-4

আপনি যদি বইটি যেতে চান তবে অন্যান্য ব্যবহারকারীরা কী করতে হবে তার বৈধ উত্তর সরবরাহ করেছেন।

তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি বিশ্রামের বিষয়ে খুব বেশি পড়ছেন এবং এর প্রতি সম্মানের সাথে একেবারে কোশার হচ্ছেন।

আরআরইএসটি একটি কৌতুকপূর্ণ প্রোটোকল, কারণ আপনি যদি বইটি ব্যবহার করার সময় যেতে চান তবে এটি ক্লায়েন্ট এবং সার্ভার উভয়ইই তৈরি করতে বাধ্য করে যে তারা আরইএসটি-র মাধ্যমে যোগাযোগ করছে এই বিষয়ে নির্দিষ্ট জ্ঞান রাখে, সুতরাং সংক্ষেপে নির্দিষ্ট যোগাযোগ প্রোটোকল হচ্ছে ব্যবহৃত বিমূর্ত করা যাবে না।

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

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

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


নিম্নবিত্তদের বিচার করে আমার ধারণা আমি অবশ্যই কিছু লোকের অনুভূতিতে আঘাত পেয়েছি। অথবা তাদের দেহের অন্য কোনও অংশ হতে পারে। সি -: =
মাইক নকিস

তাদের সত্যই এটি পড়তে হবে: ব্লগস.ড্রপবক্স
মাইক নাকিস

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

@ সিএইচওও, আমি সেই অংশটি ধরে নিয়েছি যা বলছে যে "ড্রপবক্স বর্তমানে প্রায় 10 টি বিভিন্ন স্ট্যাটাস কোড ব্যবহার করে (সাফল্যের জন্য 8 টি ত্রুটি এবং 2), তবে আমরা এআইপিআইয়ের ভবিষ্যতের সংস্করণে এই সংখ্যাটি হ্রাস করার পরিকল্পনা করছি" এর কোনও অর্থ হয় নি আপনি.
মাইক নাকিস

আপনি এটি থেকে কী পাচ্ছেন তা বোঝানো হয়নি। যদি তারা জানে যে তারা কী করছে, তবে চূড়ান্তভাবে তারা এটিকে একটি সাফল্য এবং চারটি ত্রুটি কোড (400, 401, 404 এবং 500) এ নামিয়ে আনবে, কারণ তারা স্পষ্টতই সম্মেলনের বিষয়ে যত্নশীল।
সিএইচও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.