কোনও API এ HTTP স্থিতি কোড 404 কখন ব্যবহার করবেন


58

আমি একটি প্রকল্পে কাজ করছি এবং প্রায় এক ঘন্টারও বেশি সময় কাজের লোকের সাথে তর্ক করার পরে। আমি স্থির করেছিলাম যে স্ট্যাক-এক্সচেঞ্জের লোকেরা কী বলতে পারে।

আমরা একটি সিস্টেমের জন্য একটি এপিআই লিখছি, এমন একটি ক্যোয়ারী রয়েছে যা সংস্থার একটি গাছ বা লক্ষ্যের একটি বৃক্ষকে ফিরিয়ে আনতে হবে।

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

আমি শিখা এবং ক্ষোভ রক্ষা করার চেষ্টা করব।

যখন গাছ নেই তখন আমি 404 ত্রুটি বাড়ানোর পরামর্শ দিয়েছি। এটি অন্তত আমাকে জানাতে হবে যে কিছু ভুল আছে। 200 ব্যবহার করার সময়, ত্রুটিগুলি পরিচালনা করতে আমাকে সাফল্যের কলব্যাকে আমার প্রতিক্রিয়ায় একটি বিশেষ চেক যোগ করতে হবে। আমি কোনও জিনিস পাওয়ার প্রত্যাশা করছি, তবে কিছুই পাওয়া যায়নি বলে আমি আসলে একটি খালি প্রতিক্রিয়া পেতে পারি। প্রতিক্রিয়াটিকে 404 হিসাবে চিহ্নিত করা সম্পূর্ণ ন্যায্য বলে মনে হয় And সুতরাং আমি এখানে আছি এবং জিজ্ঞাসা করছি 404 এই ক্ষেত্রে ভুল কি? এমনকি "এটি কিছুই খুঁজে পায় নি, তাই 200 ফিরিয়ে দেওয়া ঠিক হবে " যুক্তিটিও পেয়েছিলাম । আমি বিশ্বাস করি যে গাছটি সর্বদা উপস্থিত থাকা উচিত কারণ এটি ভুল। যদি আমরা কিছু না পেয়ে এবং আমরা কিছু প্রত্যাশা করি তবে এটি 404 হওয়া উচিত।

অধিক তথ্য,

আমি প্রাপ্ত url গুলো যুক্ত করতে ভুলে গেছি।

সংগঠন

/OrgTree/Get

গোল

/GoalTree/GetByDate?versionDate=...
/GoalTree/GetById?versionId=...

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

অতিরিক্ত

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

এছাড়াও আমি এটি সংযুক্ত হয়েছি (অনুরূপ একটি তবে এটি আমি খুঁজে পাচ্ছি না)

http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png


দয়া করে পরিষ্কার করুন: পূর্বশর্তে যদি সবসময় গাছ থাকে তবে কীভাবে অ্যাপ্লিকেশনটি ভেঙে যেতে পারে ? (আমি আপনার সাথে এটি এক 404 এর মতো বলে মনে করি)
এন্ড্রেস এফ।

ঠিক আছে কোডটি শূন্যের জন্য যাচাই করছিল না, এবং একটি জসন স্ট্রিং এবং একটি অবজেক্ট হিসাবে পার্স করছিল। কোডের কোনও স্থানে, "যে" লোড করা বস্তুটি উপস্থিত নেই কারণ এটি অভ্যন্তরীণভাবে খুঁজে পাওয়া যায় না।
Loïc Faure-Lacroix

