কোনও RESTful API এ যখন নেস্টেড সংস্থানগুলি ব্যবহার করবেন


16

আমার দুটি সংস্থান আছে: ব্যবহারকারী এবং লিঙ্কগুলি।

ব্যবহারকারীদের সাথে তাদের কয়েকটি লিঙ্ক যুক্ত থাকতে পারে। আমি আমার RESTful API তৈরি করেছি যাতে আপনি নিম্নলিখিত ইউআরআইতে কোনও ব্যবহারকারীর সাথে সম্পর্কিত লিঙ্কগুলিতে পৌঁছাতে পারেন:

/users/:id/links

যাইহোক, আমার সর্বদা কেবল লিঙ্কগুলির জন্য একটি ইউআরআই থাকা দরকার - কখনও কখনও ব্যবহারকারী না করেই আমি সমস্ত লিঙ্কগুলি পেতে চাই।

এর জন্য আমার আছে:

/links

এই শব্দ ঠিক আছে? লিঙ্কের জন্য দুটি ইউআরআই আছে?

আমি ভাবছি যদি এর পরিবর্তে কোনও ইউআরআই ব্যবহারকারীর লিঙ্কগুলিতে পৌঁছানো উচিত তবে:

/links/user/:id অথবা /links/?user=:id

এইভাবে, আমার কাছে লিঙ্কগুলির জন্য কেবল একটি সংস্থান রয়েছে।


3
হুম .. এটি আরও মার্জিত বলে মনে হচ্ছে:/links/user/:id
The MarcloR

7
@ থেইমার্সেলোআর: তিনটির মধ্যে এটিই একমাত্র উদাহরণ যা আমি বিশেষভাবে পরিষ্কার দেখতে পাই না । কোনও লিঙ্ক বা ব্যবহারকারীর জন্য সংস্থানটি কি? নেস্টেড রিসোর্স মেথড ( /users/:id/links) বা কোয়েরি স্ট্রিং মেথড ( /links/?user=:id) ব্যবহার করে ইউআরআই অনেক কম অস্পষ্ট কারণ এটি আসলে একটি কোয়েরি query /links/user/:idদেখতে বেশ সুন্দর এবং / অথবা কিছু ফ্রেমওয়ার্কে রুট করা সহজ হতে পারে তবে এটি আসলে বেশ বিভ্রান্তিকর।
অ্যারোনআউট

উত্তর:


16

না, একই "জিনিস" এর জন্য একাধিক সংস্থান থাকাতে কোনও ভুল নেই, এই ক্ষেত্রে লিঙ্কগুলির তালিকা lists

আমরা সম্প্রতি একই সমস্যা নিয়ে লড়াই করছি। আমাদের সিদ্ধান্ত ছিল এমন সমস্ত সংস্থান আছে যেখানে কঠোর মালিকানা বাসা বাঁধতে হবে না। অন্য কথায়, লিঙ্কগুলি মডেল করা হবে

/links -- all links
/links/:linkid -- a particular link

তারপরে, লিঙ্কগুলি সংগ্রহের ফিল্টারগুলি কোয়েরি পরামিতি হিসাবে প্রকাশ করা হয়। সুতরাং নির্দিষ্ট ব্যবহারকারীর লিঙ্কগুলি পেতে, আপনি এটি ব্যবহার করবেন:

/links?user=/users/:userid

এটি ফিল্টারগুলির আরও সহজে রচনা করার অনুমতি দেয়:

/links?user=/users/10&since=2013-01-01

এবং ধারণাটি বোঝা সহজ - আপনার কাছে আইটেমগুলির সংকলন রয়েছে এবং আপনি এতে ফিল্টারগুলি যুক্ত করেন।

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


1
"সমস্ত সংস্থান যেখানে কড়া মালিকানা নেই বাসা বাঁধতে হবে না" শুনতে ভাল নিয়ম বলে মনে হচ্ছে। একটি গুচ্ছ ধন্যবাদ।
অলিভার জোসেফ অ্যাশ

5
আমি বলতে চাই যে, হয় একই শারীরিক সত্তা জন্য একাধিক সম্পদ থাকার সঙ্গে কিছু ভুল, কিন্তু যে আসলে এই কি না। প্রতিটি স্বতন্ত্র লিঙ্কের একটি ক্যানোনিকাল ইউআরএল থাকে (লিঙ্কগুলি:: আইডি), যেখানে উপরের প্রতিটি সংস্থানগুলি আসলে ফিল্টারযুক্ত একটি একক সংস্থান (/ লিঙ্কগুলি)। এছাড়াও, ?user=users/:useridকোয়েরি স্ট্রিংয়ের মধ্যে আমি অদ্ভুত আউট ; ঠিক কি ভুল হয়েছে ?userid=:userid?
অ্যারোনআউট

