কীভাবে একটি ভাল এপিআই তৈরি করবেন: সম্পর্ক এবং শেষের দিকগুলি

প্রথম ব্লগ পোস্টে আমরা কীভাবে একটি ভাল এপিআই তৈরি করতে হবে সে সম্পর্কে লিখেছিলাম। এখন আমরা পরবর্তী পদক্ষেপ নিই এবং সম্পর্ক এবং পয়েন্টগুলি নিয়ে কথা বলি।

API এ রিসোর্সের সম্পর্ক

সংস্থানগুলির মধ্যে মূলত তিন ধরণের সম্পর্ক রয়েছে:

  • এক এক
  • একটি খুব অনেক
  • অনেক বেশি

এক এক

এই ক্ষেত্রে, একটি সংস্থান বলতে কেবল একটি সংস্থানকে বোঝায়। ডাটাবেস আর্কিটেকচারে এর অর্থ হ'ল এক টেবিলের একটি সারি কেবল অন্য টেবিলের একটি সারির সাথে যুক্ত হতে পারে এবং বিপরীতে।

এই সম্পর্কের উদাহরণগুলি হ'ল:

  • জমি একটি রাজধানী আছে
  • খেলোয়াড়ের একটি দল আছে
  • ব্যবহারকারীর একটি সেল ফোন রয়েছে

ডুমুর। 1. এক এক এবং অনেক সম্পর্ক

সাধারণভাবে, বড় টেবিলের এক-একের সম্পর্কের ক্ষেত্রে টেবিলগুলি একসাথে আঠালো করা যায়।

একটি খুব অনেক

সম্পর্কের ধরণ যা দুটি সংস্থান A এবং B এর মধ্যে সম্পর্ককে বোঝায়, যার মধ্যে সম্পদ A, B এর অনেক উপাদানকে যুক্ত করা হয়, তবে উত্স B কেবলমাত্র A এর একটি উপাদানের সাথে যুক্ত, ডাটাবেসের শর্তে, এর অর্থ সম্পদ A অনেকগুলি সারিতে যুক্ত রয়েছে is রিসোর্স বিতে, তবে রিসোর্স বি থেকে রিসোর্স এ থেকে এক সারি রয়েছে

  • মায়ের অনেক সন্তান রয়েছে
  • নিয়োগকর্তার অনেক কর্মচারী রয়েছে
  • দলে অনেক খেলোয়াড় রয়েছে

আমরা বলতে পারি যে এক থেকে একাধিক মডেলের সর্বদা পিতা-সন্তানের (শিশু) মডেল থাকে যেখানে কোনও সংস্থান থেকে আসা একটি উপাদানের অনেক অধীনস্ত সংস্থান উপাদান থাকে। এক থেকে একাধিক মডেলে, একসাথে থাকা টেবিলগুলিকে আঠালো করা সম্ভব নয়

অনেক বেশি

যে রিলেশনটিতে একটি রিসোর্স উপাদানটি অনেক উপাদানের সাথে যুক্ত হয় (অন্য সংস্থায়) এবং বিপরীতে। একটি ভাল উদাহরণ হবে চলচ্চিত্র এবং বিভাগগুলির মধ্যে সম্পর্ক।

ছায়াছবি অনেক বিভাগের অন্তর্ভুক্ত হতে পারে এবং বিভাগে অনেকগুলি চলচ্চিত্র থাকতে পারে। রিলেশনশিপ ডাটাবেস ম্যানেজমেন্ট সিস্টেমে, এই ধরণের সম্পর্কগুলি পাইভট টেবিলগুলি ব্যবহার করে প্রয়োগ করা হয়।

ডুমুর। 2. ডাটাবেস কাঠামো

আর একটি সাধারণ সম্পর্ক হল ব্যবহারকারী এবং ভূমিকাগুলির মধ্যে সম্পর্ক relationship যার ব্যবহারকারীর অনেক ভূমিকা থাকতে পারে এবং ভূমিকাতে অনেক ব্যবহারকারী থাকতে পারে।

