পে-লোডে কোনও সংস্থান আইডি অন্তর্ভুক্ত করতে বা ইউআরআই থেকে প্রাপ্ত


13

একটি এআইপিআই ডিজাইন করে আমরা একটি পিটি পে-লোডে সংস্থানটির আইডি থাকা উচিত কিনা তা আপডেট করা উচিত নয়।

আমাদের কাছে বর্তমানে এটি রয়েছে:

PUT /users/123 Payload: {name: "Adrian"}

আমাদের রুট কোডটি ইউআরআই থেকে আইডিটি বের করে এবং আপডেট সহ চালিয়ে যায়।

আমাদের API এর প্রথম ব্যবহারকারীরা প্রশ্ন করছেন যে আমরা কেন পেডে আইডির অনুমতি দিই না:

PUT /users/123 Payload: {id: 123, name: "Adrian"}

পেডলোড এবং ইউআরআই-তে আইডি নকল করা হওয়ায় আমরা এটি অনুমোদন না করার কারণ।

এই সম্পর্কে আরও কিছু চিন্তা করে আমরা সংস্থানটি ইউআরআই-তে সংযুক্ত করছি।

যদি ইউআরআইয়ের আইডি না থাকে, পে-লোড সংশোধন করা দরকার:

PUT /no/id/here Payload: {name: "Adrian"} < What user???

না করার কোন কারণ আছে কি?

উত্তর:


14

তুমি অনুমিত ইউনিফর্ম দম্পতি রিসোর্স থেকে আইডেন্টিফাইয়ার রিসোর্স

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

আপনি বিভিন্ন ইউআরআইতে পোষ্ট ব্যবহার করতে পারেন, তবে এটি কেবলমাত্র কম ধারণা দেবে কারণ এটি জিইটি-তে অকারণে অসম্পূর্ণ হবে। সাধারণ ইউআরআই-এর কাছে পোস্ট করা কেবলমাত্র নতুন সংস্থান তৈরি করার জন্য ধারণা তৈরি করতে পারে ( POST /users/new, পে-লোড:, {name: "Adrian"}প্রতিক্রিয়া {id: 345, name: "Adrian"}), তবে এটি আদর্শবান নয় এবং তাই এড়ানো উচিত যদি আপনি বিশ্রামের জন্য প্রয়াস চালাচ্ছেন¹। পরিবর্তে আপনার একটি কল দিয়ে আইডি সংরক্ষণ করা উচিত এবং তারপরে নতুন আইডি সেট করতে PUT ব্যবহার করুন; এটি দোষ-সহনশীল, কারণ যদি প্রথম অনুরোধটি ব্যর্থ হয় তবে আইডি সংরক্ষণের সময় শেষ হতে পারে এবং PUTআদর্শবান। অথবা ক্লায়েন্ট-উত্পাদিত ইউআইডি ব্যবহার করুন।


RE আরআরএসটির সংজ্ঞা আদর্শহীনতা সম্পর্কে কিছু বলে না, সুতরাং আমি যদি সত্যিই দাবি করতে পারি না যে যদি আপনার আদর্শবিহীন অপারেশন থাকে তবে এটি বিশ্রাম নয়। এটি এই সত্যটি পরিবর্তিত করে না যে আদর্শবান্ধব অনুরোধগুলিকে আঁকড়ে রাখা জটিল জিনিস ছাড়াই জিনিসগুলিকে আরও নির্ভরযোগ্য করে তোলে এবং তাই এটির প্রস্তাব দেওয়া হয়।


3
যতদূর আমি জানি পোস্টের অনুরোধটি আদর্শবান হতে হবে না। সুতরাং আমি পোস্ট করতে কোনও সমস্যা দেখছি না /users('নতুন' যুক্ত করার দরকার নেই)।
lex82

