পুনরাবৃত্তির উত্সের জন্য সেরা RESTful URL কাঠামোটি কী?


10

আমি গাছের মতো রিসোর্স কাঠামোর জন্য একটি RESTfull পরিষেবা তৈরি করছি এবং ভাবছিলাম যে সেরা URL কাঠামোটি কী হবে?

আমার তিনটি প্রয়োজনীয়তা রয়েছে:

  1. মূল সংস্থানগুলির সংগ্রহ পেতে সক্ষম হন
  2. একটি পৃথক সংস্থান পেতে সক্ষম হবেন
  3. শিশু সংস্থানগুলির সংগ্রহ পেতে সক্ষম হন

আমার বর্তমান চিন্তাধারা হ'ল:

/rest/documents
/rest/documents/{id}
/rest/documents/{id}/documents

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

উপরোক্ত বিষয়ে কারও কি কোন চিন্তাভাবনা আছে? অথবা এটির কাঠামোর আলাদা / আরও ভাল উপায় আছে?


আমি প্রশ্নটি ভুল বুঝে উঠতে পারি তবে আমরা ইউআরএল নিয়ে কথা বলছি এসইও একটি সমস্যা?
জন হপকিন্স

এসইও কোনও সমস্যা নয়, না। আমি মূলত স্ব-রেফারেন্সিং সংস্থার জন্য সেরা লজিক্যাল URL কাঠামোটি জিজ্ঞাসা করছি।
ম্যাট ব্রিলসফোর্ড 11

এটা আমার কাছে বেশ সোজা মনে হচ্ছে।
টিম পোস্ট

এই কাঠামোটি কত গভীর যেতে পারে?
মার্টিজন ভার্বার্গে

@ মার্তিজন গভীরতা সীমিত নয়
ম্যাট ব্রিলসফোর্ড

উত্তর:


11

আমার মনে যা আসে তা হ'ল: আপনাকে বিশ্রামপ্রাপ্ত এপিআই URL এ নিজেই পুনরাবৃত্তির প্রতিফলন ঘটায় না। এটি ভাবতে আসুন, আপনার সংস্থানটি কেবলমাত্র নথি।

আপনার যদি পুনরাবৃত্ত কাঠামো অনুসারে আপনার নথিগুলি শারীরিকভাবে সঞ্চিত থাকে তবে একটি অনন্য আইডিতে একটি ম্যাপিং তৈরি করুন এবং ইউআরএলটিতে আইডিটি ব্যবহার করুন:

/rest/documents/{id}

এখন আপনার কাছে যদি আপনার নথিগুলি থাকে:

| ডকুমেন্টনাম | ডকুমেন্টপথ | ডকুমেন্টআইডি |
--------------------------------------------
| abc | / এবিসি | 1 |
| আসাদ | / এবিসি / এস্যাসেড | 2 |
| আসাদ | / এস্যাসিড | 3 |
| বু | / এবিসি / এস্যাসেড / বুও | 4 |
| আরে | / এবিসি / এস্যাসেড / আরে | 5 |

অনুরোধটি /abc/asdনথির জন্য এই url- এর সাথে পরামর্শ করবে

GET /rest/documents/2

সুতরাং, এখন আপনাকে আপনার এপিআইর ব্যবহারকারীদের আপনার কাঠামোটিকে অল্প প্রচেষ্টা করে অতিক্রম করার উপায় সরবরাহ করতে হবে। এটি আপনার প্রতিক্রিয়া পেইলড (দস্তাবেজ) কোনও বস্তুতে মোড়ানো দ্বারা করা যেতে পারে, এতে অতিরিক্ত ট্র্যাভারসাল তথ্য রয়েছে:

{
   data: { /* your document goes here */ },
   parent: {"abc": 1 },
   children: [ { "boo": 4 }, { "hey": 5} ]
}

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

GET /rest/documents/2/children?page=2&size=50

পরিশেষে, ক্যোরিস্ট্রিং পরামিতিগুলির কথা বলতে গেলে, আপনি সরাসরি ক্যোরিস্ট্রিং প্যারামিটারগুলির মাধ্যমে পাথের তথ্য সরবরাহ করতে পারেন:

GET /rest/documents?path=somepath&page=1&size=42

উল্লিখিত সমস্ত পদ্ধতির আশা করে যে GET /rest/documentsসমতলটি কেবলমাত্র মূল ডকুমেন্টগুলি দেয়।


1
ভাল ধারণা. তবে, শিশু নথির সাথে সম্পর্কটি যদি কোনও নথির প্রতিক্রিয়াতে শিশু ডক্সকে অন্তর্ভুক্ত করা হয় তবে এপিআই থেকে স্পষ্ট নয়। যদি নথিতে অন্য একটি সাবসোর্স থাকে, যেমন মন্তব্যসমূহ, আপনি সাধারণত / নথি / {আইডি} / প্রশ্নগুলি ব্যবহার করে কোনও দস্তাবেজের জন্য প্রশ্নগুলি অ্যাক্সেস করতে পারেন। ধারাবাহিক হতে এবং এপিআই-তে শিশু নথির সাথে সম্পর্কটি সুস্পষ্ট করার জন্য, আমি পরামর্শ দেব যে শিশু দস্তাবেজগুলি / ডকুমেন্টস / {আইডি} / শিশু-নথি দ্বারা অ্যাক্সেস করা উচিত। প্রদত্ত উপস্থাপনাগুলি হ'ল ডকুমেন্টস / ডকুমেন্টস / {আইডি like এর মতো} সুতরাং, আপনি এখানে বর্ণিত বাকীগুলি এখনও কার্যকর করে।
নাথান ওয়ার্ড

2

এরকম কিছু সম্ভবত:

/rest/{rootEntity}/Item/{leafEntity}/{id}
/rest/{entity}/ItemList
/rest/{entity}/ItemList/{leafEntity}

যেখানে collection rootEntity your আপনার সংগ্রহের প্রারম্ভিক বিন্দু, সেখানে আপনার গাছের মধ্যে named লিফটেনটিটি named কোনও নামযুক্ত পাতার নোড।

আপনি উপরের কয়েকটি যে কোনও পরামিতি সংযোজন করতে পারেন চয়ন করতে, বলার জন্য, সর্বশেষ বা সমস্ত বা কোনও কিছুতে।

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