কোনও শিশু অবজেক্ট পোস্ট করার জন্য এবং সমস্ত পিতামাতার সমস্ত সন্তান পাওয়ার জন্য এপিআই এন্ডপয়েন্টগুলি কীভাবে ডিজাইন করবেন?


12

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

/clients/{client_id}/reports/{report_id}

এক ক্লায়েন্টের সমস্ত প্রতিবেদনের ক্ষেত্রে এনপয়েন্টটি আশা করা হচ্ছে:

/clients/{client_id}/reports

তবে কীভাবে সমস্ত ক্লায়েন্টের সমস্ত প্রতিবেদনগুলি এপিআইকে ধারাবাহিকভাবে এবং ভালভাবে ডিজাইনে রাখার জন্য শেষ পয়েন্ট দেখতে হবে।

আমার পন্থা:

  1. (আমি এটি কিছু গুগল এপিতে দেখেছি) এর পরিবর্তে "-" ব্যবহার করুন এবং "সমস্ত" হিসাবে পার্স করুন:

/clients/-/reports

এটি শেষ পয়েন্ট ফর্ম্যাটটিকে একই রাখে তবে কিছুটা অযৌক্তিক দেখায়, এমন কোনও আরএফসি খুঁজে পাবে না যা এইভাবে প্রস্তাব দেয়।

  1. সমস্ত প্রতিবেদনের জন্য একটি পৃথক শেষ পয়েন্ট করুন:

/reports

তবে ক্লায়েন্টের প্রতিবেদন পেতে এটি এখনও রয়েছে:

/clients/{client_id}/reports

  1. রিফ্যাক্টর "ক্লায়েন্ট" পিতামাতাকে নয়, কেবল একটি ফিল্টার প্যারামিটার তৈরি করার জন্য সমাপ্তি:

/reports?client={client_id} - এক ক্লায়েন্টের রিপোর্ট

/reports - সমস্ত ক্লায়েন্টের রিপোর্ট

নির্দিষ্ট ক্লায়েন্টের জন্য প্রতিবেদন পোস্ট করার জন্য একটি নতুন এন্ডপয়েন্ট যুক্ত করার ক্ষেত্রে এটি কুরুচিপূর্ণ দেখাতে পারে, কারণ এটি URL- এ একটি প্যারামিটারের সাথে পোস্ট-অনুরোধ হবে।

ধারণা আছে কি অন্য কোন পরামর্শ আছে?


2
আপনার আগ্রহী প্রশ্ন
লাইভ

উত্তর:


3

তবে কীভাবে সমস্ত ক্লায়েন্টের সমস্ত প্রতিবেদনগুলি এপিআইকে ধারাবাহিকভাবে এবং ভালভাবে ডিজাইনে রাখার জন্য শেষ পয়েন্ট দেখতে হবে।

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

সুতরাং এক্সপ্রেশন থেকে তিনটি বিকল্প পরীক্ষা করুন।

# 1 "-" স্বরলিপি

এটি একটি উজ্জ্বল ধারণা। এটা আমাদের অবস্থা প্রকাশ করার অনুমতি দেয় সব reportsযে অন্তর্গতclients । এটি "ক্যোয়ারী" কে নির্দিষ্ট প্রতিবেদনের ( clientsসীমানার মধ্যে অবস্থিত ) সংকীর্ণ করছে ।

এটি সার্বভৌম শ্রেণিবিন্যাসের (অন্তর্নিহিত) ধারণাটি রাখে, তাই যদি reportsবিভিন্ন স্থানে পাওয়া যায় তবে এই স্বরলিপিটি একটি বিরাট চুক্তি করে। উদাহরণ স্বরূপ:

  • সমস্ত প্রতিবেদন যা ক্লায়েন্টদের অন্তর্ভুক্ত /clients/-/reports
  • বিভাগগুলির সাথে সম্পর্কিত সমস্ত রিপোর্ট /departments/-/reports
  • সমস্ত রিপোর্ট যা কর্মীদের অন্তর্ভুক্ত /employees/-/reports