আমাদের এপিআই প্রকল্পের উদাহরণ

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

চিত্র 3. ব্যবহারকারী এবং পোস্টের মধ্যে সম্পর্ক

ছবি থেকে আপনি সহজেই ব্যবহারকারী এবং পোস্টের মধ্যে নির্ভরতা দেখতে পাবেন। ব্যবহারকারীদের অনেকগুলি পোস্ট থাকবে এবং একটি একক পোস্ট কেবলমাত্র কোনও ব্যবহারকারীর অন্তর্ভুক্ত।

চিত্র 4. মন্তব্য করার পরে সম্পর্ক

একইভাবে, "পোস্টস" সংস্থানটিতে অনেকগুলি মন্তব্য থাকতে পারে, তবে "মন্তব্য" কেবল একটি পোস্টের অন্তর্ভুক্ত থাকতে পারে।

সম্পর্কের মাধ্যমে অনেক আছে

একটি বিশেষ ধরণের সম্পর্ক রয়েছে যেখানে কোনও সংস্থান তৃতীয় সংস্থার মাধ্যমে দূরবর্তী সংস্থার সাথে সম্পর্কিত।

চিত্র 5. ব্যবহারকারী এবং মন্তব্যগুলির মধ্যে সম্পর্ক

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

এখন যেহেতু আমরা আমাদের API এর মেরুদণ্ডকে সংজ্ঞায়িত করেছি, যেহেতু API গুলি ডেটা কেন্দ্র রয়েছে, তাই কোড শুরু করার আগে তাদের মধ্যে সংস্থানসমূহ এবং সম্পর্কের সংজ্ঞা দেওয়া সমালোচনা।

ব্যবহারিক অংশ

এখন আমরা লারাভেলে এটি পুনরাবৃত্তি করব। যেহেতু সংস্থানটি একটি মডেল, তাই আমরা প্রথমে অ্যাপ্লিকেশন ডিরেক্টরিতে একটি ডাটাবেস কাঠামো এবং তারপরে একটি মডেল ফোল্ডার তৈরি করি। তারপরে আমরা তৈরি ফোল্ডারে ব্যবহারকারী, পোস্ট এবং মন্তব্য মডেল তৈরি করি।

তিনটি ডাটাবেস টেবিল থাকবে: ব্যবহারকারী, পোস্ট, মন্তব্য। মাইগ্রেশন তৈরির সহজ উপায় হ'ল কারিগর কমান্ড সহ:

পিএইচপি কারিগর তৈরি করুন: মাইগ্রেশন ক্রিয়ে_উইজারস_ট্যাবল

অভিবাসনগুলি দেখতে এইরকম হওয়া উচিত:

  • ব্যবহারকারীর টেবিল স্থানান্তর
ক্রিয়েটইউজারসেটেবল ক্লাস মাইগ্রেশন {পাবলিক ফাংশনকে () {স্কিমা :: তৈরি করুন ('ব্যবহারকারী', ফাংশন (ব্লুপ্রিন্ট $ টেবিল) {$ টেবিল-> ইনক্রিমেন্ট ('আইডি'); $ টেবিল-> স্ট্রিং ('ইমেল') -> অনন্য (); $ টেবিল-> স্ট্রিং ('পাসওয়ার্ড');}); ) () {স্কিমা :: ড্রপ ('ব্যবহারকারী') থেকে সর্বসাধারণের কার্য; }}
  • পোস্ট টেবিলের স্থানান্তর
ক্রিয়েটপয়েস্টটেবল ক্লাস মাইগ্রেশন {পাবলিক ফাংশনকে () {স্কিমা :: তৈরি করুন ('পোস্ট', ফাংশন (ব্লুপ্রিন্ট $ টেবিল) {$ টেবিল-> ইনক্রিমেন্ট ('আইডি'); $ টেবিল-> পাঠ্য ('পোস্ট') ; $ টেবিল-> পূর্ণসংখ্যা ('user_id') -> স্বাক্ষরযুক্ত (); $ টেবিল-> বিদেশী ('ব্যবহারকারী_আইডি') -> তথ্যসূত্র ('আইডি') -> ('ব্যবহারকারী') -> অনডিলিট ('ক্যাসকেড') );}); ) () {স্কিমা :: ড্রপ ('পোস্ট') থেকে সর্বজনীন কার্য; }}
  • মন্তব্য সারণির স্থানান্তর