2
@ অ্যারোনট: খালি আইডির পরিবর্তে ইউরির সাথে লেগে থাকার কারণটি যাতে ক্লায়েন্টরা সমস্ত সংস্থান সনাক্তকারীকে সমানভাবে আচরণ করতে পারে, তবে ক্লায়েন্টকে কেবল এটি জানতে হবে যে 'এই ব্যবহারকারী দ্বারা চিহ্নিত "/*******"; যেখানে *অস্বচ্ছ। তবে সেই একই শনাক্তকারীটিকে সর্বদা সেই সংস্থানটির (যেমন লিঙ্কগুলির সাথে) উল্লেখ করার জন্য ব্যবহার করা যেতে পারে, সেই সংস্থানটির সর্বাধিক বর্তমান সংস্করণ আনতে এবং এ জাতীয়। সেই ইউরির বিষয়বস্তু কেবলমাত্র উত্স সার্ভার দ্বারা বোঝা যায়। এর অর্থ হ'ল শনাক্তকারীদের যদি পরিবর্তন করতে হয় তবে বলুন /realm/:businessid/users/:id, ক্লায়েন্ট মোটেও পরিবর্তন করে না।
সিঙ্গেলাইজেশন ইলিমিনেশন

@ টোকেনম্যাকগুই: দুঃখিত, আমি আপনার মন্তব্যের কোনও অংশ বুঝতে পারছি না। /users/:userid/linksএবং মধ্যে ব্যবহারিক পার্থক্য কি /links?userid=:userid? উভয় ক্ষেত্রেই শনাক্তকারীরা পরিবর্তিত হয় না, তারা সেই সংস্থানটির বর্তমান সংস্করণটি নিয়ে আসে এবং ক্লায়েন্ট তাদের সাথে একইভাবে আচরণ করে। এটির জন্য ক্যানোনিকাল ইউআরএল বলে কোনও জিনিস নেই কারণ এটি কোনও উত্স নয়, এটি একটি কোয়েরি, সুতরাং এগুলি কেবল দুটি ভিন্ন ধরণের কোয়েরি সিনট্যাক্স। ইউআরএল কাঠামো পরিবর্তিত হলে ক্লায়েন্ট কীভাবে পরিবর্তিত হবে না সে সম্পর্কেও আমি পরিষ্কার নই; এটি যদি 301 এর জায়গায় না থাকে তবে এটি আরএসটি-র একটি ব্রেকিং পরিবর্তন হিসাবে বিবেচিত।
অ্যারোনআউট

1
@ অ্যারোনট: আমি আপনার উদ্বেগকে ভুল বুঝেছি। ধরুন /linksকোনও ক্যোয়ারী ইন্টারফেস সমর্থন করে /links?user=/users/123, /links?userid=123এমন ক্লায়েন্টগুলিতে রিসোর্স আইডেন্টিফায়ারদের একটি ব্ল্যাক-বক্স পদ্ধতির অনুমতি দেয় । আধুনিক ক্লায়েন্ট বুঝতে কি একটি আইডি হল প্রয়োজন এবং কিভাবে এটা পেতে, সম্ভবতঃ সংস্থান তা থেকে প্রাপ্ত আউট /users/123বা /links/456/user। পূর্ববর্তী অর্থ ক্লায়েন্টটি ইউরি আনমোডাইফাইড ব্যবহার করতে পারে; ধরা যাক /links/.../userএকটি হাইপারমিডিয়া প্রতিক্রিয়া দেয় (বলুন, Location:শিরোনাম সহ)।
সিঙ্গেলাইজেশন ইলিমিনেশন

1

সুতরাং আমার উদ্বেগটি হ'ল: / ব্যবহারকারী /: ইউজারআইডি / লিঙ্কগুলি "লিঙ্কগুলি" প্রদান করে, তবে যদি ব্যবহারকারী_আইডি সনাক্ত না করা হয় তবে এটি 404 ফেরত আসবে।

যাহোক

/ লিংক? ইউজারআইডি =: ইউজারিড সম্ভাব্যভাবে একটি খালি তালিকা (মূলত 200) ফিরিয়ে আনবে যা সম্ভবত একটি বাগ। এবং বেশ সম্ভব।

যদিও উভয়ই কাজ করে তবে বাসা বাঁধাই আপনাকে অতিরিক্ত কার্যকারিতা দেয় যা আপনি পরে আঁকতে পারেন।

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