খালি টেবিলের জন্য যথাযথ REST প্রতিক্রিয়া?


106

ধরা যাক আপনি ফোন GETকরে ব্যবহারকারীদের তালিকা পেতে চান api/usersতবে বর্তমানে টেবিলটি কেটে দেওয়া হয়েছে যাতে কোনও ব্যবহারকারী নেই। এই দৃশ্যের জন্য উপযুক্ত প্রতিক্রিয়া কী: 404বা 204?


19
আমি 200 এবং একটি খালি সংগ্রহের সাথে প্রতিক্রিয়া
জানাব

4
404 এই প্রসঙ্গে সম্ভবত 'টেবিল পাওয়া যায়নি' এর জন্য আরও ভাল উপযোগী হবে। আমি বলব একটি খালি তালিকা ফিরিয়ে দিন।
মাতা


2
@ ইজুশুয়াস এটি না উভয় প্রশ্ন আমার এবং খুব পুরানো। তারা অনুরূপ তবে সদৃশ নয়।
আইএমবি

1
@ EJoshuaS এগুলি স্পষ্টতই সদৃশ নয়। এই প্রশ্নটি /api/usersযখন একটি সম্পর্কে হয় /api/users/1
ফ্রাঙ্কলিন ইউ

উত্তর:


231

আমি বলব, না।

404 (পাওয়া যায় না) কেন?

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

204 (কোনও সামগ্রী নেই) কেন?

ডাব্লু 3 সি দ্বারা 204 স্থিতি কোডের বর্ণনা থেকে একটি অংশ এখানে দেওয়া হয়েছে

সার্ভারটি অনুরোধটি পূরণ করেছে তবে কোনও সত্তা-দেহ ফেরত দেওয়ার দরকার নেই এবং সম্ভবত আপডেট মেন্টেরফর্মেশনটি ফিরে আসতে চাইবে।

যদিও এই ক্ষেত্রে এটি যুক্তিসঙ্গত মনে হতে পারে তবে আমি মনে করি এটি ক্লায়েন্টদের বিভ্রান্ত করবে। একটি 204ইঙ্গিত যে কিছু অপারেশন সফলভাবে মৃত্যুদন্ড দেয়া হয়েছে অনুমিত হয় এবং কোনো ডেটা করা প্রয়োজন। এটি কোনও DELETEঅনুরোধের প্রতিক্রিয়া হিসাবে বা সম্ভবত এমন কোনও স্ক্রিপ্ট ফায়ারিংয়ের জন্য উপযুক্ত যা ডেটা ফেরত দেওয়ার প্রয়োজন হয় না। এর ক্ষেত্রে api/users, আপনি সাধারণত আপনার ব্যবহারকারীদের সংগ্রহের উপস্থাপনা প্রত্যাশা করতে পারেন। প্রতিক্রিয়া বৌকে একবার পাঠানো এবং অন্য সময় এটি না পাঠানো অসঙ্গতিপূর্ণ এবং সম্ভাব্য বিভ্রান্তিকর।

আমি কেন 200 ব্যবহার করব (ঠিক আছে)

উপরে বর্ণিত কারণে (ধারাবাহিকতা), আমি খালি সংগ্রহের উপস্থাপনা ফিরিয়ে দেব। ধরে নেওয়া যাক আপনি এক্সএমএল ব্যবহার করছেন। ব্যবহারকারীদের খালি খালি সংগ্রহের জন্য একটি সাধারণ প্রতিক্রিয়া সংস্থার মতো দেখতে পাওয়া যেতে পারে:

<users>
  <user>
    <id>1</id>
    <name>Tom</name>
  </user>
  <user>
    <id>2</id>
    <name>IMB</name>
  </user>
</users>

এবং যদি তালিকাটি খালি থাকে তবে আপনি ঠিক এরকম কিছু দিয়ে প্রতিক্রিয়া জানাতে পারেন (এখনও একটি ব্যবহার করার সময় 200):

<users/>

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

আপনি JSON বা এইচটিএমএল বা আপনি যে কোনও ফর্ম্যাট ব্যবহার করছেন তা দিয়ে এটি করতে পারেন।


