Http মুছে ফেলা ব্যবহার করে একটি উত্স মোছা হচ্ছে


123

সুতরাং, প্রদত্ত যে HTTP- র মধ্যে DELETE ক্রিয়াটি আদর্শবান, যখন আমি নিম্নলিখিত অনুরোধটি প্রকাশ করি তখন দ্বিতীয় (বা তৃতীয়, বা চতুর্থ, ইত্যাদি ...) কী ঘটবে?

DELETE /person/123

প্রথমবার, রিসোর্সটি মোছা হয়েছে এবং আমি একটি 204 (সফল, কোনও সামগ্রী নেই) ফিরিয়ে দিচ্ছি। আমি কি পরবর্তী কলগুলিতে একটি 204 বা 404 (পাওয়া যায়নি) ফেরত দেব?

উত্তর:


153

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

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


4
ধন্যবাদ. এত যে জ্ঞান করে তোলে। আমি প্রকৃতপক্ষে একই প্রতিক্রিয়া ফিরিয়ে দেওয়ার মতো আদর্শের কথা ভাবছিলাম।
ক্রেগ উইলসন

4
@ ক্রেগ সাবধান! কুকবুকে, সাববু আমি যা বলেছিলাম তা সম্পূর্ণ বিপরীতে। তিনি বলেন, আদর্শবিত্তির অর্থ এটি একই প্রতিক্রিয়া ফিরিয়ে দেয়। ভাগ্যক্রমে, সাববু আরইএসটিস্টে থাকতে চলেছে, তাই আমি সেখানে তার সাথে স্পষ্ট করে বলতে চাই।
ড্যারেল মিলার

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

9
@ ড্যারেল মিলার এখানে মূল ধারণাটি অনুমান করি যে কোনও রিসোর্স রয়েছে কিনা তা যাচাই করার জন্য আপনার মোছা ব্যবহার করা উচিত নয়, আপনি প্রথমে এর জন্য জিইটি ব্যবহার করবেন। তারপরে, যদি প্রতিক্রিয়া 200 হয়, আপনি একটি মুছে ফেলুন; অন্যথায় এটি করতে বিরক্ত করবেন না। সুতরাং আমি মনে করি সর্বদা মোছার জন্য 204 ফিরিয়ে দেওয়া বুদ্ধিমান।
manei_cc

10
@ ব্রায়ান দি আরএফসি বলছে এটির মতো আচরণ করার কথা rmrmএটি উপস্থিত না থাকলে একটি ত্রুটি প্রদান করে। সরঞ্জাম.এইটিএফ.আর.এফ.এফ.এইচটিএম
ড্যাক্স ফোহাল

32

আরআরএসএফুল ওয়েব পরিষেবাদি কুকবুক এটির জন্য একটি দুর্দান্ত সংস্থান। সুযোগমতো, এর গুগল পূর্বরূপটি ডিলেট (পৃষ্ঠা 11) সম্পর্কে পৃষ্ঠাটি দেখায়:

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


হ্যাঁ, এটিকে দুর্দান্ত উত্স বলে মনে হচ্ছে। যাইহোক, মোছা বিভাগটি আমার জন্য টানছে না (এটি পৃষ্ঠা 23 এবং পূর্বরূপটি আবার পুনঃনির্দেশিত হয়েছে)। আপনি এই বই পড়া আছে? আপনি কি আমার প্রশ্নের উত্তর জানতে পেরেছেন?
ক্রেগ উইলসন

এই বইটি অবশ্যই রেস্ট তৈরির জন্য প্রয়োজনীয় (এটি কোনও ভাষায় নয়, বিশেষত কথা বলে)।
yves amsellem

7
ক্রেইগ কুকবুকটি পড়ছে, এটি বলছে যে আপনি ইতিমধ্যে এটি মুছে ফেলেছেন এমনকী আপনি 200 টি ঠিক ফিরিয়ে আনতে হবে। তবে, বাস্তবে যা সমস্ত মুছে ফেলা সম্পদগুলি ট্র্যাক করার জন্য সার্ভারের প্রয়োজন হবে, সুতরাং আপনি 404 ব্যবহার করতে পারেন It এটি বলা যায় যে সুরক্ষা উদ্বেগগুলির জন্য আপনাকে সর্বদা 404 ফিরে আসতে পারে return পৃষ্ঠা ১১
ড্যারেল মিলার

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