4
আপনি যে সংস্থানটি অ্যাক্সেস করার চেষ্টা করছেন তার জন্য ইউআরআই দিলে এটি আরও পরিষ্কার হবে। যদি এটি / লক্ষ্যগুলি হয় / আপনি 200 এবং খালি সেটটি ফিরিয়ে দেন। আপনি যদি / লক্ষ্যগুলি / {গোল_আইডি access অ্যাক্সেস করার চেষ্টা করছেন তবে আপনি 404 ফেরৎ দিন you
imel96

1
এখনও উভয় ক্ষেত্রেই প্রশ্ন রয়েছে holds কি /GoalTree/GetById?versionId=CompletelyInvalidIDফিরতে হবে? সাফল্য নয়, নামযুক্ত সংস্থানটি /GoalTree/GetById?versionId=CompletelyInvalidIDআক্ষরিকভাবে পাওয়া যায় নি।

2
দুর্দান্ত, এখন আলোচনাটি আপনার কাজ থেকে ইন্টারনেটগুলিতে সরে গেছে! এটা এখন অচল!
কার্লোস ক্যাম্পাদ্রেস

উত্তর:


79

সন্দেহ হলে ডকুমেন্টেশনের পরামর্শ নিন । HTTP স্থিতি কোডগুলির জন্য ডাব্লু 3 সি সংজ্ঞা পর্যালোচনা করা আমাদের এটিকে দেয়:

200 ঠিক আছে - অনুরোধটি সফল হয়েছে। প্রতিক্রিয়া সহ ফিরিয়ে দেওয়া তথ্যটি অনুরোধে ব্যবহৃত পদ্ধতির উপর নির্ভরশীল।

404 পাওয়া যায় নি - সার্ভারটি অনুরোধ-ইউআরআইয়ের সাথে মিলে এমন কিছু খুঁজে পায়নি।

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

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

সুতরাং এই ক্ষেত্রে আপনি সঠিক , পরিষেবাটি "একটি নির্দিষ্ট জিনিস" অনুসন্ধান করছে না এটি এটি একটি নির্দিষ্ট জিনিসের জন্য অনুরোধ করছে , যদি সেই জিনিসটি পাওয়া না যায় তবে এটি পরিষ্কারভাবে বলুন।

আমি মনে করি উইকিপিডিয়া এটি সবচেয়ে ভাল রাখে:

200 ঠিক আছে - ... প্রকৃত প্রতিক্রিয়া ব্যবহৃত অনুরোধ পদ্ধতির উপর নির্ভর করবে। একটি জিইটি অনুরোধে, প্রতিক্রিয়াটিতে অনুরোধ করা সংস্থার সাথে সম্পর্কিত একটি সত্তা থাকবে।

404 পাওয়া যায় নি - অনুরোধ করা সংস্থানটি পাওয়া যায়নি তবে ভবিষ্যতে আবার উপলভ্য হতে পারে। ক্লায়েন্ট কর্তৃক পরবর্তী অনুরোধগুলি অনুমোদিত।

আমার কাছে বেশ পরিষ্কার মনে হচ্ছে।

উদাহরণ অনুরোধ সম্পর্কিত

/GoalTree/GetByDate?versionDate=...
/GoalTree/GetById?versionId=...

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

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

স্থিতি কোড নির্বাচন করার বিষয়ে

  • 2XX কোডগুলি একজন সংযুক্ত আরবিকাকে বলুন যে এটি সঠিক কাজ করেছে , অনুরোধটি কাজ করেছিল। এটি ভবিষ্যতে এটি চালিয়ে যেতে পারে।
  • 3xx কোড একটি সংযুক্ত আরব আমিরাতকে বলুন আপনি যা চেয়েছিলেন সম্ভবত কাজ করত, তবে জিনিসটি এখন অন্য কোথাও। ভবিষ্যতে সংযুক্ত আরব আমিরাত কেবল পুনর্নির্দেশে যাওয়ার কথা বিবেচনা করতে পারে ।
  • 4XX কোড একটি সংযুক্ত আরব আমিরাতকে বলুন যে এটি কিছু ভুল করেছে , এটি তৈরি করা অনুরোধটি যথাযথ নয় এবং কমপক্ষে কিছু পরিবর্তন না করে আবার চেষ্টা করা উচিত নয়।
  • 5xx কোড একটি সংযুক্ত আরবিকালাকে বলুন সার্ভারটি কোনওভাবে ভেঙে গেছে । তবে ওহে এই ক্যোয়ারী ভবিষ্যতে কাজ করতে পারে, সুতরাং আবার চেষ্টা না করার কোনও কারণ নেই। (501 বাদে যা 400 ইস্যুতে বেশি)।

আপনি একটি 5XX কোড ব্যবহার করে একটি মন্তব্যে উল্লেখ করেছেন, তবে আপনার সিস্টেমটি কাজ করছে। এটি একটি ক্যোয়ারী জিজ্ঞাসা করা হয়েছিল যা কাজ করে না এবং এটি সংযুক্ত আরব আমিরাতে যোগাযোগ করা দরকার। আপনি এটি কীভাবে টুকরো টুকরো করেন না কেন, এটি 4XX অঞ্চল।

আমাদের সৌরজগতকে জিজ্ঞাসা করা এলিয়েনের কথা বিবেচনা করুন

এলিয়েন: কম্পিউটার, দয়া করে আমাকে সমস্ত গ্রহ বলুন যে মানুষের বাস।

কম্পিউটার: 1 ফলাফল পাওয়া গেছে। পৃথিবী

এলিয়েন: কম্পিউটার, দয়া করে আমাকে পৃথিবী সম্পর্কে বলুন ।

কম্পিউটার: আর্থ - বেশিরভাগ ক্ষতিগ্রস্থ।

এলিয়েন: কম্পিউটার, গ্রহাণু বেল্টের বাইরে মানুষের বাস করা সমস্ত গ্রহের সম্পর্কে দয়া করে আমাকে বলুন।

কম্পিউটার: 0 ফলাফল পাওয়া গেছে।

এলিয়েন: কম্পিউটার, দয়া করে পৃথিবী ধ্বংস করুন।

কম্পিউটার: 200 ঠিক আছে।

এলিয়েন: কম্পিউটার, দয়া করে আমাকে পৃথিবী সম্পর্কে বলুন ।

কম্পিউটার: 404 - পাওয়া যায় নি

এলিয়েন: কম্পিউটার, দয়া করে আমাকে সমস্ত গ্রহ বলুন যে মানুষের বাস।

কম্পিউটার: 0 ফলাফল পাওয়া গেছে।

এলিয়েন: শক্তিশালী ইরকান সাম্রাজ্যের বিজয়!


4
+1 এটি এমন কোনও কোয়েরি নয় যা কোনও ফলাফল দেয় না। এটি একটি পরিচিত ওয়েবপৃষ্ঠার জন্য ব্রাউজারকে জিজ্ঞাসা করা এবং এটি সন্ধান করার মতো নয়। ঠিক 404 এর জন্য রয়েছে।
আন্দ্রেস এফ।

2
@ imel96 আপনি ভুলে গেছেন যে ক্যোয়ারী স্ট্রিংটি URL এর অংশ।
Loïc Faure-Lacroix

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

1
@ লেগোস্টোরমাট্রোপ্র একটি ডাটাবেস টেবিলটি কল্পনা করুন। আপনি টেবিলটি জিজ্ঞাসা করেছেন, কখনও কখনও আপনি ফলাফল পান, কখনও কখনও আপনি না। সারণিটি আপনার সংস্থান, এটি সারিগুলি ফিরিয়ে দেয় কি না তা সর্বদা সেখানে থাকে। সারণীটি শনাক্তযোগ্য, এটির নামটি রয়েছে (যেমন HTTP সংস্থাগুলিতে ইউআরআই রয়েছে)। সারিগুলি নয়, তারা কেবল কিছু পরামিতিগুলির সাথে মেলে। এমনকি ডাটাবেসে, আপনি যদি এমন কোনও আপডেট করেন যা কিছু মিলছে না, আপনি "ঠিক আছে 0 টি সারি" প্রভাবিত হবে affected
imel96

2
আপনার কাছে ইতিমধ্যে উত্তরটি আছে লেগোস্টোরমট্রোপ্র। যদি তারা / GoalTree / GetById? সংস্করণআইড = এক্স পুনরায় তৈরি করতে চান, তবে এটি 301 এর সাথে অবস্থানের শিরোনামটি / GoLTree / Id / x এ সেট করা উচিত।
imel96

11

/ GoTree / get * একটি ক্রিয়া হিসাবে দেখা যায় এমন সম্পদ নয়, এই বিষয়টি উপেক্ষা করে আপনার সর্বদা 200 ফিরিয়ে দেওয়া উচিত কারণ ইউআরআই / গোলটি / গেট * অ্যাক্সেসের জন্য সর্বদা উপলভ্য যে সংস্থানগুলি উপস্থাপন করে এবং ফলস্বরূপ কোনও গাছ না থাকলে এটি ক্লায়েন্ট ত্রুটি নয় একটি অনুরোধ. খালি সেট দিয়ে 200 ফিরিয়ে দিন যখন কোনও সত্তা ফেরত আসবে না।

আপনি 404 ব্যবহার করুন যদি সংস্থানটি পাওয়া যায় না, যখন কোনও সত্তা নেই।

এটিকে অন্য কোনও উপায়ে রাখুন, আপনি যদি নিজের বস্তুর জন্য 404 ফিরিয়ে দিতে চান তবে তাদের তাদের নিজস্ব ইউআরআই দিন।


1
হুম। এইবার বুঝতে পারছি. 404 ব্যবহারকারীর ত্রুটি, তবে ওপি যেমন ব্যাখ্যা করে, এটি আসলে একটি সিস্টেম ত্রুটি; ব্যবহারকারীর অনুরোধটি পুরোপুরি বৈধ! আমি অসম্মতি জানাচ্ছি 200 যদিও সঠিক প্রতিক্রিয়া, কারণ "কোনও গাছ" একটি ত্রুটি
আন্দ্রেস এফ।

@ আইমেল ৯6 আমি খালি / স্থিতি কোড 4xx / 5xx এর পরিবর্তে বৈধ সত্তা সর্বদা ফিরতে চাইতাম। যদি এটি কেবল আমার হয় তবে আমি যেমন একটি উইকি যেমন উদাহরণস্বরূপ বৈধ সত্তা ফিরিয়ে আনতাম। কম মাথাব্যথা ত্রুটিগুলি হ্যান্ডেল করার প্রয়োজন নেই। যেমনটি হ'ল, আমি বলব যে এটি প্রায় 500 এর মতো। সিস্টেমটি একটি পূর্বনির্ধারিত অবস্থায় রয়েছে, এটি হওয়া উচিত নয়। এবং ঠিক আছে ফেরার অর্থ হয় না। আরএফসি সম্পর্কিত 404 অর্থবোধ করে না। সুতরাং যখন কিছুই বোঝায় না ... কেবল 500 বুদ্ধিমান!
Loïc Faure-Lacroix

@ সিবিয়াম ভাল, আপনি HTTP স্থিতি কোড চেয়েছিলেন যা খুব ভালভাবে সংজ্ঞায়িত is এই ক্ষেত্রে, এমনকি যদি আপনার ব্যবসায়িক যুক্তিটি এটি একটি ত্রুটি বলে তবুও এর অর্থ এই নয় যে HTTP সার্ভার হিসাবে সিস্টেমের একটি ত্রুটি রয়েছে। আপনার ক্ষেত্রে, এটি আপনার অনুরোধটি বুঝতে পেরেছিল, এটি আপনার ক্যোয়ারীটি প্রক্রিয়া করেছে এবং এটি কেবল ঘটেছে যে ফলাফলটি কোনও সত্তা নয়। সুতরাং আপনি 500 টিও ব্যবহার করতে পারবেন না least কমপক্ষে আপনার বস্তুগুলিকে যথাযথ ইউআরআই দেওয়ার বিষয়ে বিবেচনা করুন এবং দেখুন যে আরএফসি আরও বোধ করে কিনা।
imel96

+1 যদি আপনার কাছে একটি REST এপিআই থাকে (প্রতিটি সত্তার নিজস্ব পাথ থাকে) তবে আপনি একটি 404 ফেরত দিতে পারেন তবে আপনার পথগুলি ক্রিয়াপদ এবং সর্বদা পাওয়া যাবে।
মনিকা মনিকে থামানো বন্ধ করুন

@OrangeDog: /GoalTree/GetById?versionId=12345 হয় একটি পুরোপুরি ভালো কোনো URI (অবশ্য একটি আপেক্ষিক এক, অন্তত) যা কোনও নির্দিষ্ট রিসোর্সে, যথা তথ্য সংস্করণ আইডি সংশ্লিষ্ট চিহ্নিত 12345সিস্টেমের মধ্যে। যদি এই জাতীয় আইডি সহ কোনও ডেটা উপস্থিত না থাকে তবে একটি 404 এইচটিটিপি প্রতিক্রিয়া পুরোপুরি উপযুক্ত। অবশ্যই, প্রতিক্রিয়া সংস্থার, যে কোনও ক্ষেত্রে, যথাযথ বিন্যাসযুক্ত প্রতিক্রিয়া থাকা উচিত (যেমন জেএসওএন, যদি এই জাতীয় সংস্থাগুলি অনুরোধ করে এমন সাধারণ ক্লায়েন্টরা ত্রুটিটির নির্দিষ্ট প্রকৃতি এবং কারণ নির্দেশ করে)।
ইলমারি করোনেন

7

এটি একটি আকর্ষণীয় প্রশ্ন, কারণ এটি সমস্ত সিস্টেমের স্পেসিফিকেশন সম্পর্কে।

আইমেল ৯6 এর প্রতিক্রিয়া আমাকে নিশ্চিত করেছে যে একটি ৪০৪ যথাযথ প্রতিক্রিয়া হতে পারে না, যেহেতু কোডগুলির 4xx পরিবারটি মূলত ব্যবহারকারী / ক্লায়েন্ট ত্রুটির জন্য , এবং এটি একটি নয়। ইউআরএলটি সুগঠিত এবং গাছ অবশ্যই সেখানে থাকবে; যদি তা না হয় তবে সিস্টেমটি বেমানান অবস্থায় রয়েছে!

সুতরাং এটি একটি সার্ভার ত্রুটি, অর্থাত্ 5XX পরিবারে কিছু। সম্ভবত একটি জেনেরিক 500 অভ্যন্তরীণ সার্ভার ত্রুটি বা একটি 503 পরিষেবা অনুপলব্ধ (পরিষেবাটি "আমাকে অবশ্যই সেখানে থাকা গাছটি আনবে")।


2
সত্য নয়, ব্যবহারকারীর ত্রুটি রয়েছে কারণ তারা এমন কিছু চেয়েছিলেন যা বিদ্যমান নেই

@ লেগোস্টোরমট্রোপ্র এমন কিছুর জন্য জিজ্ঞাসা করুন যা অস্তিত্বহীন নয় always আপনি যদি কোনও নেটওয়ার্ক সংস্থান জিজ্ঞাসা করেন, এবং নেটওয়ার্কটি নিচে রয়েছে, তবে এটি একটি নেটওয়ার্ক ত্রুটি।
আন্দ্রেস এফ।

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

2
@ সাইবিয়াম আপনি যদি 5XX কোডের পথে যেতে চান তবে 503 হয় "503 পরিষেবা অনুপলব্ধ - সার্ভারের অস্থায়ী ওভারলোডিং বা রক্ষণাবেক্ষণের কারণে সার্ভারটি বর্তমানে অনুরোধটি পরিচালনা করতে অক্ষম।" আপনার সার্ভারটি ওভারলোড হয়নি, এটি একটি অনুরোধ খুঁজে পাচ্ছে না। অতিরিক্তভাবে, 5XX কোডগুলি যখন তখন "সার্ভারটি জানতে পারে যে এটি ভুল হয়েছে বা অনুরোধটি সম্পাদন করতে অক্ষম"

1
@AndresF। সত্যি কথা বলতে, একটি 500 কোড সম্ভবত ঠিক আছে। সময়ের সাথে সাথে প্রশ্নটি কীভাবে পরিবর্তিত হয়েছে তা দেওয়া কার্যকর হবে। বেশিরভাগ ক্ষেত্রে, আমি যদি 200 ঠিকঠাক না করি তবে সব কিছু ঠিকঠাক না করেই ফিরে আসছি।

6

আমি বলব যে পরিস্থিতিটি আপনি কীভাবে দেখছেন তার উপর নির্ভর করে 200 বা 404 টি প্রতিক্রিয়া কোডটি বৈধ হতে পারে

জিনিসটি হ'ল এইচটিটিপি প্রতিক্রিয়া কোডগুলি একটি সার্ভারের প্রসঙ্গে সংজ্ঞায়িত করা হয় , যা তাদের URL এর ভিত্তিতে বিভিন্ন সংস্থান সরবরাহ করতে পারে । এই প্রসঙ্গে, এর অর্থ 200 OKএবং 404 Not Foundপুরোপুরি দ্ব্যর্থহীন: প্রাক্তন বলেছেন "আপনি এখানে যে সংস্থানটি চেয়েছিলেন তা এখানেই", যদিও পরেরটি বলে "দুঃখিত, আমার মতো কোনও সংস্থান নেই"।

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

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

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

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

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

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


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

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

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

এছাড়াও, অবশ্যই, যদি আবেদন সত্যিই বিশ্বাস করেন যে অনুরোধ subresource উচিত সেখানে, কিন্তু এটা খুঁজে পাচ্ছি না, তারপর তৃতীয় সম্ভব প্রতিক্রিয়া কোড বিদ্যমান: 500 Internal Server Error। এই জাতীয় প্রতিক্রিয়াটি অর্থবোধ করে যে যদি উত্সটির অস্তিত্ব অ্যাপ্লিকেশনটির জন্য অনুমান করা পূর্বশর্ত, যেমন এর অনুপস্থিতি অগত্যা অভ্যন্তরীণ ত্রুটি নির্দেশ করে।

শেষ অবধি, আপনার সর্বদা পোষ্টেলের আইন মনে রাখা উচিত :

" আপনি যা প্রেরণ করেন তাতে রক্ষণশীল এবং আপনি যা পান তাতে উদার হন " "

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


দ্বিধাবোধ ভালভাবে ব্যাখ্যা করেছেন।
মার্সেল

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

@ আইমেল ৯6: আমি মনে করি আপনি আরএফসি 1630 এর ভুল ব্যাখ্যা করছেন: আপনার পূর্ববর্তী মন্তব্যে আপনি যে অনুচ্ছেদটি উদ্ধৃত করেছেন তা পুরোপুরি পড়ছে: "প্রশ্ন চিহ্ন ("? ", এএসসিআইআই 3 এফ হেক্স) একটি জিজ্ঞাসাবাদের ইউআরআইয়ের মধ্যে সীমানাটি সীমান্তে ব্যবহার করতে ব্যবহৃত হয়? অবজেক্ট এবং শব্দের সংকলন object বস্তুর উপর কোনও প্রশ্ন প্রকাশ করার জন্য ব্যবহৃত হয় this যখন এই ফর্মটি ব্যবহার করা হয়, তখন সম্মিলিত ইউআরআই সেই অবজেক্টটির জন্য দাঁড়ায় যা কোয়েরি থেকে ফলাফলটি মূল অবজেক্টে প্রয়োগ করা হয় "" (জোর দেওয়া খনি)। সুতরাং, এটা পরিষ্কার যে কোয়েরি স্ট্রিং প্রকৃতপক্ষে কোনো URI অংশ (যদিও কোয়েরি স্ট্রিং এর আগের অংশ, অগত্যা হয় এছাড়াও ... একটি বৈধ নিজে কোনো URI)
Ilmari Karonen

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

@ ইলমারি কারোনেন আপনি ঠিক বলেছেন আমি এইচটিটিপিকে আরইএসটি দিয়ে বিভ্রান্ত করেছি। তবুও সঠিক বলে মনে হচ্ছে না কারণ আপনি / ইউটিআর এর মতো / গোলট্রি / গেট? সংস্করণটির তারিখ = 2000 বিবিসি
imel96

3

204 কোন বিষয়বস্তু সম্পর্কে কীভাবে? এটি প্রস্তাব করবে যে আপনার অনুরোধটি সফলভাবে প্রক্রিয়া করা হয়েছিল তবে কিছুই প্রত্যাবর্তন করছে না। এটি এখনও একটি "সাফল্য" তবে একা আপনি স্থিতি কোডের ভিত্তিতে ফলাফল পেয়েছেন কিনা তা আপনাকে দেখতে দেয়।


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

3

URL টি যদি এমন কোনও উত্স প্রতিনিধিত্ব করে যা কখনই অস্তিত্বহীন থাকে 404 পাওয়া যায়নি

URL টি যদি এমন কোনও উত্স প্রতিনিধিত্ব করে যা খালি তালিকা থাকে তবে একটি খালি তালিকা এবং 200 ঠিক আছে return

উদাহরণ:

{
  total: 0,
  items: []
}

URL টি যদি এমন কোনও উত্স প্রতিনিধিত্ব করে যা বিদ্যমান ছিল তবে 410 ফিরে আসবে।

লেগো স্টর্মট্রোপারের সংলাপ সম্পর্কিত:

Alien: Computer, please tell me all planets that humans inhabit. GET /planets?inhabitedBy=humans

Computer: 200 OK. { total: 1, items:[{name:'Earth'}] }

Alien: Computer, please tell me about Earth. GET /planets/earth

Computer: 200 OK. {name:'Earth', status: 'Mostly Harmless'}

Alien: Computer, please tell me about all planets humans inhabit, outside the asteroid belt. GET /planets?inhabitedBy=humans&distanceFromSun=lots

Computer: 200 OK. {total:0, items:[] }

Alien: Computer, please destroy Earth. DELETE /planets/earth

Computer: 204 No Content. (or 202 Accepted if it takes some time to destroy Earth)

Alien: Computer, please tell me about Earth. GET /planets/earth

Computer: 410 Gone

Alien: Computer, please tell me all planets that humans inhabit. GET /planets?inhabitedBy=humans

Computer: 200 OK 0 {total: 0, items:[] }

Alien: Victory for the mighty Irken Empire!

1

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

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

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

  • 200 - সবকিছু ভাল
  • 404 - ভুল url
  • 409 - কিছু ভুল হয়েছে
  • 500 - সার্ভারে একটি অপ্রত্যাশিত ত্রুটি ঘটেছে

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

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

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

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


0

এতে একটি স্পর্শকাতর ছুরিকাঘাত করা: যদি কোনও মানুষ শেষ পর্যন্ত এপিআই ব্যবহার করে থাকে (জিইউআইয়ের মাধ্যমে) আমি শেষ ব্যবহারকারীর পক্ষে জীবনকে সহজ করে তোলে যা কিছু করার পরামর্শ দিচ্ছি। গাছের অস্তিত্ব যখন থাকা উচিত তখন এটি একটি "ডোমেন মডেলের অসঙ্গতি" ত্রুটি। সিস্টেমের ত্রুটি তখন হয় যখন আপনি মেমরি থেকে দূরে চলে যান বা অন্য কোনও সিস্টেমিক ব্যর্থতা ছিল। সুতরাং 5xx ফিরিয়ে দেওয়া অনুচিত। উপরে বেশ কয়েকটি লোক দ্বারা উল্লিখিত হিসাবে, গাছের নিজস্ব ইউআরআই থাকলে 4xx যথাযথ হতে পারে, যা এখানে ঘটনা নয়। তবে 404 ক্লায়েন্টকে যা বলেছে তা এখানে: আপনি কিছু ফিরে না পাওয়া পর্যন্ত আপনি বারবার চেষ্টা করতে পারেন। আপনি যদি 200 ফিরিয়ে দেন তবে আপনি ব্যবহারকারী বা ব্যবহারকারী এজেন্টের কাছে পর্যাপ্ত ডায়াগনস্টিকগুলি ফিরিয়ে দিতে পারেন যাতে ব্যবহারকারী এজেন্ট একটি মেয়াজ প্রদর্শন করতে পারে যাতে ব্যবহারকারী পুনরায় চেষ্টা করা বন্ধ করে দেয় এবং কেবল যোগাযোগ সমর্থন করে। অন্যদিকে যদি এই এপিআইটি কেবলমাত্র সিস্টেমগুলির জন্যই হয়,


সমস্ত 404 সত্যই বলেছে যে "জিনিসটি এখানে নেই এবং আমি জানি না এটি কোথায়"। 3xx এবং 5xx আবার চেষ্টা করার জন্য ঠিক আছে। তবে 4XX বলছে, "আপনার জন্য বর্তমান অ্যান্টিহিং সন্ধান করার জন্য আপনার বর্তমান ক্যোয়ারী অপর্যাপ্ত ছিল Please দয়া করে চলে যান" "

আমি ইউআরএল নট ফাউন্ড এবং রিসোর্স নট ফাউন্ডের মধ্যে পার্থক্য করার সম্ভাবনাটি পছন্দ করি ... সুতরাং সার্ভিস এন্ডপয়েন্টটি 200 টি চলমান রয়েছে, তবে অনুরোধ করা সংস্থান 404 (রেসপন্স বডি) নয়।
লেবুনেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.