প্রথম
অনুযায়ী বোঝায় যা RFC 3986 §3.4 (ইউনিফর্ম রিসোর্স শনাক্তকারীগণ § (সিনট্যাক্স উপাদান) | ক্যোয়ারী
৩.৪ প্রশ্ন
ক্যোয়ারী উপাদানটিতে অ-শ্রেণিবদ্ধ তথ্য রয়েছে যা পাথ উপাদানগুলির (বিভাগে 3.3) ডেটা সহ, ইউআরআইয়ের স্কিম এবং নামকরণ কর্তৃপক্ষের (যদি কোনও হয়) ক্ষেত্রের মধ্যে একটি সংস্থান সনাক্ত করতে পারে।
অনুসন্ধান উপাদানগুলি হায়ারার্কিকাল ডেটা পুনরুদ্ধারের জন্য; পারিবারিক গাছের চেয়ে প্রকৃতিতে আরও কিছু শ্রেণিবিন্যাসের বিষয় রয়েছে! এরগো - আপনার মনে হয় এটি "REST-y" কিনা তা বিবেচনা না করেই - ইন্টারনেটে এবং সিস্টেমের বিকাশ, বিন্যাস, প্রোটোকল এবং ফ্রেমওয়ার্কের সাথে সামঞ্জস্য করার জন্য, আপনাকে এই তথ্য সনাক্ত করতে কোয়েরি স্ট্রিং ব্যবহার করা উচিত নয়।
এই সংজ্ঞাটির সাথে REST এর কোনও যোগসূত্র নেই।
আপনার নির্দিষ্ট প্রশ্নগুলির সমাধান করার আগে আপনার "অনুসন্ধান" এর ক্যোয়ারী প্যারামিটারটি খারাপ নাম দেওয়া হয়েছে। আপনার ক্যোয়ারী বিভাগটিকে কী-মান জোড়ার একটি অভিধান হিসাবে বিবেচনা করা ভাল।
আপনার প্রশ্নের স্ট্রিং হিসাবে আরও যথাযথভাবে সংজ্ঞায়িত করা যেতে পারে
?first_name={firstName}&last_name={lastName}&birth_date={birthDate}
প্রভৃতি
আপনার নির্দিষ্ট প্রশ্নের উত্তর দিতে
1) কোন এপিআই ডিজাইনটি বেশি বিশিষ্ট এবং কেন? শব্দার্থকভাবে, তারা একইভাবে বোঝায় এবং আচরণ করে। ইউআরআই-এর সর্বশেষ সংস্থান হ'ল "শিশু", কার্যকরভাবে বোঝায় যে ক্লায়েন্ট বাচ্চাদের সংস্থানগুলিতে কাজ করছে।
আপনি বিশ্বাস করেন না বলেই এটি এতটা পরিষ্কার কাটছে বলে আমি মনে করি না।
এই রিসোর্স ইন্টারফেসগুলির কোনওটিই বিশ্রামের নয়। প্রধান RESTful স্থাপত্য শৈলী জন্য পূর্বশর্ত যে আবেদন রাজ্য ট্রানজিশন হাইপার মিডিয়া যেমন সার্ভার থেকে যোগাযোগ করা হবে। লোকেরা ইউআরআইগুলির কাঠামো নিয়ে কোনওরকম "রেস্টস্টুল ইউআরআই" তৈরির জন্য পরিশ্রম করেছে তবে আরআরইএসটি সম্পর্কিত আনুষ্ঠানিক সাহিত্যের আসলে এ সম্পর্কে খুব কমই বলা যায়। আমার ব্যক্তিগত মতামতটি হল যে, আরইএসটি সম্পর্কে অনেকটা মেটা-ভুল তথ্য পুরানো, খারাপ অভ্যাস ভাঙার অভিপ্রায় নিয়ে প্রকাশিত হয়েছিল। (সত্যিকারের "RESTful" সিস্টেম তৈরি করা আসলে বেশ কিছুটা কাজ। শিল্পটি "REST" এ ঝলমলে হয়ে ওঠে এবং অযৌক্তিক যোগ্যতা এবং বিধিনিষেধের সাথে কিছু অরথগোনাল উদ্বেগকে ফিরিয়ে দিয়েছে))
আরআরইএসটি সাহিত্যে যা বলে তা হ'ল আপনি যদি এইচটিটিপিকে আপনার অ্যাপ্লিকেশন প্রোটোকল হিসাবে ব্যবহার করতে চলেছেন তবে আপনাকে অবশ্যই প্রোটোকলের স্পেসিফিকেশনগুলির আনুষ্ঠানিক প্রয়োজনীয়তা মেনে চলতে হবে এবং আপনি "যেতে যেতে এইচটিপি আপ করতে পারবেন না এবং এখনও ঘোষণা করতে পারবেন যে আপনি এইচটিপি ব্যবহার করছেন" ; আপনি যদি আপনার সংস্থানগুলি সনাক্ত করার জন্য ইউআরআই ব্যবহার করতে চলেছেন তবে আপনাকে অবশ্যই ইউআরআই / ইউআরএল সম্পর্কিত স্পেসিফিকেশনের আনুষ্ঠানিক প্রয়োজনীয়তা মেনে চলতে হবে।
আপনার প্রশ্নটি সরাসরি আরএফসি 3986 §3.4 দ্বারা সম্বোধন করা হয়েছে, যা আমি উপরে লিঙ্ক করেছি। এই বিষয়টির মূল কথাটি হ'ল যদিও একটি অনুবর্তনশীল ইউআরআই কোনও API "RESTful" বিবেচনা করা অপর্যাপ্ত, আপনি যদি আপনার সিস্টেমটি আসলে "RESTful" হতে চান এবং আপনি এইচটিটিপি এবং ইউআরআই ব্যবহার করে থাকেন তবে আপনি বিভাগের মাধ্যমে শ্রেণিবদ্ধ তথ্য সনাক্ত করতে পারবেন না ক্যোয়ারী স্ট্রিং কারণ:
৩.৪ প্রশ্ন
ক্যোরির উপাদানটিতে অ-স্তরক্রমিক ডেটা রয়েছে contains
...এটা ঐটার মতই সহজ.
২) ক্লায়েন্টের দৃষ্টিকোণ থেকে বোধগম্যতার দিক থেকে এবং ডিজাইনারের দৃষ্টিকোণ থেকে রক্ষণাবেক্ষণের দিক থেকে প্রতিটিের পক্ষে কী কী মতামত রয়েছে?
প্রথম দুটির "উপকার" হ'ল তারা সঠিক পথে রয়েছে । তৃতীয়টির "কনস" এটি হ'ল এটি ভুল হিসাবে ভুল বলে মনে হচ্ছে।
আপনার বোধগম্যতা এবং রক্ষণাবেক্ষণের বিষয়ে যতটা উদ্বেগ রয়েছে ততগুলি এগুলি অবশ্যই সাবজেক্টিভ এবং ক্লায়েন্ট বিকাশকারী এবং ডিজাইনারের নকশার চপগুলি বোঝার স্তরের উপর নির্ভর করে। ইউআরআই স্পেসিফিকেশন হ'ল ইউআরআই কীভাবে ফর্ম্যাট হওয়ার কথা তা সুনিশ্চিত উত্তর। অনুক্রমিক ডেটা পথ এবং পথের পরামিতিগুলির সাথে উপস্থাপিত হওয়ার কথা। অ-স্তরক্রমিক ডেটা ক্যোয়ারীতে উপস্থাপিত হওয়ার কথা। খণ্ডটি আরও জটিল, কারণ এর শব্দার্থবিজ্ঞানগুলি বিশেষত মিডিয়া ধরণের প্রতিনিধিত্বের অনুরোধের উপর নির্ভর করে। সুতরাং আপনার প্রশ্নের "বোধগম্যতা" উপাদানটি সমাধান করার জন্য, আমি আপনার প্রথম দুটি ইউআরআই আসলে কী বলছে তা ঠিক অনুবাদ করার চেষ্টা করব। তারপরে, আপনি যা বলেছিলেন তা বৈধ ইউআরআই দিয়ে সাফল্যের চেষ্টা করছেন তা উপস্থাপনের চেষ্টা করব।
আপনার শব্দভাণ্ডার ইউআরআইয়ের অনুবাদ তাদের অর্থপূর্ণ অর্থের
/myservice/api/v1/grandparents/{grandparentID}/parents/children?search={text}
জন্য এটি দাদা-দাদির পিতামাতার জন্য search={text}
বলা হয়েছে, আপনার ইউআরআইয়ের সাথে আপনি যা বলেছেন তা কেবল তার পিতামাতার ভাই-বোনের সন্ধানের ক্ষেত্রেই সুসংগত find আপনার "দাদা-দাদি, বাবা-মা, বাচ্চাদের" সাথে আপনি খুঁজে পেয়েছেন একটি "দাদা বাবা" তাদের প্রজন্মের কাছে তাদের বাবা-মার কাছে গিয়েছে এবং তারপরে বাবা-মা'র বাচ্চাদের দিকে তাকিয়ে "দাদা-পিতা" প্রজন্মের কাছে ফিরে এসেছিল।
/myservice/api/v1/parents/{parentID}/children?search={text}
এটি বলছে যে {প্যারেন্টআইডি by দ্বারা চিহ্নিত পিতামাতার জন্য, তাদের সন্তানের থাকার ?search={text}
বিষয়টি আপনি যা চান তা সংশোধন করার আরও কাছাকাছি এবং একটি পিতামাত্ত>> সন্তানের সম্পর্কের প্রতিনিধিত্ব করে যা সম্ভবত আপনার পুরো এপিআইয়ের মডেল হিসাবে ব্যবহার করা যেতে পারে। এটিকে মডেল করার জন্য, ক্লায়েন্টকে বোঝার জন্য বোঝা চাপানো হয়েছে যে তাদের যদি একটি "পিতামহাত্মক আইড" থাকে তবে তারা যে আইডিটি দেখতে চান এবং যে পারিবারিক গ্রাফটি দেখতে চান তার মধ্যে যে দিকনির্দেশের একটি স্তর রয়েছে তার মধ্যে রয়েছে। "পিতামহী আইডি" দ্বারা "সন্তানের" /parents/{parentID}/children
সন্ধানের জন্য , আপনি আপনার পরিষেবাতে কল করতে পারেন এবং তারপরে ফিরে আসা বাচ্চার পূর্বাভাস দিতে পারেন , তাদের ব্যক্তির পরিচয় সনাক্তকারী হিসাবে তাদের বাচ্চাদের অনুসন্ধান করতে পারেন।
আপনার প্রয়োজনীয়তাগুলি ইউআরআই হিসাবে বাস্তবায়ন
আপনি যদি গাছের পথে হাঁটতে পারেন এমন আরও একটি এক্সটেনসিবল রিসোর্স আইডেন্টিফায়ার মডেল করতে চান, তবে আপনি এটি সম্পাদন করতে পারেন এমন বেশ কয়েকটি উপায় সম্পর্কে আমি ভাবতে পারি।
1) প্রথমটি, আমি ইতিমধ্যে ইঙ্গিত দিয়েছি। একটি যৌগিক কাঠামো হিসাবে "লোক" এর গ্রাফ উপস্থাপন করুন। প্রতিটি ব্যক্তির তার পিতামাতার পথে এবং তার নীচের প্রজন্মের তার শিশুদের পথ ধরে এর উপরে প্রজন্মের একটি উল্লেখ রয়েছে।
/Persons/Joe/Parents/Mother/Parents
জো এর মাতামহ দাদীদের দখল করার উপায় হবে।
/Persons/Joe/Parents/Parents
জো এর সমস্ত দাদা দাদীদের দখল করার উপায় হবে।
/Persons/Joe/Parents/Parents?id={Joe.GrandparentID}
জো যে দাদুকে আপনার হাতে থাকা শনাক্তকারীটি ধরে ফেলবে।
এবং এগুলি সমস্ত বোঝায় (নোট করুন যে এখানে "পিতা-মাতা / পিতা-মাতা / পিতা-মাতা" প্যাটার্নে শাখা সনাক্তকরণের অভাবের কারণে সার্ভারে একটি dfs জোর করে কাজের উপর নির্ভর করে একটি পারফরম্যান্স পেনাল্টি হতে পারে)) প্রজন্মের যেকোন স্বেচ্ছাসেবক সংখ্যাকে সমর্থন করার ক্ষমতা। যদি কোনও কারণে আপনি 8 প্রজন্মের সন্ধান করার ইচ্ছা পোষণ করেন তবে আপনি এটিকে উপস্থাপন করতে পারেন
/Persons/Joe/Parents/Parents/Parents/Parents/Parents/Parents/Parents/Parents?id={Joe.NotableAncestor}
তবে এটি এই ডেটা উপস্থাপনের জন্য দ্বিতীয় প্রভাবশালী বিকল্পের দিকে নিয়ে যায়: একটি পাথ প্যারামিটারের মাধ্যমে।
2) "শ্রেণিবিন্যাসের জিজ্ঞাসা করতে" পথের পরামিতিগুলি ব্যবহার করুন আপনি ভোক্তাদের উপর বোঝা কমিয়ে আনতে সহায়তা করতে নীচের কাঠামোটি বিকাশ করতে পারেন এবং এখনও এমন একটি এপিআই রয়েছে যা বোধগম্য হয়।
147 প্রজন্মের দিকে ফিরে তাকাতে, পাথ প্যারামিটারগুলির সাথে এই উত্স শনাক্তকারীর প্রতিনিধিত্ব আপনাকে করতে দেয়
/Persons/Joe/Parents;generations=147?id={Joe.NotableAncestor}
জোকে তার গ্রেট পিতামাতার কাছ থেকে সনাক্ত করতে আপনি জো এর আইডির জন্য জ্ঞাত সংখ্যক প্রজন্মের গ্রাফটি নীচে দেখতে পারেন।
/Persons/JoesGreatGrandparent/Children;generations=3?id={Joe.Id}
এই পদ্ধতির সাথে নোটের প্রধান বিষয়টি হ'ল শনাক্তকারী এবং অনুরোধ সম্পর্কিত আরও তথ্য ছাড়াই আপনার প্রত্যাশা করা উচিত যে প্রথম ইউআরআই জো থেকে 147 প্রজন্মের একজন ব্যক্তিকে জো.অনোটেবলঅ্যানস্টোর সনাক্তকারী সহ পুনরুদ্ধার করছে। আপনার কাছে দ্বিতীয়টিকে জো পুনরুদ্ধার করার আশা করা উচিত। অনুমান করুন যে আপনি যা করতে চান তা হ'ল আপনার কলিং ক্লায়েন্টের পক্ষে মূল ব্যক্তি এবং আপনার ইউআরআইয়ের চূড়ান্ত প্রসঙ্গের মধ্যে পুরো নোড এবং তাদের সম্পর্কগুলির পুরো পুনরুদ্ধার করতে সক্ষম হবেন। আপনি একই ইউআরআই দিয়ে (কিছু অতিরিক্ত সজ্জা সহ) এবং text/vnd.graphviz
আপনার অনুরোধে একটি স্বীকৃতি নির্ধারণের মাধ্যমে এটি করতে পারেন, যা .dot
গ্রাফের উপস্থাপনের জন্য আইএএনএ নিবন্ধিত মিডিয়া টাইপ । এটির সাথে, ইউআরআইতে পরিবর্তন করুন
/Persons/Joe/Parents;generations=147?id={Joe.NotableAncestor.Id}#directed
এইচটিটিপি রিকোয়েস্ট শিরোনাম সহ
Accept: text/vnd.graphviz
এবং আপনি ক্লায়েন্টদের মোটামুটি পরিষ্কারভাবে জানাতে পারেন যে তারা জো এবং ১৪7 প্রজন্মের মধ্যে প্রজন্মের শ্রেণিবিন্যাসের নির্দেশিত গ্রাফ চায় যেখানে 147 তম পৈতৃক প্রজন্মের কোনও ব্যক্তি জোয়ের "উল্লেখযোগ্য পূর্বপুরুষ" হিসাবে চিহ্নিত রয়েছে।
আমি নিশ্চিত না যে পাঠ্য / vnd.ગ્રાগ্রিজের খণ্ডের জন্য কোনও পূর্বনির্ধারিত শব্দার্থ রয়েছে; আমি কোনও অনুসন্ধানের জন্য খুঁজে পাইনি none যদি সেই মিডিয়া টাইপটিতে প্রকৃত সংজ্ঞায়িত খণ্ড তথ্য থাকে, তবে এর শব্দার্থকগুলি একটি উপযুক্ত ইউআরআই তৈরি করতে অনুসরণ করা উচিত। তবে, যদি সেই শব্দার্থকগুলি পূর্বনির্ধারিত না হয় তবে ইউআরআই স্পেসিফিকেশনটিতে বলা হয়েছে যে টুকরা শনাক্তকারীগুলির শব্দার্থবিজ্ঞানগুলি নিয়ন্ত্রণহীন এবং পরিবর্তে সার্ভার দ্বারা সংজ্ঞায়িত করা হয়েছে, এই ব্যবহারকে বৈধ করে তুলবে।
3) আপনার সংস্থানটিতে "ফিল্টারিং" ছাড়াও কোয়েরি স্ট্রিংগুলি আসলে কী জন্য ব্যবহৃত হয়? আপনি যদি প্রথম পদ্ধতির সাথে যান তবে ফিল্টার প্যারামিটারটি ক্যোরি স্ট্রিং প্যারামিটারের পরিবর্তে ইউআরআইতে একটি প্যাথ প্যারামিটার হিসাবে এম্বেড করা থাকে।
আমি বিশ্বাস করি যে ইতিমধ্যে আমি এটিকে পুরোপুরি মেরে ফেলেছি, তবে ক্যোয়ারী স্ট্রিংগুলি "ফিল্টারিং" সংস্থানগুলির জন্য নয়। এগুলি হায়ারার্কিকাল ডেটা থেকে আপনার সংস্থান চিহ্নিত করার জন্য । আপনি যদি যান এবং আপনার পথের সাথে আপনার শ্রেণিবিন্যাসটি ছড়িয়ে দিয়ে থাকেন
/person/{id}/children/
এবং আপনি কোনও নির্দিষ্ট শিশু বা একটি নির্দিষ্ট শিশুদের চিহ্নিত করতে চান , আপনি এমন কিছু বৈশিষ্ট্য ব্যবহার করবেন যা আপনি সনাক্ত করছেন এমন সেটটিতে প্রযোজ্য এবং এটি কোয়েরির মধ্যে অন্তর্ভুক্ত করবেন।