ক্রিয়েটকমেন্টস টেবিল শ্রেণি স্থানান্তর {পাবলিক ফাংশনকে () {স্কিমা :: তৈরি করে ('মন্তব্য', ফাংশন (ব্লুপ্রিন্ট $ টেবিল) {$ টেবিল-> ইনক্রিমেন্ট ('আইডি'); $ টেবিল-> পাঠ্য ('মন্তব্য') ; $ টেবিল-> পূর্ণসংখ্যা ('পোস্ট_আইডি') -> স্বাক্ষরযুক্ত (); $ টেবিল-> বিদেশী ('পোস্ট_আইডি') -> রেফারেন্স ('আইডি') -> ('পোস্ট') -> অনডিলিট ('ক্যাসকেড') ) ;;}); ) () {স্কিমা :: ড্রপ ('মন্তব্য') থেকে সর্বসাধারণের কার্য; }}

আমরা নিম্নলিখিত কমান্ড সহ মাইগ্রেশন সক্রিয় করি:

পিএইচপি কারিগরদের স্থানান্তরিত করুন

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

চিত্র 6. লারাভেল ফোল্ডার কাঠামো

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

"অটোলোড": class "ক্লাসম্যাপ": ["ডাটাবেস"], "পিএসআর -4": {"অ্যাপ \\": "অ্যাপ / /", "মডেল \\": "অ্যাপ / মডেল"}},

উপরে বর্ণিত হিসাবে এখন আমরা মডেলগুলি তৈরি করতে এবং তাদের মধ্যে সম্পর্ক নির্ধারণ করতে প্রস্তুত ready আমরা এক বা একাধিক সম্পর্ক পরিচালনা করার জন্য এলওভার্সের হ্যাশম্যানি () পদ্ধতিটি ব্যবহার করি, আমরা বিপরীত সম্পর্কের জন্য (অনেকের কাছে) ও অবশেষে হ্যাশম্যানিথ্রু () পদ্ধতির জন্য ব্যবহারকারীর (পদ্ধতি) ব্যবহার করি (ব্যবহারকারী - মন্তব্য) , পদ্ধতি। আমাদের কেবলমাত্র কাজটিই হ'ল মডেলটি সংজ্ঞায়িত করা এবং বাকী ম্যাজিক বাকিটি করবে Your আপনার মডেলগুলি দেখতে এমন হওয়া উচিত:

  • ব্যবহারকারী মডেল
নেমস্পেস মডেল;
আলোকিত \ ডাটাবেস \ স্বতন্ত্র \ মডেল ব্যবহার করুন।
বর্গ ব্যবহারকারী মডেল প্রসারিত {
সুরক্ষিত $ টেবিল = 'ব্যবহারকারী';
পাবলিক ফাংশন পোস্ট () {রিটার্ন; এটি-> রয়েছে অনেক ('\ মডেল \ পোস্ট', 'ব্যবহারকারী_আইডি', 'আইডি'); }
সর্বজনীন বৈশিষ্ট্য মন্তব্যসমূহ () {রিটার্ন $ এটি-> হ'ল ম্যানিথ্রো ('\ মডেলগুলি \ মন্তব্য', '\ মডেলগুলি \ পোস্ট', 'ব্যবহারকারীর আইডি', 'পোস্ট_আইডি'); }
}

ইলিউভার্টের হ্যাসম্যান্ট কমান্ডটিতে 3 টি আর্গুমেন্ট লাগে (কেবল প্রথমটি প্রয়োজনীয়) প্রথমটি সম্পর্কিত মডেল, দ্বিতীয়টি সম্পর্কিত মডেলের বিদেশী কী এবং তৃতীয়টি স্থানীয় কী (key) রয়েছে। তবে, হাসম্যানিথ্রু () কিছুটা জটিল। প্রথম যুক্তি হ'ল দূরবর্তী মডেল, যার জন্য আমরা সম্পর্কের সংজ্ঞা দিই। দ্বিতীয় যুক্তি হ'ল মধ্যবর্তী মডেল। তৃতীয়টি হল মধ্যবর্তী মডেলের (পোস্ট মডেল) বিদেশী কী foreign চতুর্থ যুক্তি মুছে ফেলা মডেলটির জন্য বিদেশী কী। মন্তব্য মডেল)।

  • অবদানের মডেল