18
ঠিক আছে, বইটি ভুল। আইডেম্পোটেন্সি বলতে বোঝায় না যে স্থিতি কোডটি একই হবে। যা প্রাসঙ্গিক তা হ'ল সার্ভারের চূড়ান্ত অবস্থা।
জুলিয়ান রেসকে

13

আমি বর্তমানের নির্বাচিত উত্তর যা বলেছে তার সাথে আমি একমত, যে ২ য় (এবং তৃতীয়, চতুর্থ, ...) ডিলেট একটি 404 পাওয়া উচিত । এবং, আমি লক্ষ করেছি যে উত্তরটির 143 আপ ভোট রয়েছে তবে এর বিপরীত মন্তব্য রয়েছে যার পক্ষে 54 টি ভোট রয়েছে, সুতরাং সম্প্রদায়টি প্রায় 3: 1 অনুপাতে 2 শিবিরে বিভক্ত। এই দীর্ঘ সময়ের বিতর্ক নিষ্পত্তি করতে আরও তথ্য এখানে আসে।

  1. প্রথমত, আসুন আমরা "আমি" কী ভাবছি, "আপনি" কী ভাবছেন, বা অন্য কোনও বইয়ের লেখক কী ভাবছেন তা দিয়ে শুরু করা যাক না। আসুন এইচটিটিপি চশমা অর্থাৎ আরএফসি 7231 দিয়ে শুরু করা যাক।

    • আরএফসি 7231, বিভাগ 4.3.5 মুছুন কেবলমাত্র একটি সফল প্রতিক্রিয়া 2XX হওয়া উচিত উল্লেখ করার পরে ঘটেছিল, তবে পরবর্তী ডিলিট কী পাবেন তা কল করে নি। সুতরাং আরও গভীর খনন করা যাক।
    • আরএফসি 7231, বিভাগ 6.5.4 404 পাওয়া যায় নি 403 প্রতিক্রিয়া একটি সংস্থান জন্য বিদ্যমান নেই। যেহেতু কোনও নির্দিষ্ট http পদ্ধতি (বিশেষত, মুছে ফেলা নয়) অন্যথায় চিকিত্সা করার জন্য ডাকা হচ্ছে না, তাই আমরা স্বজ্ঞাতভাবে একটি ধারণা (এবং যথাযথভাবে) পেতে পারি, যাতে আমার অনুরোধটির DELETE /some/resource/which/does/not/existফলাফল 404 হয় ThenDELETE /some/resource/which/happened/to/be/removed/by/someone/else/five/days/ago পাশাপাশি আরো একটি 404 আসতে পারে তাহলে কেন DELETE /some/resource/i/deleted/five/seconds/agoঅন্যরকম হওয়া উচিত ? "তবে আদর্শপন্থী সম্পর্কে কীভাবে ?!", আমি শুনতে পাচ্ছি যে আপনি চিৎকার করছেন। থাক, আমরা এর মধ্যে getুকতে চলেছি।
    • Icallyতিহাসিকভাবে, 1999-এ প্রকাশিত আরএফসি 2616 হ'ল সবচেয়ে রেফারেন্সড এইচটিটিপি 1.1 স্পেস। দুর্ভাগ্যক্রমে আইডেম্পোটেন্সি সম্পর্কিত এটির বিবরণ অস্পষ্ট ছিল , যা এই সমস্ত বিতর্কের জায়গা ছেড়ে দেয়। কিন্তু যে চশমা বোঝায় যা RFC 7231. দ্বারা বাতিল করা হয়েছে থেকে উদ্ধৃত জন্য RFC 7231, বিভাগ 4.2.2 Idempotent পদ্ধতি , জোর খনি:

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

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

  2. ঠিক আছে তাই আদর্শের সম্পর্কে নয়। তবে তারপরে একটি ফলো-আপ প্রশ্ন হতে পারে, আমরা যদি এখনও পরবর্তী মুছে ফেলাতে 204 ব্যবহার করা বেছে নিই? ঠিক আছে?

    ভাল প্রশ্ন. অনুপ্রেরণা বোধগম্য: ক্লায়েন্টটিকে ত্রুটি পরিচালনার বিষয়ে চিন্তা না করেই এখনও তার উদ্দেশ্যপ্রাপ্ত ফলাফলটিতে পৌঁছানোর অনুমতি দেওয়া। আমি বলব, পরবর্তী মুছে ফেলাতে 204 ফিরিয়ে দেওয়া, মূলত ক্ষতিকারক একটি সার্ভার-সাইড "হোয়াইট মিথ্যা", যা ক্লায়েন্ট-পক্ষ অবিলম্বে কোনও পার্থক্য জানায় না won't সে কারণেই সেখানে ~ 25% লোক বন্যের মধ্যে এটি করছে এবং এটি এখনও আপাতদৃষ্টিতে কাজ করে। কেবল মনে রাখবেন যে, এই জাতীয় মিথ্যা শব্দার্থগতভাবে অদ্ভুত হিসাবে বিবেচনা করা যেতে পারে, কারণ GET /non-exist404 প্রদান করে কিন্তু DELETE /non-exist204 দেয়, তখন ক্লায়েন্টটি বুঝতে পারে যে আপনার পরিষেবাটি 6.5.4 বিভাগের সাথে পুরোপুরি মেনে চলে না 40 404 পাওয়া যায়নি

    তবে আমি এটি উল্লেখ করতে চাই যে, আরএফসি 7231 দ্বারা ইঙ্গিতযুক্ত উদ্দেশ্যে, অর্থাত পরবর্তী মুছে ফেলতে 404 ফিরিয়ে দেওয়া, প্রথম স্থানে কোনও সমস্যা হওয়া উচিত নয়। 3x আরও বিকাশকারীরা এটি করতে বেছে নিয়েছে এবং আপনি কি কখনও কোনও বড় ঘটনা শুনেছেন বা ক্লায়েন্ট 404 পরিচালনা করতে না পারার কারণে অভিযোগ করেছেন? সম্ভবত, না, এবং কারণ এটি, কোনও শালীন ক্লায়েন্ট যা HTTP ডিলেট (বা কোনও HTTP পদ্ধতি, সেই বিষয়ে) প্রয়োগ করে, অন্ধভাবে ফল ধরে না যে ফলাফলটি সর্বদা সফল 2XX হবে। এবং তারপরে, একবার বিকাশকারী ত্রুটি পরিচালনার বিষয়টি বিবেচনা করা শুরু করলে, 404 পাওয়া যায় না এমন মনে হওয়া প্রথম ত্রুটিগুলির মধ্যে একটি হবে। এই মুহুর্তে, সে সম্ভবত কোনও সিদ্ধান্তে পৌঁছাবে যে, এইচটিটিপি অপসারণের জন্য 404 ত্রুটি উপেক্ষা করা শব্দার্থগতভাবে নিরাপদ। এবং তারা তাই করেছে।

