রেস্ট স্পেস (আপনি যে স্তরের সাথে যেতে চান) ডেটাবেস অ্যাক্সেস হিসাবে ডিজাইন করা হয়নি। এটি এপিআই অ্যাক্সেসে প্রমিতকরণ আনার চেষ্টা করছে। উল্লিখিত এসকিউএল কনভেনশনগুলি (আপনি সেগুলি ব্যবহার করতে চান বা না চান) এপিআই অ্যাক্সেসকে সামনে রেখে ডিজাইন করা হয়নি। তারা এসকিউএল কোয়েরি লেখার জন্য।
সুতরাং এখানে আনপ্যাক করার বিষয়টি হ'ল ধারণাগত বোঝা যা কোনও এপিআই সরাসরি ডাটাবেসে মানচিত্র করে। আমরা এটিকে কমপক্ষে ২০০৯ সাল পর্যন্ত একটি এন্টি-প্যাটার্ন হিসাবে বর্ণনা করতে পারি ।
প্রধান কারণ এটি খারাপ? কোড "কীভাবে এই অপারেশনটি আমার ডেটাগুলিকে প্রভাবিত করে?" ক্লায়েন্ট কোড হয়ে যায় ।
এটিতে এপিআইতে বেশ কয়েকটি ভয়ঙ্কর প্রভাব রয়েছে। (সম্পূর্ণ তালিকা নয়)
এটি API এর সাথে সংহতকরণকে শক্ত করে তোলে
আমি এই জাতীয় কিছু হিসাবে নথিভুক্ত নতুন ব্যবহারকারী তৈরি করার পদক্ষেপগুলি কল্পনা করি:
POST /users { .. }
POST /usersettings { .. }
কিছু ডিফল্ট মান সহ
POST /confirmemails { .. }
তবে আপনি কীভাবে পদক্ষেপ # 2 এর ব্যর্থতা পরিচালনা করবেন? আপনার API এর অন্যান্য ক্লায়েন্টদের কাছে এই একই হ্যান্ডলিং লজিকটি কপি-পাস্তা কতবার হয়েছে?
ক্লায়েন্ট থেকে একক ক্রিয়াকলাপ হিসাবে আরম্ভ করার সময় এই ডেটা অপারেশনগুলি প্রায়শই সার্ভারের দিকে ক্রমগুলি সহজ হয়। যেমন POST /newusersetup
। ডিবিএগুলি এটি একটি সঞ্চিত প্রক্রিয়া হিসাবে স্বীকৃতি দিতে পারে তবে এপিআই অপারেশনটির প্রভাব কেবলমাত্র ডাটাবেসের বাইরেও থাকতে পারে।
এপিআই সুরক্ষিত হতাশার একটি কালো গর্ত হয়ে ওঠে
ধরা যাক আপনাকে দুটি ব্যবহারকারীর অ্যাকাউন্ট একত্রীকরণ করতে হবে।
GET /users/1
PUT /users/2 { .. }
DELETE /users/1
আপনি ব্যবহারকারীকে মোছার অনুমতি না দেওয়ার সাথে সাথে মার্জ বৈশিষ্ট্যটির অনুমতি দেওয়ার জন্য কোনও ব্যবহারকারীর অনুমতি সেটআপ করতে যাচ্ছেন? কোনও ব্যবহারকারীকে মুছে ফেলা কি এমনকি DELETE /users/1
যখন /usersettings
উপস্থিত থাকে তখনও ন্যায্য প্রতিনিধিত্ব করে ?
এপিআই অপারেশনগুলিকে উচ্চতর- (ডাটাবেসের তুলনায়) -মানের অপারেশন হিসাবে দেখা উচিত যা সিস্টেমে একাধিক পরিবর্তন হতে পারে।
রক্ষণাবেক্ষণ শক্ত হয়ে যায়
... কারণ আপনার ক্লায়েন্টরা আপনার ডাটাবেস কাঠামোর উপর নির্ভর করে।
এই দৃশ্যের সাথে আমার অভিজ্ঞতার ভিত্তিতে:
- আপনি বিদ্যমান সারণী / কলামগুলির নাম পরিবর্তন করতে বা সরাতে পারবেন না। এমনকি যখন তাদের ফাংশনের জন্য তাদের ভুল নাম দেওয়া হয়েছে বা ব্যবহার করা হয় না তখনও। ক্লায়েন্টরা ভেঙে পড়বে।
- নতুন বৈশিষ্ট্যগুলি বিদ্যমান ডেটা স্ট্রাকচারগুলিকে পরিবর্তন করতে পারে না, সুতরাং এটির বৈশিষ্ট্যগুলির সাথে সামগ্রিকভাবে সম্পর্কিত হলেও এর ডেটা এবং কার্যকারিতা প্রায়শই কৃত্রিমভাবে পৃথক করা হয়।
- কোড বেস ধীরে ধীরে টুকরো টুকরো টুকরো টুকরো টুকরো করা, বিভ্রান্তিকর নাম এবং বাম-ওভার ব্যাগেজগুলির কারণে বুঝতে অসুবিধা হয় যা নিরাপদে মুছে ফেলা যায় না।
- তুচ্ছ সব পরিবর্তন ক্রমশ ঝুঁকিপূর্ণ এবং সময় সাপেক্ষ হয়ে ওঠে।
- সিস্টেম স্থবির হয়ে যায় এবং শেষ পর্যন্ত প্রতিস্থাপন করা হয়।
আপনার ক্লায়েন্টদের কাছে সরাসরি আপনার ডাটাবেস কাঠামোটি উন্মোচন করবেন না ... বিশেষত ক্লায়েন্টগুলির উপরে আপনার উন্নয়ন নিয়ন্ত্রণ নেই। কেবল বৈধ ক্রিয়াকলাপগুলিতে ক্লায়েন্টকে সংকুচিত করতে একটি API ব্যবহার করুন।
সুতরাং আপনি যদি সরাসরি কোনও ডাটাবেসে কোনও ইন্টারফেস হিসাবে কোনও এপিআই ব্যবহার করেন তবে বহুবচন আপনার উদ্বেগের মধ্যে সবচেয়ে কম। থ্রো-অ্যাও পরীক্ষা ব্যতীত অন্যদের জন্য, আমি উচ্চতর স্তরের ক্রিয়াকলাপগুলি নির্ধারণ করতে কিছু সময় ব্যয় করার পরামর্শ দেব যা এপিআই প্রতিনিধিত্ব করবে। এবং আপনি যখন সেভাবে দেখেন, বহুবচনযুক্ত এপিআই সত্তার নাম এবং একক এসকিউএল সত্তার নামগুলির মধ্যে কোনও বিরোধ নেই। তারা বিভিন্ন কারণে সেখানে আছে।