নেমস্পেস মডেল;
আলোকিত \ ডাটাবেস \ স্বতন্ত্র \ মডেল ব্যবহার করুন।
ক্লাস পোস্ট মডেল প্রসারিত {
সুরক্ষিত $ টেবিল = 'পোস্ট';
পাবলিক ফাংশন পোস্ট () {$ এটি-> রয়েছে অনেক ('\ মডেল \ মন্তব্য', 'পোস্ট_আইডি', 'আইডি'); }
পাবলিক ফাংশন ব্যবহারকারী () {$ এটি-> টিলে ('\ মডেলগুলি \ ব্যবহারকারী', 'ব্যবহারকারীর আইডি', 'আইডি'); }
}

এক্ষেত্রে আমাদেরও একাধিক টু-ওয়ান রিলেশনটি টো () পদ্ধতি দ্বারা প্রতিনিধিত্ব করা হয়। তিনটি প্যারামিটার ব্যবহার করা হয়: প্রথমত, সম্পর্কিত মডেল, দ্বিতীয়, বিদেশী কী এবং তৃতীয়টি, পিতামাতার মডেলের স্থানীয় কী (ব্যবহারকারী)।

  • মন্তব্য মডেল
নেমস্পেস মডেল;
আলোকিত \ ডাটাবেস \ স্বতন্ত্র \ মডেল ব্যবহার করুন।
বর্গ মন্তব্য মডেল প্রসারিত {
সুরক্ষিত $ টেবিল = 'মন্তব্য';
সর্বজনীন ইভেন্ট পোস্ট () {$ এটি-> টিলে ('\ মডেলগুলি \ পোস্ট', 'পোস্ট_আইডি', 'আইডি'); }
}

আগের উদাহরণগুলির মতো Similar লারাভেলের সম্পর্ক সম্পর্কে আরও তথ্যের জন্য লারাভেল ডকুমেন্টেশন দেখুন।

এপিআই শেষ পয়েন্টগুলি সংজ্ঞায়িত করুন

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

ব্যবহারকারী মডেল

শেষ দুটি কলাম হ'ল এই শেষ পয়েন্টটি প্রক্রিয়া করে এমন নিয়ামকের পদ্ধতিগুলির নাম। যেমন আপনি দেখতে পাচ্ছেন, নামকরণের উদাহরণগুলি খুব স্বজ্ঞাত এবং একটি সামঞ্জস্যপূর্ণ প্যাটার্ন রয়েছে।

অবদানের মডেল

পোস্ট মডেলটিতে জিনিসগুলি কিছুটা আলাদা। যেহেতু মেলটি ব্যবহারকারীর মডেলের অন্তর্গত, তাই কিছু শেষ পয়েন্ট কেবলমাত্র ব্যবহারকারী মডেলের মাধ্যমে অ্যাক্সেস করা যায়। এই শেষ পয়েন্টগুলি ইউআরএল (পোষ্ট / ব্যবহারকারী / {আইডি} / পোস্ট, পুট / ব্যবহারকারী / {আইডি} / পোস্ট / {পোস্ট আইডি}) এর বেস নোড দিয়ে শুরু হয়।

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

মন্তব্য মডেল

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