4
অবশ্যই রাজি। এবং বিশ্রাম জন্য, আমি কেবল ফিরে 200 একটি স্থিতি কোড একটি খালি অ্যারে পাঠানো হবে: []
চাদ জনসন

ইন্দ্রিয় তোলে। এটিকে আরও শক্ত করার দরকার নেই। 404 বিভ্রান্তিকর হবে।
উইটোল্ড কাকজুরবা

আপনার এপিআইকে ধরে নিতে দেয় যা আপনার পকেটে মুদ্রার বর্ণনা দেয়, শেষ পয়েন্ট সহ: GET /singleCoin- আপনার পকেট থেকে এলোমেলো একক মুদ্রা দেয়, GET /severalCoins- আপনার পকেট থেকে কিছু মুদ্রা ফেরত দেয় যা আপনি একবারে দখল করতে পারেন। বলুন এখন আপনার পকেটে কোনও কয়েন নেই। যখন আপনাকে জিজ্ঞাসা GET /singleCoinআপনি পাবেন 404 Not Found, কিন্তু আপনাকে জিজ্ঞাসা GET /severalCoinsআপনি পাবেন 200 OKখালি তালিকা সঙ্গে []। একটি সত্য - আপনার কোনও কয়েন নেই, বিভিন্ন প্রতিক্রিয়া সহ বর্ণিত, কেন? আমি বলি এটি পাওয়া সর্বদা ভাল 404 Not Found, কারণ আপনার পকেটে কোনও কয়েন পাওয়া যায় নি।
সেম্পশা

1
@ সেম্পশা এটি আপনার দ্বারা বোঝাতে চাইছেন তার উপর নির্ভর করে GET /severalCoins। যদি আপনি আদেশ দেন যে GET /severalCoins অবশ্যই কিছু মুদ্রা ফিরিয়ে দিতে হবে তবে এটি 200 হওয়া উচিত নয় কারণ এটি ঠিক নয়; সার্ভার ক্লায়েন্ট যা চায় তা দিতে ব্যর্থ হয়েছে। জন্য /singleCoinএই সুস্পষ্ট কারণ ক্লায়েন্ট ঠিক একটি মুদ্রা, কোন, কম কোন চাই। এই জন্য একই /coins/7/coinsশেষ পয়েন্টের বিপরীতে , সাধারণত ক্লায়েন্টরা কোনও মুদ্রা, একটি মুদ্রা বা একাধিক কয়েন আশা করে না। এগুলির সবই বৈধ প্রতিক্রিয়া। যদি কোনও মুদ্রা না থাকে, তবে তারা এটি চায়। এটি একটি emply মত List<Coin>পরিবর্তে, জাভা null
ফ্র্যাংকলিন ইউ

15

রানটাইমের পরিস্থিতির উপর নির্ভর করে আমি দুটি কোডের মধ্যে একটির উত্তর দেব:

404 পাওয়া যায়নি)

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

২০০ (ঠিক আছে)

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


10

আপনি যদি ব্যবহারকারী অবজেক্টের তালিকার প্রত্যাশা করে থাকেন তবে সেরা সমাধানটি 404 বা 204 টি প্রতিক্রিয়া ব্যবহারের চেয়ে 200 ওকে দিয়ে খালি তালিকা ([]) ফিরিয়ে দিচ্ছে।


2

অবশ্যই 200 ফেরত।

404 অর্থ সম্পদ পাওয়া যায় নি। তবে রিসোর্স রয়েছে। এবং এছাড়াও, যদি প্রতিক্রিয়ার 404 স্থিতি থাকে। আপনি কীভাবে জানতে পারবেন যে ব্যবহারকারীদের তালিকা খালি বা ভরাট?


  • '/ ব্যবহারকারী' খালি থাকলে '200' ফেরত দেওয়া উচিত।
  • '/ ব্যবহারকারী / 1' আইডি না পাওয়া গেলে। 404 ফিরে আসা উচিত।

2

খালি তালিকা সহ এটি অবশ্যই 200 ঠিক আছে

কেন: খালি টেবিলের অর্থ টেবিলটি বিদ্যমান তবে এর কোনও রেকর্ড নেই।

404 পাওয়া যায়নি মানে অনুরোধ করা শেষ পয়েন্টটি বিদ্যমান নেই।

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