আমাদের কোথায় অনুসন্ধানের কাজ করা উচিত?
ইন GET /search/:text
। এটি ম্যাচগুলিতে একটি JSON অ্যারে ফিরিয়ে আনবে, প্রতিটি মিল এটির অন্তর্গত অ্যালবাম সহ। এটি উপলব্ধি করে, কারণ ক্লায়েন্ট নিজেই ট্র্যাকটিতে আগ্রহী না হতে পারে তবে পুরো অ্যালবামটি (কল্পনা করুন যে আপনি এমন একটি গান অনুসন্ধান করছেন যা আপনার বিশ্বাস, আপনি যে নামটি মনে রেখেছিলেন সেই একই অ্যালবামে ছিল)।
প্রত্যেকের সাথে প্যারেন্টস আইডিকে ফিরিয়ে দেওয়া ভাল হবে না। আমি কি ভূল?
পৃথক ট্র্যাকগুলিতে অ্যালবাম থাকতে পারে। এটি নিশ্চিত করবে যে আপনি যদি অ্যালবামের মাধ্যমে বা অনুসন্ধানের মাধ্যমে ট্র্যাক পেতে পারেন তবে ট্র্যাকের উপস্থাপনাটি অভিন্ন কিনা (এখানে কোনও অ্যালবাম নেই)।
কোনটা ভাল?
যেমন পূর্বে বলা হয়েছে, অ্যালবাম সহ বোঝা যায়। যদিও তৃতীয় পয়েন্টটি (আপেক্ষিক ইউআরআই সহ) কিছু ক্ষেত্রে আকর্ষণীয় হতে পারে (ইউআরআই কীভাবে গঠন করা উচিত সে সম্পর্কে আপনাকে ভাবতে হবে না), এটি অ্যালবামটি স্পষ্টভাবে সরবরাহ না করার একটি অসুবিধা রয়েছে। চতুর্থ বিষয়টি এটিকে সংশোধন করে। প্রতিক্রিয়াতে আপেক্ষিক ইউআরআই থাকার সুবিধাটি যদি আপনি দেখতে পান তবে আপনি 3 এবং 4 পয়েন্টটি একত্রিত করতে পারেন।
নাকি আমি বোবা?
ভাল ইউআরআই নির্বাচন করা কোনও সহজ কাজ নয়, বিশেষত যেহেতু কোনও একক সঠিক উত্তর নেই। যদি আপনি একই সাথে ক্লায়েন্টকে এপিআই এর মতো বিকাশ করেন তবে এটি আপনাকে কীভাবে এপিআই ব্যবহার করা যেতে পারে তা আরও ভালভাবে কল্পনা করতে সহায়তা করতে পারে। এটি বলা হচ্ছে, অন্যান্য ব্যক্তিরা তখন অন্যান্য ব্যবহারগুলি পছন্দ করতে পারে যা আপনি এপিআই বিকাশের সময় ভেবে দেখেন নি।
সমস্যাযুক্ত হতে পারে এমন একটি দিক হ'ল আপনি কীভাবে তথ্য অভ্যন্তরীণভাবে সংগঠিত করেন, অর্থাৎ শ্রেণিবিন্যাসের ব্যবহার। আপনার মন্তব্য থেকে, আপনি ভাবছেন যে এর প্রতিক্রিয়া কী হওয়া উচিত GET /artist/1/album/10/song/3/comment/23
, যা একটি খুব বৃক্ষমুখী দৃষ্টিভঙ্গি দেখায়। পরে সিস্টেমটি প্রসারিত করার সময় এটি কয়েকটি সমস্যার কারণ হতে পারে। এই ক্ষেত্রে:
- একটি গানের অ্যালবাম না থাকলে কী হবে?
- যদি কোনও অ্যালবামের বেশ কয়েকটি শিল্পী থাকে তবে কী হবে?
- আপনি যদি এমন কোনও বৈশিষ্ট্য যুক্ত করতে চান যা অ্যালবাম মন্তব্য করা সম্ভব করে?
- সেখানে যদি মন্তব্য করার মতামত থাকা উচিত?
- প্রভৃতি
এটি মূলত আমার ব্লগটিতে ব্যাখ্যা করা সমস্যা : গাছের উপস্থাপনের অনেক ক্ষেত্রে কার্যকরভাবে ব্যবহার করার জন্য অনেকগুলি সীমাবদ্ধতা রয়েছে।
শ্রেণিবিন্যাসকে ধ্বংস করলে কী হবে? দেখা যাক.
GET /albums/:albumId
অ্যালবাম সম্পর্কে মেটা তথ্য (যেমন এটি প্রকাশিত হওয়ার বছর বা অ্যালবামের কভার দেখাচ্ছে জেপিইগির ইউআরআই) এবং ট্র্যাকের একটি অ্যারের সমন্বিত একটি জেএসওন ফেরত দেয়। উদাহরণ স্বরূপ:
GET /albums/151
{
"id": 151,
"gid": "dbd3cec7-b927-423f-894b-742c4c7b54ce",
"name": "Yellow Submarine",
"year": 1969,
"genre": "Psychedelic rock",
"artists": ["John Lennon", "Paul McCartney", ...],
"tracks": [
{
"id": 90224,
"title": "Yellow Submarine",
"length": "2:40"
},
{
"id": 83192,
"title": "Only a Northern Song",
"length": "3:24"
}
...
]
}
আমি কেন প্রতিটি ট্র্যাকের দৈর্ঘ্য অন্তর্ভুক্ত করব? কারণ আমি কল্পনা করি যে কোনও অ্যালবাম দেখানো ক্লায়েন্ট শিরোনাম অনুসারে ট্র্যাকগুলি তালিকাভুক্ত করতে আগ্রহী হতে পারে তবে প্রতিটি ট্র্যাকের দৈর্ঘ্যও দেখায় — বেশিরভাগ ক্লায়েন্টই করেন। অন্যদিকে, আমি প্রতিটি ট্র্যাকের জন্য সুরকার (গুলি) বা শিল্পী (গুলি) নাও দেখাই, কারণ আমি সিদ্ধান্ত নিয়েছি যে এই তথ্যটি এই স্তরের প্রয়োজনীয় নয়। স্পষ্টতই, আপনার পছন্দগুলি আলাদা হতে পারে।
GET /tracks/:trackId
নির্দিষ্ট ট্র্যাকের তথ্য ফেরত দেয়। যেহেতু আর কোনও শ্রেণিবদ্ধতা নেই, তাই আপনাকে অ্যালবাম বা শিল্পী অনুমান করার দরকার নেই: কেবলমাত্র আপনাকে যা জানতে হবে তা হ'ল ট্র্যাকটির সনাক্তকারী।
নাও হতে পারে? যদি আপনি নাম দিয়ে এটি নির্দিষ্ট করতে পারেন GET /tracks/:trackName
?
GET /tracks/Only%20a%20Northern%20Song
{
"id": 83192,
"gid": "8d9c4311-9d7b-40a4-8aeb-4fe96247fe2b",
"title": "Only a Northern Song",
"writers": ["George Harrison"],
"artists": ["John Lennon", "Paul McCartney", "Ringo Starr"],
"length": "3:24",
"record-date": 1967,
"albums": [151, 164],
"soundtrack": {
"uri": "http://audio.example.com/tracks/static/83192.mp3",
"alias": "Beatles - Only a Northern Song.mp3",
"length-bytes": 3524667,
"allow-streaming": true,
"allow-download": false
}
}
এখন কাছাকাছি তাকান albums
; তুমি কি দেখতে পাও? ডান, এক নয়, দুটি অ্যালবাম। আপনার যদি শ্রেণিবদ্ধতা থাকে তবে আপনি এটি করতে পারবেন না (যদি আপনি রেকর্ডটি নকল না করেন)।
GET /comments/:objectGid
। আপনি প্রতিক্রিয়াগুলিতে কুরুচিপূর্ণ জিইউডিগুলিকে স্পট করেছেন। অ্যালবাম, বা শিল্পী বা ট্র্যাকগুলিতে প্রয়োগ করা যেতে পারে এমন কার্য সম্পাদন করার জন্য এই জিইউইডিগুলি ডাটাবেস জুড়ে সত্তাকে সনাক্ত করা সম্ভব করে। যেমন মন্তব্য।
GET /comments/8d9c4311-9d7b-40a4-8aeb-4fe96247fe2b
[
{
"author": {
"id": 509931,
"display-name": "Arseni Mourzenko"
},
"text": "What a great song! (And I'm proud of the usefulness of my comment)",
"concerned-object": "/tracks/83192"
}
]
মন্তব্যটি সংশ্লিষ্ট অবজেক্টের উল্লেখ করে, এর প্রসঙ্গে বাইরের মন্তব্য অ্যাক্সেস করার সময় এটিতে যাওয়া সম্ভব করে তোলে (উদাহরণস্বরূপ সর্বশেষ মন্তব্যের মধ্য দিয়ে যাওয়ার সময় GET /comments/latest
)।
মনে রাখবেন যে এর অর্থ এই নয় যে আপনার এপিআইতে কোনও রূপের স্তরক্রম এড়ানো উচিত। এমন কিছু ঘটনা রয়েছে যেখানে এটি অর্থবোধ করে। একটি চলতি নিয়ম হিসাবে:
যদি উত্সটি তার পিতামাতার উত্সের প্রেক্ষাপটের বাইরে কোনও ধারণা দেয় না, তবে স্তরক্রমটি ব্যবহার করুন।
যদি উত্স একা (1) বা (2) বিভিন্ন ধরণের পিতামাতার সংস্থার প্রসঙ্গে বা (3) একাধিক পিতা-মাতার থাকতে পারে তবে স্তরক্রমটি ব্যবহার করা উচিত নয়।
উদাহরণস্বরূপ, কোনও ফাইলের রেখাগুলি কোনও ফাইলের প্রসঙ্গে বাইরে বোঝায় না, তাই:
GET /file/:fileId
এবং:
GET /file/:fileId/line/:lineIndex
ঠিক আছে।
SongSearchResult
, এটি ঠিক আছে, আমি ধরে নিই। তবে ইউআরএল সম্পর্কে কী? আমি কিparentID
প্রতিটি বস্তু সরবরাহ করতে এবং এটি জিইটি-প্যারামিটার বা ইউআরএলের স্বাভাবিক অংশ হিসাবে ব্যবহার করব? আমার গভীরতা> 2 থাকলে কী হবে?/artist/1/album/10/song/3/comment/23
- শিল্পী, অ্যালবাম এবং গানের প্রতিটি আইডিcomment
অবজেক্টে সরবরাহ করা পাগল , তবে আমি শুনেছি এটি যাওয়ার উপায়, তবে তা কী অবজ্ঞাপূর্ণ নয় ?!