আপনার উত্তর দেওয়ার জন্য ধন্যবাদ. আমি দেখতে পাচ্ছি যে সমস্ত অনুরোধের জন্য আদর্শবান্ধবতা রাখা একটি দুর্দান্ত বৈশিষ্ট্য তবে কে বলে যে এটি একটি REST এপিআইয়ের জন্য প্রয়োজন? অবশ্যই নিজেকে রিস্টফুল বলার মতো অনেকগুলি এআইপি নন-আদর্শবান পোষ্ট অনুরোধের মঞ্জুরি দেয় (বিশেষত যখন সার্ভার নতুন সংস্থার জন্য আইডি উত্পন্ন করে)। তবে আপনি আরইএসটি-র একটি খুব কড়া সংজ্ঞা প্রয়োগ করলেও, আমি দেখতে পাচ্ছি না যে উপরের উদাহরণের মতো আদর্শহীন পোষ্টগুলির সাথে কোন স্থাপত্য সীমাবদ্ধতা লঙ্ঘিত হয়েছে।
lex82

আমি অবশ্যই পোস্টের অনুরোধগুলি সীমাবদ্ধতা লঙ্ঘন করতে পারি। আমি কেবল দেখছি না কেন কোনও সংস্থায় কোনও সংস্থান পোস্ট করা এবং সার্ভারকে তার আইডি সম্পর্কে সিদ্ধান্ত নেওয়া দেওয়া REST সীমাবদ্ধতার লঙ্ঘন।
lex82



2

এই সম্পর্কে আরও কিছু চিন্তা করে আমরা সংস্থানটি ইউআরআই-তে সংযুক্ত করছি।

যদি ইউআরআইয়ের আইডি না থাকে, পে-লোড সংশোধন করা দরকার:

পুট / নং / আইডি / এখানে পেলোড: {নাম: "অ্যাড্রিয়ান"} <কি ব্যবহারকারী ???

না করার কোন কারণ আছে কি?

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

যদি ক্লায়েন্ট কোনও পিটিউটের মাধ্যমে আইডিটি পরিবর্তন করতে পারে তবে উত্সটির জন্য ইউআরআই পরিবর্তন হবে এবং কোনও সংস্থান পুরানো ইউআরআই অ্যাক্সেস করার সময় আপনাকে 301 স্থায়ীভাবে স্থানান্তরিত করা উচিত।

সুতরাং উদাহরণস্বরূপ আপনি এখানে একটি সংস্থান দিয়ে শুরু করুন

/users/123

এবং ক্লায়েন্টটি নিম্নলিখিত উত্সটিতে রাখে onto

{id: 222, name: "Adrian"}

রিসোর্স আপডেট করা হয়েছে এবং এর ইউআরআই এখন

/users/222

LocationPUT প্রতিক্রিয়ায় ক্ষেত্র নতুন কোনো URI থাকা উচিত, এবং যদি আপনি ফিরে যেতে /users/123আপনি একটি পাওয়া উচিত 301অবস্থান ক্ষেত্র নতুন নির্দেশিত সঙ্গে প্রতিক্রিয়া /users/222সম্পদ।

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

যদি আপনি একই উত্সটিতে কোনও আলাদা ইউআরআই প্রয়োজন হয়, বলুন

/users/adian_lync

তারপরে যদি সেই সংস্থানটি বিদ্যমান না থাকে তবে সার্ভারের এটি তৈরি করা উচিত এবং যখন এটি করা হচ্ছে তখন আইডি তৈরি করতে হবে


1
আমাদের পে-লোডে আইডি স্থাপনের বিষয়ে প্রশ্ন করার কারণটি ছিল ব্যাকবোন.জেস ডিফল্টরূপে একটি পুট অনুরোধে আইডিটি পাস করার কারণে। আমরা এটি ঘটতে বাধা দিতে পারি, তবে এখন আমি কেন এটি ডিফল্ট আচরণ তা জানতে চাই।
অ্যাড্রিয়ান লিঞ্চ

1
আতঙ্কিত আমি ব্যাকবোন.জেএস এর সাথে পরিচিত নই। আইডিটি ইউআরএলটিতে অন্তর্ভুক্ত করা হলে অপ্রয়োজনীয় বলে মনে হচ্ছে। ডিভসের পক্ষ থেকে সম্ভবত একটি তদারকি
Cormac Mulhall
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.