গুচ্ছ আইটেম মুছে ফেলার জন্য নিরাপদ উপায়


100

ইন বাকি জন্য উইকি নিবন্ধে এটা নির্দেশিত হয় যে যদি আপনি ব্যবহার http://example.com/resources মুছুন, তার মানে কি সম্পূর্ণ সংগ্রহ মুছছেন।

আপনি যদি http://example.com/resources/7HOU57Y ডিলেট ব্যবহার করেন তবে এর অর্থ আপনি সেই উপাদানটি মুছছেন।

আমি একটি ওয়েবসাইট করছি, নোট ওয়েব সার্ভিস নোট করুন।

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

তাহলে আমি কীভাবে এক বিশ্রাম পথে একাধিক আইটেম মুছে ফেলতে পারি?

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


4
এই মুছে ফেলা পারমাণবিকভাবে করা উচিত কি সমালোচনা হয়? 31 টি মুছতে না পারলে আপনি কি সত্যিই প্রথম 30 টি আইটেমের মোছার বিপরীতটি ঘটাতে চান?
ড্যারেল মিলার

@दरরেলমিলার ভাল প্রশ্ন। আমি ভেবেছিলাম ডিলেটগুলি যদি পারমাণবিকভাবে করা হয় তবে এটি কম দক্ষ হবে। সুতরাং আমি যেখানে আইডি ইন (ids আইডির তালিকা}) টেবিলের নাম থেকে মুছে ফেলার দিকে ঝুঁকছি। যদি কেউ আমার দিকে ইঙ্গিত করতে পারে তবে এটি একটি ভাল ধারণা বা আমাকে সংশোধন করে। যে প্রশংসা করা হবে। এছাড়াও আমি 21 টি মুছে ফেলা হলে প্রথম 20 আইটেমগুলির জন্য মোছার বিপরীতটি প্রয়োজন নেই। আবার আমি এটির প্রশংসা করি যদি কেউ আমাকে পদ্ধতির মধ্যে পার্থক্য দেখাতে পারে যেখানে আমাকে বিপরীত করার দরকার নেই যেখানে আমাকে বিপরীত করার প্রয়োজন নেই
কিম স্ট্যাকস

4
দ্রষ্টব্য: "IN" ধারাটির সীমাবদ্ধতা থাকতে পারে; উদাহরণস্বরূপ, ওরাকলে আপনি সর্বাধিক 1000 আইডি রাখতে পারেন।
ছিনিয়ে নিন

: গুগল এর API- নকশা নির্দেশিকা অফার কাস্টম (ব্যাচ) তৈরি করতে একটি সমাধান বিশ্রাম API এ অপারেশন, এখানে আমার উত্তর দেখার stackoverflow.com/a/53264372/2477619
B12Toaster

উত্তর:


54

আমি মনে করি রোজোকার উত্তর এখন পর্যন্ত সেরা। সামান্য পরিবর্তন হতে পারে, একই পৃষ্ঠায় জাভাস্ক্রিপ্ট কনফার্মেশনটি সরিয়ে ফেলতে হবে এবং তার পরিবর্তে, নির্বাচনটি তৈরি করে সেই পৃষ্ঠায় একটি নিশ্চিত বার্তা দেখিয়ে এটিতে পুনর্নির্দেশ করা হবে। অন্য কথায়:

থেকে:
http://example.com/resources/

একটি কর

আইডি এর জন্য একটি নির্বাচন সহ পোস্ট করুন: http://example.com / উত্স / নির্বাচন
lections

যা, যদি সফল হয় তবে এর সাথে প্রতিক্রিয়া জানানো উচিত:

HTTP / 1.1 201 তৈরি করা হয়েছে এবং এতে একটি অবস্থান শিরোনাম:
http://example.com/resources/seferences/DF4XY7

এই পৃষ্ঠায় আপনি তারপরে একটি (জাভাস্ক্রিপ্ট) কনফার্ম বাক্স দেখতে পাবেন, যা আপনি যদি নিশ্চিত করেন তবে একটি অনুরোধ করবেন:

ডিলিট করুন http://example.com/resources/selections/DF4XY7

যা, যদি সফল হয় তবে এর সাথে প্রতিক্রিয়া জানানো উচিত: HTTP / 1.1 200 ঠিক আছে (বা সফল মুছার জন্য যা কিছু উপযুক্ত)


আমি এই ধারণাটি পছন্দ করি কারণ আপনার কোনও পুনর্নির্দেশের দরকার নেই। এজেএক্সকে অন্তর্ভুক্ত করে আপনি পৃষ্ঠাটি ছাড়াই এই সব করতে পারেন।
রোজোকা

