আমি মনে করি যে আপনি এটি পরিচালনা করতে কোনও পোষ্ট বা প্যাচ পদ্ধতি ব্যবহার করতে পারেন যেহেতু তারা সাধারণত এটির জন্য ডিজাইন করেন।
একটি ব্যবহার POST
পদ্ধতি সাধারণত যখন তালিকার রিসোর্স ব্যবহার একটি উপাদান যোগ করার জন্য ব্যবহৃত হয় কিন্তু এছাড়াও আপনি এই পদ্ধতির জন্য বিভিন্ন ক্রিয়া সমর্থন করতে পারে। এই উত্তরটি দেখুন: একটি REST সংস্থান সংগ্রহ কীভাবে আপডেট করবেন । আপনি ইনপুটটির জন্য বিভিন্ন উপস্থাপনা ফর্ম্যাটগুলি সমর্থন করতে পারেন (যদি তারা কোনও অ্যারে বা একক উপাদানের সাথে মিল থাকে)।
ক্ষেত্রে, আপডেটটি বর্ণনা করতে আপনার ফর্ম্যাটটি সংজ্ঞায়িত করার প্রয়োজন হবে না।
PATCH
আংশিক আপডেটের সাথে সম্পর্কিত অনুরোধগুলি সম্পর্কিত হওয়ায় একটি পদ্ধতি ব্যবহার করাও উপযুক্ত। আরএফসি 5789 অনুসারে ( http://tools.ietf.org/html/rfc5789 ):
হাইপারটেক্সট ট্রান্সফার প্রোটোকল (এইচটিটিপি) প্রসারিত বেশ কয়েকটি অ্যাপ্লিকেশনের আংশিক সংস্থান পরিবর্তন করতে একটি বৈশিষ্ট্য প্রয়োজন। বিদ্যমান HTTP PUT পদ্ধতিটি কেবলমাত্র একটি দস্তাবেজের সম্পূর্ণ প্রতিস্থাপনের অনুমতি দেয়। এই প্রস্তাবটি একটি বিদ্যমান এইচটিটিপি রিসোর্সটি সংশোধন করার জন্য একটি নতুন এইচটিটিপি পদ্ধতি, প্যাচএইচসিএইচ যুক্ত করে।
ক্ষেত্রে, আংশিক আপডেট বর্ণনা করতে আপনাকে আপনার ফর্ম্যাটটি সংজ্ঞায়িত করতে হবে।
আমি মনে করি যে এই ক্ষেত্রে, POST
এবং PATCH
একেবারে অনুরূপ, যেহেতু প্রতিটি উপাদানটির জন্য আপনাকে অপারেশনটি বর্ণনা করার দরকার নেই। আমি বলব যে এটি উপস্থাপনের ফর্ম্যাটটির উপর নির্ভর করে।
ক্ষেত্রে PUT
একটি বিট কম স্পষ্ট। আসলে, কোনও পদ্ধতি ব্যবহার করার সময় PUT
আপনার পুরো তালিকা সরবরাহ করা উচিত। প্রকৃতপক্ষে, অনুরোধে প্রদত্ত প্রতিনিধিত্ব তালিকা সংস্থানটির পরিবর্তে হবে।
সংস্থান পথ সম্পর্কে আপনার দুটি বিকল্প থাকতে পারে।
- ডক তালিকার জন্য সংস্থান পথ ব্যবহার করা
এই ক্ষেত্রে, আপনি অনুরোধে যে প্রতিনিধিত্ব করেন তাতে আপনার দস্তাবেজের সাথে স্পষ্টভাবে ডক্সের লিঙ্ক সরবরাহ করতে হবে।
এটির জন্য এখানে একটি নমুনা রুট /docs
।
এই পদ্ধতির বিষয়বস্তু পদ্ধতির জন্য হতে পারে POST
:
[
{ "doc_number": 1, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 2, "binder": 4, (other fields in the case of creation) },
{ "doc_number": 3, "binder": 5, (other fields in the case of creation) },
(...)
]
- বাইন্ডার এলিমেন্টের সাব রিসোর্স পাথ ব্যবহার করা
এছাড়াও আপনি ডক্স এবং বাইন্ডারগুলির মধ্যে লিঙ্কটি বর্ণনা করতে সাব রুটগুলি উত্তোলনের বিষয়ে বিবেচনা করতে পারেন। একটি দস্তাবেজ এবং একটি বাইন্ডারের মধ্যে সংযোগ সম্পর্কিত ইঙ্গিতগুলি এখন অনুরোধের সামগ্রীর মধ্যে নির্দিষ্ট করতে হবে না।
এটির জন্য এখানে একটি নমুনা রুট /binder/{binderId}/docs
। এই ক্ষেত্রে, কোনও পদ্ধতির সাথে ডক্সের একটি তালিকা পাঠানো POST
বা PATCH
ডক্সটি binderId
উপস্থিত না থাকলে ডক তৈরির পরে সনাক্তকারী সহ দস্তাবেজের সাথে সংযুক্ত করবে ।
এই পদ্ধতির বিষয়বস্তু পদ্ধতির জন্য হতে পারে POST
:
[
{ "doc_number": 1, (other fields in the case of creation) },
{ "doc_number": 2, (other fields in the case of creation) },
{ "doc_number": 3, (other fields in the case of creation) },
(...)
]
প্রতিক্রিয়া সম্পর্কিত, প্রতিক্রিয়া স্তর এবং ফিরে ত্রুটি সংজ্ঞায়িত করা আপনার উপর নির্ভর করে। আমি দুটি স্তর দেখতে পাচ্ছি: স্থিতির স্তর (গ্লোবাল স্তর) এবং পে-লোড স্তর (পাতলা স্তর)। আপনার অনুরোধের সাথে সম্পর্কিত সমস্ত সন্নিবেশ / আপডেটগুলি অবশ্যই পারমাণবিক হওয়া উচিত কিনা তা নির্ধারণ করার বিষয়টিও আপনার উপর নির্ভর করে।
এই ক্ষেত্রে, আপনি HTTP স্থিতি লাভ করতে পারেন verage যদি সবকিছু ঠিকঠাক হয় তবে আপনি একটি স্ট্যাটাস পাবেন 200
। যদি তা না 400
হয় তবে প্রদত্ত ডেটা সঠিক না হলে (যেমন উদাহরণস্বরূপ বাইન્ડર আইডিটি বৈধ নয়) বা অন্য কোনও কিছুর মতো অন্য একটি স্ট্যাটাস ।
এই ক্ষেত্রে, একটি স্থিতি 200
ফিরিয়ে দেওয়া হবে এবং কী করা হয়েছিল এবং যেখানে ত্রুটিগুলি শেষ পর্যন্ত ঘটে তা বর্ণনা করার জন্য প্রতিক্রিয়া উপস্থাপনের উপর নির্ভর করবে। ইলাস্টিক অনুসন্ধানের বাল্ক আপডেটের জন্য তার REST এপিআইতে একটি শেষ পয়েন্ট রয়েছে। এটি আপনাকে এই স্তরে কিছু ধারণা দিতে পারে: http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/bulk.html ।
আপনি সরবরাহিত ডেটা হ্যান্ডেল করতে একটি অ্যাসিনক্রোনাস প্রসেসিংও প্রয়োগ করতে পারেন। এই ক্ষেত্রে, এইচটিটিপি স্থিতির রিটার্নগুলি হবে 202
। ক্লায়েন্টকে কী হয় তা দেখার জন্য একটি অতিরিক্ত সংস্থান টানতে হবে।
সমাপ্তি আগে, আমি আরো নোটিশ চায় যে OData স্পেসিফিকেশন ঠিকানাগুলি বৈশিষ্ট্য নামে সঙ্গে সত্ত্বা মধ্যে সম্পর্ক সংক্রান্ত ইস্যু নেভিগেশন লিঙ্কগুলি । সম্ভবত আপনি এই এক নজরে থাকতে পারে ;-)
নিম্নলিখিত লিঙ্কটি আপনাকেও সহায়তা করতে পারে: https://templth.wordpress.com/2014/12/15/designing-a-web-api/ ।
আশা করি এটি আপনাকে সহায়তা করবে, থিয়েরি
GET /docs
একটি নির্দিষ্ট বাইন্ডারের মধ্যে সমস্ত ডক্স কল করে পুনরুদ্ধার করিGET /docs?binder_id=x
। সংস্থানগুলির একটি উপসেট মুছতে আমি কল করবDELETE /docs?binder_id=x
বা অনুরোধের সংস্থায়DELETE /docs
একটি কল দিয়ে আমার কল করা উচিত{"binder_id": x}
? আপনি কি কখনওPATCH /docs?binder_id=x
ব্যাচ আপডেটের জন্য ব্যবহার করতে পারেন , বা ন্যায়PATCH /docs
এবং জুড়ি পাস?