যাইহোক, সিস্টেমে সমস্ত উপলভ্য প্রতিবেদন পুনরুদ্ধার করার জন্য, স্তরক্রম রাখা পরবর্তী বিকল্পের চেয়ে কোনও মূল্যবান সুবিধা প্রদান করে না।

# 2 বিভিন্ন ইউআরআই

সমস্ত উপলভ্য প্রতিবেদন পুনরুদ্ধার করার সময় যদি আমাদের সীমানা / প্রসঙ্গ / শ্রেণিবদ্ধতা প্রকাশ করার প্রয়োজন না হয় তবে এই পদ্ধতির বিষয়টি আমার কাছে আরও যুক্তিযুক্ত বলে মনে হয়।

নতুন ইউআরআই ( /reports) প্রতিবেদন পরিচালনার সম্ভাবনাও উন্মুক্ত করে । তবে, আমরা যদি এটির প্রয়োজনীয়তা না মনে করি তবে এটি একটি সম্পূর্ণ RESTful সমর্থন সরবরাহ করার দরকার নেই। উদাহরণস্বরূপ, আপনি বলেছেন Make a separate endpoint just for all the reports। এটি দুর্দান্ত, আপনাকে অনুসন্ধানের জন্য কেবলমাত্র প্রয়োগ করতে হবে GETএবং সম্ভবত কিছু ফিল্টার রয়েছে এবং এটিই।

আপনি এখনও এটি করতে পারে মনে রাখবেন /reports?client={client_id}। একই সংস্থানটির জন্য বিভিন্ন ইউআরআই থাকা ভাল। আমি পড়ে কিছু নিবন্ধ এই দৃ়তা বলা হবে

# 3 শ্রেণিবিন্যাস ফিরিয়ে দেওয়া হচ্ছে

আমি এই অনুভূতিটি আপনার প্রত্যাশাগুলির সাথে মেলে না এমন অনুভূতি পেয়েছি। প্লাস, আমি মনে করি, এটি শেষ পর্যন্ত আপনাকে সূচনার পয়েন্টে নিয়ে আসবে।

উপসংহার

মনে রাখবেন যে # 1 এবং # 2 পারস্পরিক একচেটিয়া নয়। আমরা উভয় বাস্তবায়ন করতে পারেন। আসল পরিস্থিতি দেওয়া এবং ওপি'র প্রাঙ্গনে অনুযায়ী, আমি কেবল # 2 প্রয়োগ করব।


1: এটি /clients/-/reportsআমার অনুমানের সমান


0

গুগলের এপিআই ডিজাইনের ধরণগুলি এই দৃশ্যে '-' ব্যবহার করার পরামর্শ দেয়।

GET /clients/-/reports

সূত্র:

https://cloud.google.com/apis/design/design_patterns#list_sub-collections


2
সর্বশক্তিমান গুগলের সাথে আমার একমত না হওয়া উচিত তবে আমি মনে করি আমি এর মতো কিছু পছন্দ করব /client/{client_id}/report/{report_id}এবং/clients/report/{report_id}
রবার্ট হার্ভে

2
@RobertHarvey কেন শুধু /reports?
লাইভ

@ লাইভ: এটি সমস্ত প্রতিবেদন বোঝায়। আপনার পৃষ্ঠা রিফ্রেশ আমি একটি নিনজা সম্পাদনা করেছি।
রবার্ট হার্ভে

@ রবার্ট হার্ভে আমার অর্থ, কেন 2 টি আলাদা প্রান্ত নয় /clients...এবং /reports
লাইভ

1
@ লাইভ: ঠিক আছে, তবে এটি কেবল প্রশ্ন উত্থাপন করে "অনুরোধের সংস্থায় আমার কোন পরামিতি রাখা উচিত?"
রবার্ট হার্ভে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.