এই মোছার পরে উদাহরণস্বরূপ / রিসোর্সস / সিলেকশনস / ডিএফ 4 এক্সওয়াই 7 , আমি কি আবার উদাহরণস্রোতাগুলিতে পুনঃনির্দেশিত হব?
কিম স্ট্যাকস

7
@ ফ্রিআইবয় এই দুটি পদক্ষেপটি একটি বহু-মুছে ফেলার সাধারণভাবে প্রস্তাবিত উপায় বলে মনে হচ্ছে, তবে কেন? আপনি কেন সরল নন কেন আপনি কোনও http://example.com/resources/selections/আইটেমটি মুছতে চান সেই ডেটা প্রেরণের অনুরোধের পেইলওড (বডি) এর মতো একটি ইউরির কাছে অনুরোধ প্রেরণ করুন। আমি যতটুকু বলতে পারি, এটি করা থেকে আপনাকে বিরত করার কিছুই নেই, তবে আমি সর্বদা "তবে এটি আরএসএসফুল নয়" এর সাথে মিলিত হই।
thecoshman

7
: মুছে দিন সম্ভাব্য শরীর HTTP- র পরিকাঠামো দ্বারা উপেক্ষিত থাকতে পারে stackoverflow.com/questions/299628/...
লুক Puplett

মোছার একটি দেহ থাকতে পারে, তবে এর প্রচুর বাস্তবায়ন তার দেহকে ডিফল্টরূপে নিষিদ্ধ করে
dmitryvim

54

একটি বিকল্প হ'ল একটি মুছে ফেলা "লেনদেন" তৈরি করা। সুতরাং আপনি মুছে ফেলার জন্য সংস্থানগুলির একটি তালিকা সহ একটি নতুন সংস্থান হিসাবে POSTকিছু http://example.com/resources/deletesto তারপরে আপনার আবেদনে আপনি কেবল মুছুন। আপনি যখন পোস্টটি করেন তখন আপনার তৈরি লেনদেনের কোনও স্থান যেমন ফিরে আসা উচিত http://example.com/resources/deletes/DF4XY7। এটির GETমাধ্যমে লেনদেনের স্থিতি (সম্পূর্ণ বা প্রগতিতে) এবং / অথবা মুছার জন্য সংস্থানগুলির একটি তালিকা ফিরে আসতে পারে।


4
আপনার ডাটাবেসের সাথে কিছুই করার নেই। লেনদেনের দ্বারা আমি কেবল সম্পাদন করা ক্রিয়াকলাপের তালিকা বুঝি। এই ক্ষেত্রে এটি মুছে ফেলার একটি তালিকা। আপনি যা করেন তা হ'ল আপনার অ্যাপ্লিকেশনটিতে একটি উত্স হিসাবে একটি নতুন তালিকা (মুছে ফেলার) তৈরি করা। আপনার ওয়েব অ্যাপ্লিকেশন আপনি চান তবে এই তালিকাটি প্রক্রিয়া করতে পারে। যে সম্পদ কোনো URI যেমন, হয়েছে example.com/resources/deletes/DF4XY7 । এর অর্থ আপনি সেই ইউআরআইতে জিইটি-র মাধ্যমে মুছার স্থিতি পরীক্ষা করতে পারেন। এটি কার্যকর হবে যদি আপনি মুছে ফেলেন তখন আপনাকে অ্যামাজন এস 3 বা অন্য কোনও সিডিএন থেকে চিত্রগুলি মুছতে হবে এবং সেই অপারেশনটি সম্পূর্ণ হতে দীর্ঘ সময় নিতে পারে।
রোজোকা

4
+1 এটি একটি দুর্দান্ত সমাধান। প্রতিটি রিসোর্সে একটি ডিলেট পাঠানোর পরিবর্তে, @rojoca একটি নতুন ধরণের রিসোর্সের একটি উদাহরণ তৈরি করার প্রস্তাব করেছে যার একমাত্র কাজ সম্পদের তালিকাকে মুছে ফেলছে। উদাহরণস্বরূপ, আপনার ব্যবহারকারীর সংস্থানগুলির একটি সংগ্রহ রয়েছে এবং আপনি আপনার সংগ্রহ থেকে ব্যবহারকারী বব, ডেভ এবং অ্যামি মুছতে চান, তাই আপনি তৈরি প্যারামিটার হিসাবে একটি নতুন মুছে ফেলা উত্স পোস্টিং বব, ডেভ এবং অ্যামি তৈরি করেন। মুছে ফেলা সংস্থানটি তৈরি করা হয়েছে এবং ব্যবহারকারীদের সংগ্রহ থেকে বব, ডেভ এবং অ্যামি মুছে ফেলার অ্যাসিক্রোনাস প্রক্রিয়াটিকে উপস্থাপন করে।
মাইক টোনিক্লিফ

