আপডেটের জন্য আমাদের সমস্ত নিবন্ধের ডেটা এপিআইতে প্রেরণ করা দরকার এবং মাল্টিউসার কাজটি কার্যকর করা যায়নি। উদাহরণস্বরূপ সম্পাদক 5 সেকেন্ড পুরানো ডেটা প্রেরণ করতে এবং ঠিক করতে ওভাররাইট করতে পারে যে অন্য কোনও সাংবাদিক ঠিক 2 সেকেন্ড আগে করেছিলেন এবং আমি ক্লায়েন্টদের কাছে এটি ব্যাখ্যা করার কোনও উপায় নেই যেহেতু নিবন্ধ প্রকাশকারীরা সত্যই কোনও বিষয়বস্তু আপডেট করার সাথে যুক্ত নয়।
এই ধরণের জিনিসটি আপনি যা-ই করুন না কেন এটি একটি চ্যালেঞ্জ, এটি বিতরণ করা উত্স নিয়ন্ত্রণ (মার্উরিয়াল, গিট ইত্যাদি) এর মতো একটি অনুরূপ সমস্যা এবং এইচটিটিপি / আরএসটি-তে বানানযুক্ত সমাধানটি কিছুটা মিল দেখায়।
ধরা যাক আপনি দুজন ব্যবহারকারী, এলিস এবং বব দুজনেই কাজ করছেন /articles/lunch
। (স্পষ্টতার জন্য, প্রতিক্রিয়া সাহসী মুখে হয়)
প্রথমত, এলিস নিবন্ধটি তৈরি করে।
PUT /articles/lunch HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic YWxpY2U6c2VjcmV0
Hey Bob, what do you want for lunch today?
301 Moved Permanently
Location: /articles/lunch/1
সার্ভারটি কোনও সংস্থান তৈরি করে নি, কারণ অনুরোধটির সাথে কোনও "সংস্করণ" সংযুক্ত ছিল না, (এর একটি শনাক্তকারী ধরে /articles/{id}/{version}
নিচ্ছে the সৃষ্টিটি সম্পাদন করতে, অ্যালিস যে নিবন্ধ / সংস্করণটি তৈরি করবেন তা ইউআরএলে পুনর্নির্দেশ করা হয়েছিল Alএলিসের ব্যবহারকারী এজেন্ট তারপরে নতুন ঠিকানায় অনুরোধটি পুনরায় আবেদন করবেন।
PUT /articles/lunch/1 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic YWxpY2U6c2VjcmV0
Hey Bob, what do you want for lunch today?
201 Created
এবং এখন নিবন্ধ তৈরি করা হয়েছে। পরবর্তী, বব নিবন্ধটি দেখুন:
GET /articles/lunch HTTP/1.1
Host: example.com
Authorization: Basic Ym9iOnBhc3N3b3Jk
301 Moved Permanently
Location: /articles/lunch/1
বব সেখানে তাকান:
GET /articles/lunch/1 HTTP/1.1
Host: example.com
Authorization: Basic Ym9iOnBhc3N3b3Jk
200 Ok
Content-Type: text/plain
Hey Bob, what do you want for lunch today?
তিনি নিজের পরিবর্তন যুক্ত করার সিদ্ধান্ত নেন।
PUT /articles/lunch/1 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic Ym9iOnBhc3N3b3Jk
Hey Bob, what do you want for lunch today?
Does pizza sound good to you, Alice?
301 Moved Permanently
Location: /articles/lunch/2
অ্যালিসের মতো, ববকে পুনর্নির্দেশ করা হয়েছে যেখানে তিনি একটি নতুন সংস্করণ তৈরি করবেন।
PUT /articles/lunch/2 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic Ym9iOnBhc3N3b3Jk
Hey Bob, what do you want for lunch today?
Does pizza sound good to you, Alice?
201 Created
অবশেষে, অ্যালিস সিদ্ধান্ত নিয়েছে যে তিনি তার নিজের নিবন্ধে যুক্ত করতে চান:
PUT /articles/lunch/1 HTTP/1.1
Host: example.com
Content-Type: text/plain
Authorization: Basic YWxpY2U6c2VjcmV0
Hey Bob, what do you want for lunch today?
I was thinking about getting Sushi.
409 Conflict
Location: /articles/lunch/3
Content-Type: text/diff
---/articles/lunch/2
+++/articles/lunch/3
@@ 1,2 1,2 @@
Hey Bob, what do you want for lunch today?
-Does pizza sound good to you, Alice?
+I was thinking about getting Sushi.
স্বাভাবিক হিসাবে পুনঃনির্দেশিত হওয়ার পরিবর্তে ক্লায়েন্টের কাছে একটি পৃথক স্থিতি কোড ফিরে আসে 409
, যা অ্যালিসকে বলে যে সে যে সংস্করণটি থেকে শাখার চেষ্টা করেছিল সে ইতিমধ্যে ব্রাঞ্চ হয়ে গেছে। নতুন সংস্থানগুলি যাইহোক তৈরি করা হয়েছিল ( Location
শিরোনামের দ্বারা দেখানো হয়েছে ) এবং উভয়ের মধ্যে পার্থক্য প্রতিক্রিয়া সংস্থার অন্তর্ভুক্ত ছিল। অ্যালিস এখন জানে যে তিনি যে অনুরোধ করেছিলেন তার কিছুটা কীভাবে মার্জ করা দরকার।
এই পুনঃনির্দেশের সমস্তই শব্দার্থবিজ্ঞানের সাথে সম্পর্কিত PUT
, যার জন্য অনুরোধ লাইনটি জিজ্ঞাসা করে যেখানে নতুন সংস্থান তৈরি করা দরকার। এটি POST
পরিবর্তে একটি অনুরোধচক্রটি সংরক্ষণ করতে পারে , তবে তারপরে সংস্করণ নম্বরটি অন্য কোনও যাদু দ্বারা অনুরোধে এনকোড করতে হবে, যা চিত্রের উদ্দেশ্যে আমার কাছে কম স্পষ্ট মনে হয়েছিল, তবে সম্ভবত সত্যিকারের এপিআইতে পছন্দ হবে অনুরোধ / প্রতিক্রিয়া চক্র হ্রাস করতে।
api/article?action=publish
? ক্যোয়ারী প্যারামিটারগুলি এমন ক্ষেত্রে তৈরি করা হয় যেখানে আপনার উল্লিখিত 'অ্যালগরিদম' (বা ক্রিয়া) এর উপর সম্পদের অবস্থা নির্ভরশীল। উদাহরণস্বরূপapi/articles?sort=asc
বৈধ