সমস্যা সমাধান.


2
+1 "আইডেম্পোটেন্সি সার্ভারের প্রভাব সম্পর্কে সমস্ত কিছু"। সাবধানে উত্তর। সাবাশ! পরবর্তী মুছে ফেলার অনুরোধগুলির জন্য আমি একটি 404 বিশ্বাসী।
সকাল

11

প্রথম মোছা : 200 বা 204।

পরবর্তী ডিলিটগুলি : 200 বা 204।

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

উদাহরণ :

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

কেবলমাত্র এই পদ্ধতির ব্যবহারের চিত্রিত করার জন্য, পেপালের জন্য এইচটিটিপি এপিআই স্টাইল গাইডের নিম্নলিখিত নির্দেশিকা রয়েছে:

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

মুছে ফেলার পদ্ধতিটি যেমন আদর্শবানও হওয়া উচিত, তখনও এটি संसाधन ইতিমধ্যে মুছে ফেলা হলেও 204 ফেরত পাঠানো উচিত। সাধারণত এই ক্রিয়াকলাপের অংশ হিসাবে বা পূর্বে সংস্থানটি মুছে ফেলা হয়েছে কিনা এআইপিআই গ্রাহকরা সেদিকে খেয়াল রাখেন না। এই কারণেই 404 এর পরিবর্তে 204 ফিরিয়ে দেওয়া উচিত।


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

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

2
অন্যরা যেমন উল্লেখ করেছে, আদর্শ প্রতিক্রিয়াটি আপনার প্রতিক্রিয়া কোডটি নয়, এটি আপনার সার্ভারের অবস্থা।
নিরঞ্জন

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

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