4
আমি দুঃখিত. কিছু সমস্যা বুঝতে আমার এখনও কিছুটা অসুবিধা হচ্ছে। DF4XY7। পৃথিবীতে আপনি এই স্ট্রিংটি কীভাবে তৈরি করবেন? এই মোছার সংস্থান। আমার কি ডাটাবেসে কোনও ডেটা inোকানো দরকার? আমি যদি কিছু প্রশ্নের পুনরাবৃত্তি করি তবে আমি ক্ষমা চাই। এটি আমার কাছে কিছুটা অপরিচিত।
কিম স্ট্যাকস

4
আমি ধরে নিই যে ডিএফ 4 এক্সওয়াই 7 হ'ল একটি উত্পন্ন অনন্য আইডি, সম্ভবত ডিবিতে সংরক্ষণ করার সময় উত্পন্ন আইডিটি ব্যবহার করা আরও স্বাভাবিক, উদাহরণস্বরূপ, উদাহরণস্বরূপ / রিসোর্স / ডিলেটস /।। আমার গ্রহণটি হ'ল ডিলেশন মডেলটি তৈরি করা এবং এটি ডেটাবেসে সংরক্ষণ করা, আপনি অন্যান্য রেকর্ডগুলি মুছে ফেলার অ্যাসিক্রোনাস প্রক্রিয়াটি সম্পূর্ণকরণের স্থিতি, এবং কোনও প্রাসঙ্গিক ত্রুটি সহ মুছে ফেলতে পারবেন le
মাইক টোনিক্লিফ

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

35

আমাজন তাদের এস 3 আরএসটি এপিআই দিয়ে কী করেছে তা এখানে।

স্বতন্ত্র মুছে ফেলার অনুরোধ:

DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: authorization string (see Authenticating Requests (AWS Signature Version 4))

মাল্টি-অবজেক্ট মুছে ফেলার অনুরোধ:

POST /?delete HTTP/1.1
Host: bucketname.s3.amazonaws.com
Authorization: authorization string
Content-Length: Size
Content-MD5: MD5

<?xml version="1.0" encoding="UTF-8"?>
<Delete>
    <Quiet>true</Quiet>
    <Object>
         <Key>Key</Key>
         <VersionId>VersionId</VersionId>
    </Object>
    <Object>
         <Key>Key</Key>
    </Object>
    ...
</Delete>           

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

এখানে পার্স সার্ভারের একটি উদাহরণ।

স্বতন্ত্র মুছে ফেলার অনুরোধ:

curl -X DELETE \
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm

ব্যাচের অনুরোধ:

curl -X POST \
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
        "requests": [
          {
            "method": "POST",
            "path": "/1/classes/GameScore",
            "body": {
              "score": 1337,
              "playerName": "Sean Plott"
            }
          },
          {
            "method": "POST",
            "path": "/1/classes/GameScore",
            "body": {
              "score": 1338,
              "playerName": "ZeroCool"
            }
          }
        ]
      }' \
  https://api.parse.com/1/batch

13

আমি ডিলিট করুন http://example.com/resources/id1,id2,id3,id4 বা মুছে ফেলুন http://example.com/resources/id1+id2+ID3+id4 । যেহেতু এই উইকিপিডিয়া নিবন্ধটি উদ্ধৃত করার জন্য "আরইএসটি হ'ল একটি আর্কিটেকচার (...) [নয়] প্রোটোকল", আমি বিশ্বাস করি, এটি করার কোনও একক উপায় নেই।

আমি সচেতন যে এইচটিএমএল দিয়ে জেএস ছাড়া উপরেরটি সম্ভব নয় তবে আমি অনুভব করি যে বিশ্রামটি ছিল:

  • লেনদেনের মতো ছোটখাটো বিবরণ না ভেবে তৈরি করা হয়েছে। কারও বেশি একক আইটেম চালনার প্রয়োজন হবে? এটি এইচটিটিপি প্রোটোকলে কোনওভাবেই ন্যায়সঙ্গত হয়েছে কারণ এরপরে স্থির ওয়েবপৃষ্ঠাগুলি অন্য কোনও মাধ্যমে পরিবেশন করার উদ্দেশ্য ছিল না।
  • খাঁটি এইচটিএমএল - এমনকি বর্তমান মডেলগুলিতে ভালভাবে সামঞ্জস্য করার প্রয়োজন নেই।

thx - আপনি যদি পুরো সংগ্রহটি মুছতে চান - তাহলে আইডিগুলি বাদ দেওয়া উচিত?
বিকেএসপুরজন

"আমি অনুভূতি পেয়েছি যে লেনদেনের মতো ছোটখাটো বিবরণ না ভেবেই REST ছিল ... তৈরি হয়েছিল" - আমি মনে করি এটি একেবারেই সত্য নয়। আমি যদি সঠিকভাবে বুঝতে পারি তবে, REST- এ, লেনদেনগুলি কোনও পদ্ধতি দ্বারা নয়, উত্স দ্বারা প্রতিনিধিত্ব করা হয়। এই ব্লগ পোস্টে এই মন্তব্যে শেষ হয় কিছু ভাল আলোচনা আছে ।
পল ডি ওয়েট

10

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

  1. সমস্ত 'foo' উপাদান ফেরত দিন:

    [GET] api/foo

  2. নির্দিষ্ট আইডির জন্য ফিল্টারিং সহ 'ফু' উপাদানগুলি ফেরত দিন:

    [GET] api/foo?ids=3,5,9

ইন্দ্রিয়টি যেখানে ইউআরএল এবং ফিল্টারটি নির্ধারণ করে "আমরা কোন উপাদানগুলির সাথে কাজ করছি?", এবং রেস্ট পদ্ধতি (এই ক্ষেত্রে "জিইটি") বলছে "এই উপাদানগুলির সাথে কী করব?"

  1. তাই তাদের পড়া হিসাবে চিহ্নিত করার জন্য একাধিক রেকর্ড প্যাচ করুন

    [PATCH] api/foo?ids=3,5,9

.. ডেটা ফু দিয়ে [পড়ুন] = 1

  1. শেষ পর্যন্ত একাধিক রেকর্ড মুছতে, এই শেষ পয়েন্টটি সবচেয়ে যুক্তিযুক্ত:

    [DELETE] api/foo?ids=3,5,9

দয়া করে বুঝুন আমি বিশ্বাস করি না যে এ সম্পর্কে কোনও "বিধি" রয়েছে - আমার কাছে এটি কেবল "বোধগম্য"


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

2

যেমন ডেসেন্ট ড্যাবলার উত্তর এবং রোজোকাস উত্তর বলেছে, সর্বাধিক প্রচলিত সংস্থানগুলি ভার্চুয়াল রিসোর্সগুলি কোনও সংস্থান নির্বাচন মুছতে ব্যবহার করছে তবে আমি মনে করি এটি একটি আরএসটি দৃষ্টিকোণ থেকে ভুল, কারণ একটি কার্যকর করা DELETE http://example.com/resources/selections/DF4XY7নির্বাচিত সংস্থানগুলিকে নয়, নির্বাচিত সংস্থান নিজেই অপসারণ করা উচিত।

টেকিং Maciej Piechotka anwser বা fezfox উত্তর , আমি শুধুমাত্র একটি আপত্তি আছে: ID গুলির একটি অ্যারের পাস একটি ক্যানোনিকাল উপায় আছে এবং অ্যারে অপারেটর ব্যবহার করছে:

DELETE /api/resources?ids[]=1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d&ids[]=7e8f9a0b-1c2d-3e4f-5a6b-7c8d9e0f1a2b

এইভাবে আপনি মুছুন সংগ্রহের শেষ পয়েন্টে আক্রমণ করছেন তবে মুছে ফেলা ফিল্টারটি সঠিক উপায়ে ক্যোরিস্ট্রিং দিয়ে।


-1

এটি করার মতো কোনও 'যথাযথ' উপায় না থাকায় আমি অতীতে যা করেছি তা হ'ল:

DEMLTE কে প্রেরণ করুন http://example.com/sMLML বা json এর শরীরে এনকোডড ডেটা সহ কিছু।

আপনি যখন অনুরোধটি পান, মুছে ফেলুন কিনা তা যদি সত্য হয়, তার জন্য পরীক্ষা করুন the


এটি আমার কাছে উপলব্ধি করার মত পদ্ধতির, আপনি কেবল একটি অনুরোধে ডেটা প্রেরণ করেন, তবুও আমি সর্বদা "তবে এটি আরএসএসফুল নয়" এর সাথে মিলিত হই। এটি করার জন্য কোনও কার্যকর এবং 'RESTfull' পদ্ধতি বলে আপনি কি কোনও উত্স পেয়েছেন?
thecoshman

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

জন্য অ্যালেক্স এর মন্তব্য রেফারেন্স stackoverflow.com/questions/299628/...
লুক Puplett

4
A payload within a DELETE request message has no defined semantics; sending a payload body on a DELETE request might cause some existing implementations to reject the request.থেকে tools.ietf.org/html/rfc7231#section-4.3.5
cottton

-1

একাধিক আইটেম মুছতে আমার একই অবস্থা ছিল। এটিই আমি শেষ করেছিলাম। আমি মুছে ফেলা অপারেশন এবং আইটেমগুলির আইডিগুলি মুছতে হবে এটি HTTP শিরোনামের অংশ ছিল।

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