আপনার এপিআই হিসাবে আপনার ব্যাক-এন্ড লিখতে হবে?


322

আমাদের এমভিসি অ্যাপ্লিকেশন সম্পর্কে আমি আজ একটি উত্তপ্ত আলোচনা করেছি। আমাদের এমভিসিতে লিখিত একটি ওয়েবসাইট রয়েছে ( এএসপি.এনইটি ), এবং এটি সাধারণত দৃশ্যে কিছু করার প্যাটার্ন অনুসরণ করে -> নিয়ামককে চাপুন -> নিয়ামক একটি মডেল তৈরি করে (কোনও ম্যানেজারকে ডেটা দেয়, মডেলটি বিল্ট করে নিয়ন্ত্রক পদ্ধতি নিজেই) -> মডেলটি দেখতে যায় -> ধুয়ে ফেলুন এবং পুনরাবৃত্তি করুন।

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

তিনি যে সমাধানটি এবং সর্বোত্তম অনুশীলন করেছিলেন তা হ'ল একটি API তৈরি করা এবং তারপরে আপনার API এর উপরে আপনার ওয়েবসাইট তৈরি করা এবং তারপরে একটি ডেস্কটপ অ্যাপ্লিকেশন, মোবাইল অ্যাপ্লিকেশন ইত্যাদি তৈরি করা খুব সহজ।

এটি বিভিন্ন কারণে আমার কাছে খারাপ ধারণা বলে মনে হচ্ছে।

যাইহোক আমি গুগল করে এমন কিছু খুঁজে পাচ্ছি না যা এই অনুশীলনটি নিয়ে আলোচনা করতে পারে। কারও কাছে উপকার, কনস, আপনার কেন করা উচিত, আপনার কেন বা আরও পড়া উচিত নয় সে সম্পর্কে কোনও তথ্য আছে?

কিছু কারণ হিসাবে আমি মনে করি এটি একটি খারাপ ধারণা:

  • আপনার ব্যাকএন্ডটি কোনও এপিআই বন্ধ করে দেওয়ার পক্ষে এটি বেশ বিমূর্ত। আপনি এটিকে খুব নমনীয় করে তোলার চেষ্টা করছেন যা এটি নিয়ন্ত্রণহীন গোলযোগ তৈরি করবে।

  • ভূমিকা এবং প্রমাণীকরণের মতো এমভিসিতে অন্তর্নির্মিত সমস্ত জিনিসই অকেজো মনে হয়। উদাহরণস্বরূপ, [অনুমোদন] বৈশিষ্ট্য এবং সুরক্ষা; আপনাকে নিজের রোল করতে হবে।

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

  • আপনার প্রোগ্রামটি করবে এমন প্রতিটি একক ফাংশনের জন্য আপনাকে সম্পূর্ণ API কলগুলি লিখতে হবে। আপনি প্রয়োগ করতে চান এমন প্রতিটি পদ্ধতি একটি এপিআই থেকে চালানো দরকার। প্রতিটি ব্যবহারকারীর জন্য একটি গেট / আপডেট / মুছুন, পাশাপাশি একে অপরের ক্রিয়াকলাপের জন্য একটি বৈকল্পিক যেমন ব্যবহারকারীর নাম আপডেট করুন, কোনও গোষ্ঠীতে ব্যবহারকারী যুক্ত করা ইত্যাদি etc. ইত্যাদি and প্রতিটিই একটি পৃথক এপিআই কল হবে।

  • আপনি যখন এপিআইতে আসেন তখন ইন্টারফেস এবং বিমূর্ত ক্লাসের মতো সমস্ত ধরণের সরঞ্জাম হারাবেন। ইন্টারফেসের জন্য ডাব্লুসিএফের মতো স্টাফের খুব ধ্রুব সমর্থন রয়েছে।

  • আপনার কাছে এমন একটি পদ্ধতি রয়েছে যা ব্যবহারকারী তৈরি করে বা কোনও কার্য সম্পাদন করে। আপনি যদি 50 জন ব্যবহারকারী তৈরি করতে চান তবে আপনি কেবল 50 বার এটি কল করতে পারেন। আপনি যখন এপিআই হিসাবে এই পদ্ধতিটি করার সিদ্ধান্ত নেন আপনার স্থানীয় ওয়েবসার্ভার নামক পাইপগুলি এর সাথে সংযুক্ত করতে পারে এবং কোনও সমস্যা নেই - আপনার ডেস্কটপ ক্লায়েন্ট এটিতেও আঘাত করতে পারে, তবে হঠাৎ আপনার প্রচুর ব্যবহারকারী তৈরির ফলে ইন্টারনেটটিতে 50 বার API এ হাতুড়ি জড়িত থাকবে ভাল না। সুতরাং আপনাকে একটি বাল্ক পদ্ধতি তৈরি করতে হবে, তবে সত্যই আপনি কেবল এটি ডেস্কটপ ক্লায়েন্টদের জন্য তৈরি করছেন। এইভাবে, আপনি ক) আপনার এপিআই এর সাথে কী সংহত হচ্ছে তার ভিত্তিতে পরিবর্তন করুন এবং আপনি কেবল এটির সাথে সরাসরি সংহত করতে পারবেন না, খ) অতিরিক্ত ফাংশন তৈরি করতে আরও অনেক বেশি কাজ করুন do

  • YAGNI । আপনি যদি না নির্দিষ্টভাবে দুটি অভিন্ন কার্যকারী অ্যাপ্লিকেশন, একটি ওয়েব এবং একটি উইন্ডোজ অ্যাপ্লিকেশন উদাহরণের জন্য লেখার পরিকল্পনা না করেন তবে এটি একটি বিশাল পরিমাণের অতিরিক্ত উন্নয়ন কাজ।

  • আপনি শেষ-শেষের দিকে যেতে না পারলে ডিবাগিং আরও শক্ত।

  • প্রচুর স্বতন্ত্র অপারেশনগুলির জন্য প্রচুর পিছনে প্রয়োজন হবে, উদাহরণস্বরূপ কিছু কোড বর্তমান ব্যবহারকারী পেতে পারে, ব্যবহারকারী প্রশাসকের ভূমিকাতে রয়েছে কিনা তা পরীক্ষা করে, ব্যবহারকারীকে যে কোম্পানির মালিকানাধীন করে তোলে, অন্য সদস্যদের একটি তালিকা পেতে পারে, তাদের সমস্ত প্রেরণ করে একটি ইমেল. এর জন্য অনেকগুলি এপিআই কল প্রয়োজন হবে, বা একটি বিসপোক পদ্ধতিটি নির্দিষ্ট কাজটি আপনি চান তা লিখতে হবে, যেখানে এই স্পোক পদ্ধতির একমাত্র উপকারের গতি হবে তবে ক্ষতির দিকটি হবে জটিলতা lex

  • সম্ভবত আরও কিছু কারণ এগুলি আমার মাথার উপরের অংশে।

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


সম্পাদনা: কিছু দুর্দান্ত প্রতিক্রিয়া, এটি এখন কী বোঝায় তা ভাল ধারণা পেতে শুরু করে। সুতরাং আমার প্রশ্নটি প্রসারিত করার জন্য, আপনি কীভাবে এই এপিআই কাঠামোটি অনুসরণ করতে একটি এমভিসি অ্যাপ্লিকেশন গঠন করবেন?

উদাহরণস্বরূপ, আপনার একটি ওয়েবসাইট রয়েছে যা ব্যবহারকারীর সম্পর্কে তথ্য প্রদর্শন করে। এমভিসির আওতায় আপনার কাছে রয়েছে:

দেখুন - (সিএস) এইচটিএমএল পৃষ্ঠা যা একটি ইউজারভিউমোডেল কন্ট্রোলার প্রদর্শন করে - গেটউজার () কল করে এবং একটি ইউজারভিউমোডেল তৈরি করে যা এটি ভিউ ম্যানেজার শ্রেণিতে (আপনার API এর ধরণের) পাস করে যার একটি গেটউজার পদ্ধতি রয়েছে।

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

তাহলে আপনি কি প্রত্যেকটির জন্য একটি API লিখবেন, একটি ডাব্লুসিএফ ওয়েব পরিষেবা যার একটি পদ্ধতি গেটউজার () আছে এবং কোডটি return new UserManager().GetUser()কী করে ? এবং একটি এমভিসি 4 ওয়েব এপিআই পদ্ধতি যা একই জিনিস করে? আপনার এমভিসি নিয়ামক পদ্ধতিতে সরাসরি গেটউজারকে কল করা চালিয়ে যাওয়ার সময়?

অথবা আপনি কী সেই সমাধানটি বেছে নেবেন যা তিনটি (ওয়েব এপিআই আরইএসটি পরিষেবা) এর জন্য কাজ করবে এবং তার উপর সবকিছু তৈরি করবে, তাই তিনটি অ্যাপ্লিকেশনই এপিআই কল করে (এমভিসিগুলি, লোকাল মেশিনে)।

এবং এটি কি কেবল একটি তাত্ত্বিক নিখুঁত দৃশ্য? আমি এইভাবে বিকাশের ক্ষেত্রে বড় ওভারহেডগুলি দেখতে পাচ্ছি, বিশেষত যদি আপনাকে এমনভাবে বিকাশ করতে হয় যা আপনাকে বিশ্রামের উপায়ে অপারেশন করতে দেয়। আমি মনে করি এর উত্তরে জবাব দেওয়া হয়েছে some


সম্পাদনা 2: আরও স্টাফ পড়ার পরে, আমি নীচে একটি মন্তব্য রেখেছি যা আমি মনে করি এটি ব্যাখ্যা করতে পারে। প্রশ্নটি আমার মনে হয় এমন একটি কৌশল bit আপনি যদি আপনার ব্যাক-এন্ড লিখতে চান তবে একটি এআইপি আমাকে এই ভেবে বিভ্রান্ত করেছিল যে কোনও একক ওয়েবসার্চ হওয়া উচিত যা সবকিছু (এমভিসি অ্যাপ, ডেস্কটপ অ্যাপ, মোবাইল অ্যাপ্লিকেশন) স্টাফ করতে বলে do

আমি যে উপসংহারে এসেছি তা হ'ল আপনার ব্যবসায়ের যুক্তি স্তরটি সঠিকভাবে decoupled হয়েছে তা নিশ্চিত হওয়া উচিত। আমার কোডটি দেখে, আমি ইতিমধ্যে এটি করছি - নিয়ামক GetUser()কোনও পরিচালককে কল করবেন , তারপরে একটি ভিউ দিয়ে রেন্ডার করার জন্য এটি থেকে একটি ভিউ মডেল তৈরি করুন। সত্যিই তাই, ব্যবসা লজিক স্তর হল একটি API। আপনি যদি ডেস্কটপ অ্যাপ্লিকেশন থেকে যদিও এটি কল করতে চান তবে আপনাকে ডাব্লুসিএফ পরিষেবা হিসাবে কল করার সুবিধার্থে এমন কিছু লিখতে হবে। এমনকি GetUser()কোডটি রয়েছে এমন একটি ডাব্লুসিএফ পদ্ধতি থাকাও return MyBusinessLayer.GetUser()যথেষ্ট হবে। সুতরাং এপিআই হ'ল ব্যবসায়ের যুক্তি এবং ডাব্লুসিএফ / ওয়েব এপিআই ইত্যাদি কোডের বাইরের অ্যাপ্লিকেশনগুলিকে কল করার জন্য কেবল কোডের টাইটবিট।

সুতরাং কিছু ওভারহেড রয়েছে যার মধ্যে আপনার প্রয়োজন অনুসারে আপনাকে আপনার ব্যবসায়ের লজিক স্তরটি বিভিন্ন API এ আবদ্ধ করতে হবে এবং আপনার অন্যান্য অ্যাপ্লিকেশনগুলি করতে চান এমন প্রতিটি অপারেশনের জন্য আপনাকে একটি API পদ্ধতি লিখতে হবে, এবং আপনাকে আরও প্রয়োজন হবে প্রমাণীকরণ করার একটি উপায় বাছাই করুন, তবে বেশিরভাগ অংশের জন্য এটি একই same একটি পৃথক প্রকল্পে (শ্রেণি পাঠাগার) আপনার ব্যবসায়ের যুক্তি আটকে দিন এবং আপনার সম্ভবত কোনও সমস্যা হবে না!

আশা করি এই ব্যাখ্যাটি সঠিক। এটি তৈরি করা সমস্ত আলোচনা / মন্তব্যগুলির জন্য ধন্যবাদ।


25
আপনি কেন এটি খারাপ ধারণা বলে মনে করেন তার কারণগুলি প্রকাশ করতে পারেন? আজকাল আমাকে অবশ্যই স্বীকার করতে হবে যে এটি করার কোনও কারণ আমার নেই। এটি অন্যান্য সুবিধাগুলির মধ্যেও বিভিন্ন অ্যাপ্লিকেশনটিকে বিভিন্ন প্ল্যাটফর্মে আপনার পোর্টিংকে আরও সহজ করে তোলে এবং এমনকি আপনার ব্যাক-এন্ড কোডটি স্পর্শ না করেই ফ্রন্ট-এ একটি দুর্দান্ত নমনীয়তা দেয় ...
লরেন্ট এস

12
@ এসএলসি: আপনি যখন এপিআই বলবেন, তখন আপনার অর্থ কি কোনও এসওএপি বা আরএসইএস ইন্টারফেসের মতো একটি ওয়েব সার্ভিস এপিআই? কারণ আপনার উচিত ব্যাক-এন্ডকে একটি এপিআই তৈরি করা, তবে আপনার এটি কোনও ওয়েব পরিষেবা করা উচিত নয়।
জ্যাকবিবি

7
@ আইয়ান নিউজসন "একটি মোবাইল অ্যাপ্লিকেশন, উদাহরণস্বরূপ, তাদের বৈশিষ্ট্যগুলি কম রয়েছে" " মোবাইল অ্যাপ্লিকেশনগুলিকে দ্বিতীয় শ্রেণির নাগরিক হওয়া উচিত এমন কোনও দৃ reason় কারণ আমি কখনই শুনিনি ... (তবুও প্রত্যেকে এটিকে এটি করে বলে মনে হচ্ছে)
মাইকেল

3
@ ইয়াননিউসন সম্ভবত এটি তখন আমিই ... তবে আমি সর্বদা নিজেকে মোবাইলটিতে কিছু বা অন্য কিছু করতে না পেরে নিজেকে হ্যামস্ট্রং বলে মনে করি যেখানে আমি মোবাইলে খুব সামান্যই করি
মাইকেল

11
আপনি বলছেন YAGNI প্রযোজ্য, তবে আমার অভিজ্ঞতা অ্যাপ্লিকেশনগুলি হ'ল হয় প্রতি কয়েক বছর পর পর একটি UI পুনর্লিখন করে, বা প্রত্যেকে অভিযোগ করে যে তাদের একটি প্রয়োজন। অবশ্যই যদি আমরা আমাদের ব্যনিজিক যুক্তিটি না হারাই তবে খুব সুন্দর হবে কারণ একটি নতুন ফ্রন্ট এন্ড প্রযুক্তি এসেছে technology
কর্সিকা

উত্তর:


282

হ্যাঁ তুমি পারবে.

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

এই মুহুর্তে এটি জনপ্রিয় এমন একটি অঞ্চল হ'ল মাইক্রোসার্ভেসেসে । যেখানে ব্যাকএন্ডটি অনেকগুলি সামান্য (বা এমনকি বৃহত্তর) পরিষেবাগুলিতে বিভক্ত হয় যা প্রতিটি ক্লায়েন্ট সিস্টেম গ্রাস করে এমন একটি API সরবরাহ করে। আপনি যদি নিজের অ্যাপ্লিকেশনটিতে অনেকগুলি তৃতীয় পক্ষের ডেটা ব্যবহারের কথা কল্পনা করেন তবে আপনি বুঝতে পারেন যে আপনি ইতিমধ্যে এটি করছেন।

অন্য একটি সুবিধা হ'ল প্রতিটি পরিষেবাদির নির্মাণ ও রক্ষণাবেক্ষণ একটি ভিন্ন দলে দেওয়া যেতে পারে, তারা এতে এমন বৈশিষ্ট্য যুক্ত করতে পারে যা অন্য কোনও টিম উত্পাদনকারী পণ্যকে প্রভাবিত করে না। কেবলমাত্র যখন সেগুলি করা হয় এবং তাদের পরিষেবা প্রকাশ করা হয় আপনি কেবল সেগুলি সেগুলিকে গ্রাস করতে আপনার পণ্যগুলিতে বৈশিষ্ট্য যুক্ত করতে শুরু করেন। এটি বিকাশকে অনেক বেশি মসৃণ করতে পারে (যদিও সামগ্রিকভাবে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে কমিয়ে আনা হলেও আপনি উন্নত মানের এবং বোধগম্য হবেন)


সম্পাদনা: ঠিক আছে আমি আপনার সমস্যা দেখতে পাচ্ছি। আপনি এপিআইটিকে দূরবর্তী লাইব্রেরি হিসাবে ভাবেন। এটা না। পরিষেবাটি ডেটা সরবরাহকারী পরিষেবা হিসাবে বেশি ভাবেন। আপনি ডেটা পেতে পরিষেবাটি কল করুন এবং তারপরে স্থানীয়ভাবে সেই ডেটাতে অপারেশন করুন। কোনও ব্যবহারকারী লগইন হয়েছে কিনা তা নির্ধারণ করতে আপনি " GetUser" কল করে তারপরে 'logged on'মানটি দেখুন, উদাহরণস্বরূপ। ( অবশ্যই উদাহরণস্বরূপ ওয়াইএমএমভি )।

বাল্ক ব্যবহারকারী তৈরির জন্য আপনার উদাহরণটি কেবল অজুহাত তৈরি করছে - এখানে কোনও পার্থক্য নেই, আপনি একতরফা পদ্ধতিতে যা করতে পারতেন তা এখনও কোনও পরিষেবা আর্কিটেকচারে করা যেতে পারে (যেমন আপনি বাল্ক-তৈরিতে ব্যবহারকারীদের একটি অ্যারে পেরিয়েছেন, বা একটি একক তৈরি করতে You আপনি এখনও পরিষেবাগুলির সাথে ঠিক একই কাজ করতে পারেন)।

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

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

সুরক্ষা বাস্তবায়নের অতিরিক্ত কাজ করার মতো জিনিসগুলি ভাল জিনিস। বর্তমানে, আপনি যদি আপনার ওয়েবসাইটটিতে সমস্ত কোড বান্ডিল করেন, কোনও হ্যাকার যদি এতে অ্যাক্সেস অর্জন করে তবে ডিবি অন্তর্ভুক্ত রয়েছে। যদি আপনি এটিকে কোনও এপিআইতে বিভক্ত করেন তবে হ্যাকার আপনার কোডটি খুব কম করতে পারে যদি না তারা এপিআই স্তরটিও হ্যাক করে - যা তাদের পক্ষে অবিশ্বাস্যরকম কঠিন হবে (কখনই আক্রমণকারীরা সমস্ত ওয়েবসাইটের ব্যবহারকারীর বিশাল তালিকা বা সিসি বিবরণ অর্জন করতে পারে তা ভেবে দেখেছেন? কারণ) তারা ওএস বা ওয়েব সার্ভারটি হ্যাক করে এবং এটি ডিবিটির সাথে সরাসরি সংযোগ স্থাপন করে যেখানে তারা select * from usersসহজেই চালাতে পারে " )।

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

২ য় সম্পাদনা: বিষয়টির কয়েকটি লিঙ্ক (ওপির জন্য):

নোট করুন যে কোনও ওয়েবসাইটের প্রসঙ্গে এগুলি সম্পর্কে কথা বলার সময়, ওয়েব সার্ভারটি উপস্থাপনা স্তর হিসাবে বিবেচনা করা উচিত, কারণ এটি এমন ক্লায়েন্ট যা অন্যান্য স্তরগুলিকে কল করে এবং এটি ব্র্যান্ডের কাছে রেন্ডারিংয়ের জন্য প্রেরিত ইউআই ভিউগুলিও তৈরি করে। এটি একটি বিশাল বিষয়, এবং আপনার অ্যাপ্লিকেশনটি ডিজাইনের অনেকগুলি উপায় রয়েছে - ডেটা-কেন্দ্রিক বা ডোমেন-কেন্দ্রিক (আমি সাধারণত ডোমেন কেন্দ্রিককে 'বিশুদ্ধতর' বলে মনে করি, তবে ওয়াইএমএমভি ), তবে এটি সমস্তই একটি লজিক স্তরের সাথে সংযুক্ত থাকে between আপনার ক্লায়েন্ট এবং আপনার ডিবি। এটি এমভিসির মতো কিছুটা যদি আপনি মাঝারি, এপিআই, স্তরকে আপনার মডেলের সমতুল্য মনে করেন, কেবলমাত্র মডেলটি ডিবির জন্য একটি সাধারণ মোড়ক নয়, এটি আরও সমৃদ্ধ এবং আরও অনেক কিছু করতে পারে (যেমন 2 ডেটা উত্সের সামগ্রিক ডেটা, পোস্ট -আইপি ফিট করার জন্য ডেটা প্র্যাক্সেস করুন, ডেটা ক্যাশে করুন ইত্যাদি):


2
এটি কোনও আর্কিটেকচারের মহাকাশচারী দৃষ্টিকোণ থেকে হ্যাঁ? আমি পরিষেবার দ্বিতীয় দৃষ্টিকোণ থেকে আপনার 2 য় এবং 3 য় অনুচ্ছেদগুলি বুঝতে পারি, তবে আমরা গেট ইউজার, ক্রিয়েটউজার, ইসুসারলোগডইন এবং শত শত ক্ষুদ্র ফাংশনগুলির বিষয়ে কথা বলছি যা আগে কোডের একক লাইন এপিআই কলগুলিতে রূপান্তরিত হয়েছিল।
নিবল্বিপিগ

12
আপনি এটি কোনও ওয়েবসাইট হিসাবে লিখছেন তা কল্পনা করুন - এই সমস্ত ক্ষুদ্র কাজগুলি আপনি কল্পনা করার মতো ইন্টারেক্টিভ হতে পারে না, সুতরাং আপনার পৃষ্ঠাটি তৈরি করার সময় আপনাকে ডেটা পেতে এবং স্থানীয়ভাবে এটি ক্যাশে করতে হবে (অথবা সম্ভাব্যভাবে বাসি ডেটা হিসাবে এগুলি পাস করতে হবে) ক্লায়েন্ট, সিস্টেম হিসাবে উপযুক্ত)। অনেক কিছুর জন্য, আপনাকে নিজের নকশাকে "রিঅ্যাক্ট অন ডিমান্ড" থেকে "প্রত্যাশিত সামনের দিকে" পরিবর্তন করতে হবে তবে আপনার সিস্টেমের বেশিরভাগই এপিআই কল করবে। আপনার এপিআইটি কম দানাদার এবং আরও ডেটা কেন্দ্রিক হতে ডিজাইন করুন, সুতরাং ইসুসারলোগডঅন এপিআই কল হতে হবে না, আপনি একবার স্থানীয়ভাবে পরিদর্শন করার পরে আপনার কেবলমাত্র "গেট ইউজারডেটেলস" দরকার।
gbjbaanb

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

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

2
এটি ওয়েব সার্ভিস থেকে একই যুক্তি ব্যবহার করা সহজ করে তোলে। আমাদের দলগুলি সর্বদা মনে করে যে আমাদের কখনই করা উচিত নয় তার মধ্যে একটি ... এটি ইউনিট পরীক্ষাকেও সহজ করে তোলে।
PS2goat

87

আপনি সম্ভবত একটি API তৈরি এড়াতে পারবেন না । এমনকি যদি আপনি "কেবলমাত্র একটি ওয়েবসাইট" তৈরি করেন তবে এখনও এটির ব্যাকএন্ড থেকে কোনওভাবে তার ডেটা নেওয়া দরকার। তবে আপনি এটি করার সিদ্ধান্ত নেন, এটি আপনার ডি ফ্যাক্টো এপিআই।

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

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

আপনার ব্যাকএন্ডটি কোনও এপিআই বন্ধ করে দেওয়ার পক্ষে এটি বেশ বিমূর্ত। আপনি এটিকে খুব নমনীয় করে তোলার চেষ্টা করছেন যা এটি নিয়ন্ত্রণহীন গোলযোগ তৈরি করবে।

এটি আপনি কীভাবে করবেন তার উপর নির্ভর করে। হিসাবে জর্জ Pólya তার চমৎকার টেক্সট পয়েন্ট আউট কিভাবে এটা সমাধান করার জন্য , বারংবার "আরও সাধারণ সমস্যা সহজে সমাধান হতে পারে"। একে উদ্ভাবকের প্যারাডক্স বলে । প্রোগ্রামিংয়ের ক্ষেত্রে, এটি প্রায়শই উদ্বেগগুলি পৃথক করার মাধ্যমে কাজ করে: আপনার ব্যাকএন্ডকে ডেটা যে ফর্ম্যাটটি রাখে এবং নিয়ে যায় তার সাথে আর উদ্বিগ্ন হতে হবে না এবং তাই এর কোডটি আরও সহজ হতে পারে। আপনার ডেটা পার্সার এবং রেেন্ডারদের তাদের তৈরি করা ডেটার কী হবে তা নিয়ে উদ্বিগ্ন হওয়ার দরকার নেই, সুতরাং তারাও সহজ হতে পারে। কোডটি ভেঙে আরও পরিচালনাযোগ্য অংশগুলিতে এগুলি সব কাজ করে।

ভূমিকা এবং প্রমাণীকরণের মতো এমভিসিতে অন্তর্নির্মিত সমস্ত জিনিসই অকেজো মনে হয়। উদাহরণস্বরূপ, [অনুমোদন] বৈশিষ্ট্য এবং সুরক্ষা; আপনাকে নিজের রোল করতে হবে।

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

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

অথবা, আপনার সরঞ্জামগুলি শেখার প্রক্রিয়ায়, আপনি নিজেকে আবিষ্কার করতে পারেন যে সেগুলি যেমন রয়েছে তেমন কার্যকর, এবং প্রতিস্থাপনের প্রয়োজন নেই।

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

হ্যাঁ. এটা হচ্ছে তাই, যা করা উচিত.

আপনার প্রোগ্রামটি করবে এমন প্রতিটি একক ফাংশনের জন্য আপনাকে সম্পূর্ণ API কলগুলি লিখতে হবে। আপনি প্রয়োগ করতে চান এমন প্রতিটি পদ্ধতি একটি এপিআই থেকে চালানো দরকার। প্রতিটি ব্যবহারকারীর জন্য একটি গেট / আপডেট / মুছুন, পাশাপাশি একে অপরের ক্রিয়াকলাপের জন্য একটি বৈকল্পিক যেমন ব্যবহারকারীর নাম আপডেট করুন, কোনও গোষ্ঠীতে ব্যবহারকারী যুক্ত করা ইত্যাদি etc. ইত্যাদি and প্রতিটিই একটি পৃথক এপিআই কল হবে।

অগত্যা। এখানেই REST এর মতো আর্কিটেকচার কার্যকর হয় play আপনার অ্যাপ্লিকেশনটি যে অ্যাপ্লিকেশনগুলির সাথে কাজ করে এবং আপনি যে অপারেশনগুলিতে সেই সংস্থানগুলিতে প্রয়োগ করতে বোধগম্য তা সনাক্ত করে এবং তারপরে আপনি অন্যদের সম্পর্কে এতটা চিন্তা না করে এগুলি বাস্তবায়ন করেন

আপনি যখন এপিআইতে আসেন তখন ইন্টারফেস এবং বিমূর্ত ক্লাসের মতো সমস্ত ধরণের সরঞ্জাম হারাবেন। ইন্টারফেসের জন্য ডাব্লুসিএফ-এর মতো স্টাফের খুব দৃ ten় সমর্থন রয়েছে।

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

আপনার কাছে এমন একটি পদ্ধতি রয়েছে যা ব্যবহারকারী তৈরি করে বা কোনও কার্য সম্পাদন করে। আপনি যদি 50 জন ব্যবহারকারী তৈরি করতে চান তবে আপনি কেবল 50 বার এটি কল করতে পারেন। আপনি যখন এপিআই হিসাবে এই পদ্ধতিটি করার সিদ্ধান্ত নেন আপনার স্থানীয় ওয়েবসার্ভার নামক পাইপগুলি এর সাথে সংযুক্ত করতে পারে এবং কোনও সমস্যা নেই - আপনার ডেস্কটপ ক্লায়েন্ট এটিতেও আঘাত করতে পারে, তবে হঠাৎ আপনার প্রচুর ব্যবহারকারী তৈরির ফলে ইন্টারনেটটিতে 50 বার API এ হাতুড়ি জড়িত থাকবে ভাল না। সুতরাং আপনাকে একটি বাল্ক পদ্ধতি তৈরি করতে হবে, তবে সত্যই আপনি কেবল এটি ডেস্কটপ ক্লায়েন্টদের জন্য তৈরি করছেন। এইভাবে, আপনি ক) আপনার এপিআই এর সাথে কী সংহত হচ্ছে তার ভিত্তিতে পরিবর্তন করুন এবং আপনি কেবল এটির সাথে সরাসরি সংহত করতে পারবেন না, খ) অতিরিক্ত ফাংশন তৈরি করতে আরও অনেক বেশি কাজ করুন do

বিদ্যমান পদ্ধতির একটি বাল্ক সংস্করণ তৈরি করা খুব কমই আমি "অনেক বেশি কাজ" বলব call আপনি যদি পারমাণবিকতার মতো জিনিস সম্পর্কে উদ্বিগ্ন না হন তবে বাল্কের পদ্ধতিটি মূলটির জন্য খুব সরু সীমান্তের চেয়ে বেশি কিছু হতে পারে না।

YAGNI । আপনি যদি না নির্দিষ্টভাবে দুটি অভিন্ন কার্যকারী অ্যাপ্লিকেশন, একটি ওয়েব এবং একটি উইন্ডোজ অ্যাপ্লিকেশন উদাহরণের জন্য লেখার পরিকল্পনা না করেন তবে এটি একটি বিশাল পরিমাণের অতিরিক্ত উন্নয়ন কাজ।

না, YANI (আপনার এটি ইতিমধ্যে প্রয়োজন)। আমি উপরে হিসাবে যে রূপরেখা। এটির মধ্যে কতটা নকশা কাজ রয়েছে তা কেবলমাত্র প্রশ্ন।

আপনি শেষ-শেষের দিকে যেতে না পারলে ডিবাগিং আরও শক্ত।

আপনি কেন শেষ থেকে শেষের দিকে পদক্ষেপ করতে সক্ষম হবেন না?

তবে আরও উল্লেখযোগ্য বিষয় হ'ল, সহজেই স্বীকৃত ফরম্যাটে যে সমস্ত ডিসপ্লে ক্রাফ্ট কেটে ফেলেছে সেগুলি ডেটা পিছনে পিছনে যাচ্ছিল তা পরীক্ষা করতে সক্ষম হওয়ায় ডিবাগিংটি সহজতর হয় , আরও শক্ত নয়।

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

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

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

আপনি মনে করেন যে এর অর্থ নিবন্ধ থেকে মেমরির বাইরে আরও অনেক ট্রিপ নেওয়ার অর্থ মেশিনটি ধীর করে দেবে। তবে অনুশীলনে, প্রায়শই বিপরীত ঘটে: প্রসেসর (ক্লায়েন্ট) মেমরির (সার্ভার) ভ্রমণের মধ্যে আরও কাজ করে এবং স্পিডআপটি এখান থেকেই আসে।

দীর্ঘ গল্প সংক্ষিপ্ত: আপনার সহকর্মী ঠিক আছে। এই পথেই যেতে হবে। সামান্য আপ-ফ্রন্ট কাজের বিনিময়ে, এটি আপনার ওয়েবসাইটের কোডটি নাটকীয়ভাবে সহজ করবে এবং অন্যান্য ওয়েবসাইট এবং অ্যাপ্লিকেশনগুলির সাথে আরও ভাল সংহতকরণ সক্ষম করবে। যে মূল্য দিতে হয়।

আরও পড়া:

  1. REST এপিআই ডিজাইন - রিসোর্স মডেলিং

7
এমনকি এগুলির একটি সাজানোর ডি ফ্যাক্টো এপিআই রয়েছে। তারা অন্যান্য অনেক বিকাশকারীকে হরর করে তোলে, তবে তারা এপিআই একই রকম; খুব ভাল ডিজাইন করা না।
দ্য স্পুনিস্ট

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

1
আমার মনে হয় লিনাস গিট তৈরি করেছে কারণ লিনাক্স সম্প্রদায়টি কার্নেলের জন্য ব্যবহৃত বাণিজ্যিক বিটকিপার ডিভিসিএস ব্যবহারের বিরুদ্ধে বিদ্রোহ করেছিল।
gbjbaanb

2
আপনার প্রথম বাক্যটি আমার সমস্ত বিভ্রান্তি দূর করে। আমি এপিআই শব্দটি একটি ওয়েব সেবার সাথে যুক্ত করেছি এবং এটি হ'ল আমি এত বিভ্রান্ত হয়েছিলাম।
নিবল্বিপিগ

4
@ ইয়াননিউসন: কোডের সাথে ইন্টারফেস করার একটি উপায় আছে, একে HTTP বলা হয়। এটির অনেকগুলি অপ্রাসঙ্গিক প্রয়োজনীয়তা থাকতে পারে এবং প্রচুর অপ্রাসঙ্গিক ডেটা ফেরত আসতে পারে, তবে এটি এটিকে একটি লাজুক এপিআই করে তোলে।
jmoreno

63

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

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

মাইক্রোসফ্ট এই ধারণাকে প্রচার করছে, এগুলিকে তারা পোর্টেবল ক্লাস লাইব্রেরি বলে


13
আমাকে এমন একটি প্রকল্প বজায় রাখতে হয়েছিল যেখানে ইউআই স্তরটিতে যুক্তিটি রাখা হয়েছিল, একই ভাগ করা ডেটা স্ট্রাকচারকে কল করে। আমি এক ত্রুটি সংশোধন করা ছিল ত্রিশ গুণ কারণ যে ( "আমরা একই যুক্তি ব্যবহার করার দরকার হয় আবার আমরা একটি API- এর জন্য কপি ও পেস্ট হবে! কোন প্রয়োজন")। যদি একটি লজিক স্তর থাকত (এখন রয়েছে) এটি কেবলমাত্র একটি ফিক্স সহ যথেষ্ট হত।
এসজুয়ান 76

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

34

না তোমার উচিত হবে না । যদি আপনার একই ফ্রন্টএন্ডস (যেমন মোবাইল বা ডেস্কটপ অ্যাপ্লিকেশন বা পৃথক ওয়েব অ্যাপ্লিকেশন) তৈরি করার জন্য তাত্ক্ষণিক পরিকল্পনা না থাকে যা একই ব্যাকএন্ডে অ্যাক্সেস করে তবে আপনার কোনও ওয়েব পরিষেবা স্তর প্রবর্তন করা উচিত নয়। YAGNI

আলগা সংযোগ সর্বদা কাম্য (উচ্চ সংহতি সহ), তবে এটি একটি নকশার নীতি এবং এর অর্থ এই নয় যে আপনাকে বিভিন্ন সার্ভারে শারীরিকভাবে পৃথক পৃথক বস্তু থাকতে হবে! এবং একটি খারাপভাবে ডিজাইন করা সার্ভিস এপিআই সার্ভারের সীমানা জুড়ে আঁটসাঁটো মিলন তৈরি করতে পারে, সুতরাং একটি এপিআই থাকা আলগা মিলনের গ্যারান্টি দেয় না।

ভবিষ্যতে যদি কোনও সার্ভিস এপিআইয়ের প্রয়োজন দেখা দেয় তবে আপনি এটিকে সর্বদা সেই সময়ে পরিচয় করিয়ে দিতে পারেন। যতক্ষণ আপনি আপনার কোডটি সুন্দরভাবে স্তরযুক্ত রাখেন (ডেটা অ্যাক্সেস এবং ব্যবসায়িক যুক্তি পরিষ্কারভাবে আলাদা করে ফর্ম ইউআই লজিক্স) রাখবেন, এখনকার চেয়ে এটির পরে পরিচয় করানো আরও কঠিন হবে না। এবং প্রকৃত প্রয়োজনীয়তাগুলি পূরণ করার জন্য ডিজাইন করা হলে ফলাফলটি আরও ভাল হবে।


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


8
খারাপভাবে ডিজাইন করা কিছু ভাল নয়। একটি API তৈরি করা বেশি সময় নয় এবং এটি ভবিষ্যতের প্রুফ। আজকাল অত্যাবশ্যক হয়ে ওঠার পরিবর্তনের সাথে খাপ খাইয়ে নেওয়ার ক্ষমতা, এমন কোনও চাহিদা পূরণের জন্য আরও শক্তিশালী ভিত্তি তৈরি করা যা আপনি এমনকি জানেন না তবে এটি আপনি যা ভাবেন তার চেয়ে শীঘ্রই আসতে পারে ...
লরেন্ট এস

9
@ বার্টডুড: যে ভবিষ্যতের আগমন ঘটবে না তার জন্য "ফিউচার-প্রুফিং" করার প্রয়োজনে অযথা জটিলতার পরিচয় দেওয়া কেবল সম্পদ অপচয় করা।
জ্যাকবিবি

6
@ বার্টডুড এপিআই যুক্ত করা অবশ্যই আরও বেশি সময় পাবে। আপনি কীভাবে অন্যভাবে দাবি করতে পারেন তা কী ধারণা নেই।
ইয়ান নিউজন

13
"আপনার কোনও ওয়েব পরিষেবা স্তর প্রবর্তন করা উচিত নয়" এপিআই! = ওয়েব পরিষেবা। যদি কোনও এপিআই এর পিছনে আপনার ব্যবসায়িক যুক্তি থাকে তবে আপনি সেই API কে কোনও সময়ে ওয়েব পরিষেবা হিসাবে প্রকাশ করতে পারেন । যদিও এটি একটি সামনের প্রয়োজনীয়তা নয়।
সেলোস

2
@ জ্যাককসবি: ... সুতরাং আপনি যদি এটির প্রয়োজন হচ্ছেন না তবে আপনি যদি সত্যই বৈশিষ্ট্যগুলি বিকাশ করেন না। ইয়াজিএনআই থেকে এটিই আমি বুঝতে পারি। তবুও স্থাপত্য কোনও বৈশিষ্ট্য নয় এবং খারাপ স্থাপত্য পছন্দগুলি (এবং সম্ভবত সম্ভবত) একটি দু: খজনক ব্যর্থতার দিকে নিয়ে যেতে পারে। আমি আবারও ধরে নিয়েছি এই আলোচনা এমনকি ঘটতেও পারে, যা কখনও কখনও বাজেট, সময়-বাজার, রিসোর্স বা জ্ঞানের অভাবের কারণে হয় না ... আমি মনে করি আমরা এ বিষয়ে একমত হতে পুরোপুরি একমত হতে পারি, যদিও আমি আপনার বক্তব্যটি বুঝতে পারি যেহেতু আমি প্রায়ই নিজের সাথে একই আলোচনা করেছি had _ ^
লরেন্ট এস

29

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

এটিতে একটি চিত্র রাখার জন্য, আমি এই পদ্ধতির কারণে আমি যে প্রকল্পের উপরের ব্যয়টি 20% বেশি উল্লেখ করেছি তার অনুমান করব। আপনি কোন ধরণের প্রকল্পের জন্য আপনি কী ধরনের প্রকল্পে কাজ করছেন তা আপনি বর্ণনা করেন না, তবে আপনি যদি তাদের পণ্য তৈরির সূচনা করেন তবে অতিরিক্ত ব্যয় আপনার পণ্য তৈরির কয়েকটি অতিরিক্ত বৈশিষ্ট্য পরিবহণের মধ্যে পার্থক্য হতে পারে সাফল্য.

কমপক্ষে সর্বজনীনভাবে না করার আরেকটি কারণ হ'ল যদি আপনি যখন দ্বিতীয় ইন্টারফেসটি তৈরি করার সিদ্ধান্ত নেন তবে খুব কমই একটির কার্যকারিতার এক ম্যাপিং রয়েছে। উদাহরণস্বরূপ, আপনি যদি কোনও মোবাইল অ্যাপ তৈরি করেন তবে তাদের বৈশিষ্ট্যগুলি কম রয়েছে less এর অর্থ আপনার কিছু এপিআই পদ্ধতি কখনও পুনরায় ব্যবহৃত হবে না। সুতরাং আপনার সহকর্মীর সাথে সমঝোতা হ'ল আপনার মধ্যে সবচেয়ে গুরুত্বপূর্ণ / সমালোচনামূলক কলগুলির মধ্যে সিদ্ধান্ত নেওয়া এবং এটিগুলিতে একটি এপিআইতে যুক্ত করা এবং সমস্ত কিছুর জন্য আরও traditionalতিহ্যগত পদ্ধতি ব্যবহার করা।

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


22

এটি নির্ভর করে অ্যাপ্লিকেশনটির ধরণ এবং আপনি যে বাজারে আসছেন তার উপর।

এই পথে যাওয়ার জন্য ট্রেড অফ এবং সুবিধা রয়েছে। এটি কোনও পরিষ্কার উত্তর নয় যে একটি উপায় অন্যর চেয়ে ভাল

আমি ব্যক্তিগত অভিজ্ঞতা থেকে কথা বলব। আমি সেই ব্যক্তিই ছিল যে আমি ২০০ 2007 সালে কোডবেস নিয়ে এই দিকটিতে কাজ করার সিদ্ধান্ত নিয়েছিলাম That কোডবেসটি কোথাও কোথাও এখন মিলিয়ন লাইনের কোড অনুসারে রয়েছে, যার অর্ধেক সার্ভার কোডটি প্রচুর পরিমাণে ওয়েব সার্ভিসের আড়ালে লুকিয়ে রয়েছে এপিআই'র, অন্য অর্ধেকটি ক্লায়েন্ট, ডেস্কটপ নেটিভ, ডেস্কটপ ওয়েব, মোবাইল, ব্যাক-এন্ড ইন্টিগ্রেশন ইত্যাদির একটি ফ্লোটিলা ... ... এই সিদ্ধান্তটি এর ডাউনসাইড ছাড়া ছিল না, তবে ২০/২০ ইন্ডিজসাইটের সাথে আমি বলতে পারি যে আমি আবার এটি করব would । আমাকে জড়িত কিছু ট্রেড অফগুলি নির্দেশ করুন Let

উপকারিতা

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

  • স্কেলিবিলিটি (দলের)। আমাদের ক্ষেত্রে আমাদের এই API এর উপরে সমস্ত বিল্ডার বিকাশকারীদের অনেকগুলি গোষ্ঠী রয়েছে। আমাদের কাছে উত্সর্গীকৃত এপিআই দলগুলিও রয়েছে, যারা বিভিন্ন গোষ্ঠীর সাথে কথা বলে, প্রয়োজনীয়তাগুলি সংক্ষিপ্ত করে এবং এর বাইরে একটি উদ্দেশ্যমূলক এপিআই তৈরি করে। এটি এমন পর্যায়ে পৌঁছেছে যে আমাদের এমনকি এ পর্যন্ত বলা হয় নি যে লোকেরা এপিআইয়ের উপরে স্টাফ তৈরি করছে এবং যারা আমাদের কোম্পানির পক্ষে কাজ করে তারা সবাই নয়।

  • নিরাপত্তা। আপনার কোডবেসের অনিরাপদ এবং সুরক্ষিত অংশগুলির মধ্যে একটি পরিষ্কার কাটা বিভাগ থাকা সুরক্ষার পক্ষে যুক্তি প্রকাশে সহায়ক। ইউআই এবং ব্যাক-এন্ড কোডকে একত্রিত করা বিষয়গুলিকে বিভ্রান্ত করে।

বিনিময় প্রথা

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

  • প্রাথমিক বিকাশের গতি। সন্দেহ ছাড়াই এপিআই-প্রথম বিকাশ করা ধীর is আপনি কেবল তখনই জিতে থাকবেন যখন আপনার এপিআই-র শীর্ষে যথেষ্ট ক্লায়েন্ট নির্মিত। তবে তারপরে আপনি দেখতে পাচ্ছেন যে আপনার এপিআই যথেষ্ট জেনেরিক হিসাবে বিকশিত হওয়ার আগে আপনাকে 3 টি পৃথক ক্লায়েন্ট প্রয়োগকরণ দরকার। আমরা দেখতে পেয়েছি যে আমাদের বেশিরভাগ প্রাথমিক এপিআই ডিজাইনগুলি ভুল ছিল এবং ওয়েব পরিষেবাদি কীভাবে তৈরি করা যায় সে সম্পর্কে আমাদের নির্দেশিকাগুলিকে দৃ strongly়ভাবে সংশোধন করতে হয়েছিল।

লাল herrings

আপনি এর একটি গুচ্ছ উল্লেখ করেছেন। বাস্তবে তারা বাস্তবে কিছু যায় আসে না।

  • বিমূর্ততা। আপনার পণ্যটি যে পণ্য ব্যবহার করতে হবে সেগুলি আবশ্যক করে তুলতে আপনার এপিআই যথেষ্ট বিমূর্ত হয়ে ওঠে এবং এর চেয়ে বেশি আর কিছু হয় না। এমনকি ওয়েব পরিষেবাদি ব্যতীত আপনার একটি অভ্যন্তরীণ API থাকবে যা এটি করে বা প্রচুর সদৃশ কোড রয়েছে। আমি সদৃশটির চেয়ে বিমূর্ততা পছন্দ করি।

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

  • বাল্ক অপারেশন। সাধারণত একটি বাল্ক এপিআই তৈরি করে সমাধান করা হয় যা একটি ব্যাক-এন্ড জব শুরু করে এবং স্ট্যাটাস অনুসন্ধানের জন্য একটি আইডি আইনে ফিরিয়ে দেয়। এটি কোনও চুক্তির চেয়ে বড় কিছু নয়।

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

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

সংক্ষেপে

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


আকর্ষণীয় পড়ুন, আপনি কী এপিআই ডিজাইন করার সময় ভুল করেছেন এবং কী শিখেছেন তা বিশদভাবে বলতে পারেন?
আআআআআআআআআআআআআআআআআআআআআ

3
মূলত তিনটি ভুল হ'ল: (১) প্রাথমিক ইউআইয়ের প্রয়োজনীয়তার তুলনায় এপিআইকে চাপ দেওয়া, (২) সেশনগুলি ব্যবহার করে একাধিক অনুরোধ জুড়ে রাষ্ট্র গঠন করা (আমরা ধীরে ধীরে সেশনলেস হয়ে যাচ্ছি), এবং (৩) কেবল উত্পন্ন ব্যবহারকে সমর্থন করে আইডি আইডি আইডেন্টিফায়ার হিসাবে যেখানে ব্যবহারকারী-কনফিগারযোগ্য কোডটি প্রায়শই একটি ভাল শনাক্তকারী হয় (বাহ্যিক সিস্টেমগুলির সাথে সংহতকরণের জন্য সাধারণত তারা এপি'র পরিবর্তে পরিবর্তে পরিবর্তে এপিআই-র ব্যবহারের জন্য আমাদের সিস্টেমে সনাক্তকারীদের আপলোড করতে চান) want এই তিনটি একসাথে দুর্বল ডকুমেন্টেশন এবং অপ্রয়োজনীয় ত্রুটি বার্তাগুলি এপিআইকে সহায়তা ছাড়া ব্যবহার করা অসম্ভব করে তুলেছে।
জোয়েরি সেব্রেচটস

10

আপনার সহকর্মী যা বর্ণনা করছেন তা হ'ল একটি পরিষেবা ভিত্তিক আর্কিটেকচার। এটি কোডের একটি দুর্দান্ত স্কেলেবল, টেস্টেবল এবং বুদ্ধিমান উপায় হতে পারে তবে এটি আপনি কী তৈরি করছেন তার উপর নির্ভর করে।

এসওএর কয়েকটি উল্লেখযোগ্য সুবিধা রয়েছে যা আমি গণনার চেষ্টা করব:

স্কেলেবিলিটি

যেহেতু আপনার পিছনের প্রান্তটি ডিউপলড হয়ে গেছে, আপনার সামনের প্রান্তটি কেবলমাত্র টেমপ্লেট এমনকি ফ্ল্যাটফাইলে পরিণত হয়। ফ্ল্যাটফিলগুলি যে কোনও সিডিএন থেকে পরিবেশন করার জন্য দুর্দান্ত এবং দ্রুত cheap এগুলি স্থির করে স্থির HTML এ প্রম্পম্পাইল করা যায়, তারপরে ডেটা ক্লায়েন্টাইড দিয়ে পপুলেট করা যায়।

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

Testability

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

একটি এআইপিআই এই সমস্যাটিকে পাশ কাটিয়ে যায়। প্রতিটি এপিআই কল একটি সংস্থান টান এবং এটি পরিবেশন করে। পরিষ্কার এবং পরীক্ষামূলক।

উদ্বেগের গ্যারান্টিযুক্ত বিচ্ছিন্নতা

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

downsides

অবশ্যই কিছু ডাউনসাইড আছে। একটি মনোলিথ প্রায়শই দ্রুত যেতে থাকে। এটি আপনার অভ্যস্ত হতে পারে। এটি আপনার স্ট্যাকের মধ্যে আরও সুন্দরভাবে ফিট করতে পারে। আপনার সরঞ্জামগুলি একঘেয়েমি তৈরির জন্য অনুকূলিত হতে পারে।

এগুলির কোনওটিই আমার মতে বিশেষত ভাল কারণ নয় এবং আপনি যদি এগুলি প্রয়োগ করেন তবে আপনি পুনর্নির্মাণের বিষয়টি বিবেচনা করতে পারেন।


এটি এ পর্যন্ত পরিষ্কার উত্তর।
টনি এনিস

7

এখানে ভাল উত্তরের একটি ভাল চুক্তি রয়েছে তাই আমি কেবল আমার বাস্তবায়ন অভিজ্ঞতা যুক্ত করব।

এইভাবে আমি জিনিসগুলি করি:

  • এমন একটি ডাটাবেস অ্যাক্সেস স্তর তৈরি করুন যা সমস্ত / কেবল ডিবি ইন্টারঅ্যাকশন পরিচালনা করে (সাধারণত ম্যানুয়াল এসকিউএল গতি এবং নিয়ন্ত্রণের জন্য ব্যবহৃত হয়, কোনও ওআরএম নয়) । Sertোকান, আপডেট করুন, মুছুন, নির্বাচন করুন ...
  • এমন একটি interface( virtual class) তৈরি করুন যা আমার প্রয়োজনীয় এপিআই ফাংশনগুলি প্রকাশ করে / কার্যকর করে। তারা বাস্তবায়িত হওয়ার পরে ফলাফল অর্জনের জন্য অত্যন্ত বিশেষায়িত ডিবিএল ফাংশন ব্যবহার করবে। এটি আমাকে সংকলক স্তরে এপিআই প্রয়োগ করতেও সহায়তা করে তাই আমি নিশ্চিত হয়েছি যে সার্ভার + এপিআই প্রয়োগকরণের সমস্ত ফাংশন অন্তর্নির্মিত আছে।
  • একটি দ্বিতীয় স্তর তৈরি করুন যা ইন্টারফেসটি প্রয়োগ করে (এটিই আসল এপিআই) এবং সুরক্ষা বিধিনিষেধ প্রয়োগ করে। আপনি এখানে বাহ্যিক এপিআইয়ের সাথে ইন্টারঅ্যাক্ট করেন।
  • রিমোট-অ্যাক্সেসযোগ্য এপিআই (এসওএপি, জেএসএন এর মতো ) না গিয়ে ওয়েবসাইট সরাসরি (পারফরম্যান্সের জন্য) দ্বিতীয় স্তরটি ব্যবহার করবে ।
  • স্বতন্ত্র সার্ভারটি এমন একটি বিল্ড যা ইন্টারফেসটি প্রয়োগ করে এবং দ্বিতীয় স্তরটিকে বহিরাগত ডেস্কটপ / মোবাইল ক্লায়েন্টের (ওয়েবসাইটবিহীন অ্যাক্সেস) আসল রিমোট-অ্যাক্সেসযোগ্য API হিসাবে প্রকাশ করে । এটি যা করে তা হ'ল অনুরোধগুলি ডিকোড করুন এবং প্রতিক্রিয়াগুলিকে এনকোড করুন এবং ক্লায়েন্ট পরিচালনা / সংযোগ বিচ্ছিন্ন করুন। এটি অন্যান্য সংযুক্ত পিয়ারদের দ্বারা উত্পাদিত ইভেন্টগুলির ক্লায়েন্টদের গণ-বিজ্ঞপ্তি দেওয়ার জন্য পুশব্যাক ক্ষমতাগুলি সমর্থন করে (কার্যকারিতা যা কোনও ওয়েবসাইটের সাধারণত প্রয়োজন হয় না)

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

আপনি কখনই ওয়েবসাইটটিকে ডেস্কটপ / মোবাইল এপিআই সার্ভারের সাথে সংযুক্ত করবেন না (যদি না আপনার সাইটটি এজেএক্স হয় এবং জেএসএনে চালিত না হয়) । তবে যদি সাইটটি মার্কআপে গতিশীল সামগ্রী উপস্থাপন করে তবে একটি মধ্যবর্তী এপিআইয়ের মধ্য দিয়ে যাওয়া আপনার পারফরম্যান্সটি অঙ্কিত করবে। ওয়েবসাইটটি দ্রুত হওয়া দরকার! রিমোট ক্লায়েন্ট অ্যাক্সেস একটি সামান্য বিট আরও ধীর হতে পারে।

পিএস : হ্যাঁ, রক্ষণাবেক্ষণ কিছুটা জটিল কারণ আরও চাকা একসাথে কাজ করে তবে এটি দীর্ঘকালীন সময়ে আরও সহজ। সুতরাং আপনার প্রকল্পটি যদি কিছু সময়ের জন্য বেঁচে থাকে এবং কিছুটা জটিল হয় তবে সর্বদা একটি এপিআই রাখুন। প্রতিটি স্তরটি তার নিজের থেকে পরীক্ষা করাও অনেক সহজ।


এটি বেশ দুর্দান্ত শোনায় এবং প্রচুর অর্থবোধ করে, বিশেষত আপনার এপিআই টাইপ ফাংশনে ইন্টারফেস রেখে। আমি পরের বার একটি প্রকল্প তৈরি করার সময় আমি এই সেট আপটি চেষ্টা করব!
নিবল্লিপিগ

6

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

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

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

উদাহরণ

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

কোনও শালীন এপিআইতে এটির জন্য প্রয়োজনীয় এপিআই কলগুলির সংখ্যাটি ১ হতে পারে Yes হ্যাঁ, এটি জটিল নয়, তবে আপনি কেন এটি নমনীয় হতে চান?


4

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

আচ্ছা, তাই না? যদি তা না হয় তবে এটি একটি সুন্দর অপ্রাসঙ্গিক বক্তব্য।

আমি বলব, যদি আপনি ২০১৫ সালে একটি নতুন অ্যাপ্লিকেশন তৈরি করতে যাচ্ছেন তবে ইউজার ইন্টারফেসের সাথে এমন কোনও বিষয় যা গুরুতরভাবে একটি এপিআই এবং সার্ভারের দ্বারা উত্পাদিত এইচটিএমএল পৃষ্ঠাগুলির সাথে জড়িত তা অনুসন্ধান করুন look সুস্পষ্ট ব্যয় রয়েছে তবে সুফলও রয়েছে।

তবে যদি আপনার কাছে বিদ্যমান সাইট রয়েছে যার কোনও কংক্রিট পরিকল্পনা না থাকলে বিভিন্ন আলাদা ইন্টারফেস (যতদূর আমি বলতে পারি) রাখার পরিকল্পনা রয়েছে, তবে তার মন্তব্যগুলি কেবল অপ্রাসঙ্গিক।


4

সংক্ষিপ্ত সংস্করণ: আপনার নিয়ামক কার্যকরভাবে একটি এআইপিআই যাই হোক না কেন; যদিও এএসপি.এনইটি এটিকে অস্পষ্ট করছে।

দীর্ঘ সংস্করণ:

একটি বেসিক এমভিসি ওয়েব অ্যাপ্লিকেশনটি সম্পর্কে চিন্তা করুন যা বিয়ার সম্পর্কে তথ্য সরবরাহ করে এবং allyচ্ছিকভাবে আপনাকে একটি বিক্রি করে। রুটগুলি দেখতে কেমন?

/sign_in
/sign_out
/beer
/beer/{beer_name}
/order
/order/{order_number}

একটি সাধারণ ওয়েব-অ্যাপে সম্ভবত কয়েকটি আনুষঙ্গিক পথ রয়েছে:

/beer/new
/beer/{beer_name}/edit
/beer/{beer_name}/delete
/order/new
/order/{order_number}/edit
/order/{order_number}/delete

কোনও ওয়েব এপিআইতে এগুলির প্রয়োজন হয় না, কারণ তারা HTTP পদ্ধতি থেকে অনুমিত হয়।

উপরের প্রতিসাম্যটি দেওয়া, আমার মনে হয় এটি একটি চমত্কার জোরালো কেস তৈরি করে যে আপনার এপিআই এবং কন্ট্রোলারটি এত নিকটবর্তী যে তারা একই জিনিস হতে পারে।

কিছু খনক করছেন পর, আমি এই সিদ্ধান্তে পৌঁছেছি যে এই পারে আপনি নির্ভর ASP.NET যা সংস্করণ আপনি ব্যবহার করছেন জন্য কিছু রাজ্যের হও। পুরানো এমভিসি 5 এবং তার আগে দুটি বাস্তবায়নকে একীভূত করার জন্য কনভেনশন এবং ইন্টারফেসের অভাব রয়েছে। পুরানো সংস্করণগুলিতে, ওয়েব অ্যাপ্লিকেশনটি একটি ভিউ রিপোলেটেড করে যেখানে এপিআই একটি এইচটিপিআরস্পোন দেয়। উভয় ক্ষেত্রেই, যদিও তারা শব্দার্থগতভাবে সঠিক একই প্রতিক্রিয়া তৈরি করছে

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

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

এটি একটি প্রতিবন্ধী মিল নেই কারণ এএসপি.এনইটি ধরণের এগুলি দেরী করে বেরিয়েছে যদিও রেলগুলি কিছু সময়ের জন্য প্রতিসাম্যকে গ্রহণ করেছে এবং এটি খুব স্পষ্ট করে তুলেছে।

জল্পনা:

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

নতুনটির সাথে, ইউনিফাইড কোড ব্যবহার করা আরও তাত্পর্যপূর্ণ কারণ এটি ইউনিফাইড কন্ট্রোলার বেস শ্রেণীর সাথে কোডটি পুনরায় ব্যবহার করা সহজতর করা হয়েছে।

উভয় ক্ষেত্রেই, তবে কন্ট্রোলার কার্যকরভাবে এপিআই হয়।


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

আরও মারিয়রকে উত্তর দেয়, তারা এ সম্পর্কে অন্যান্য লোকেরা কী অনুভব করে তার একটি প্রশস্ত প্রশংসা পেতে সহায়তা করে।
নিবল্বিপিগ

2

২০০ 2006 সালে যখন আমি আমার ক্যারিয়ার শুরু করি তখন। নেট নেট ওয়ার্ল্ডে এই ধরণের আর্কিটেকচারটি ছিল সমস্ত ক্রোধ। আমি ব্যবসার লজিক স্তর এবং ওয়েব ফ্রন্টএন্ডের মধ্যে একটি ওয়েব পরিষেবা দিয়ে 2000 এর দশকের মাঝামাঝি সময়ে 3 টি পৃথক প্রকল্পে কাজ করেছি। অবশ্যই আজকাল ওয়েব পরিষেবাদিগুলি এসওএপি ছিল তবে এটি এখনও একই স্থাপত্যে রয়েছে। কথিত সুবিধাগুলি ছিল সামনের বা ব্যাকএন্ডে স্যুইচ করার এমনকি ডেস্কটপ প্রোগ্রাম বিকাশ করার ক্ষমতা ability শেষ পর্যন্ত YAGNI সত্য বলে প্রমাণিত হয়েছিল। আমি এর আগে কখনও ঘটতে দেখিনি। এই সমস্ত সময় আমি কেবল এইভাবে প্রকল্পটি বিভক্ত করার জন্য ব্যয় দেখেছি। এমনকি আমি প্রকল্পগুলির মধ্যে একটির বাইরে ওয়েব পরিষেবা ছিঁড়ে শেষ করেছি (অন্যান্য কাজ করার সময় ধাপে ধাপে সরিয়ে ফেলতে অর্ধ বছর সময় নিয়েছে) এবং পুরো দলটি খুশি হয়েছিল। আমি কখনই সেই পদ্ধতির চেষ্টা করিনি এবং খুব নির্দিষ্ট কারণ না দিলে আমি করবো না। এই আর্কিটেকচারটি ব্যবহার করে দেখার 5 বছরের অভিজ্ঞতা আমাকে শিখিয়েছে যে আমার এটির দরকার নেই এবং বিপরীতে আমাকে বলার মতো পরিমাণের পরিমাণও আমাকে বোঝাতে চাইছে না আমি করব। আমার প্রয়োজন কেবল এমন একটি প্রকল্প এটি করতে পারে।

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

এছাড়াও আমি মাইক্রোসার্ভিসেসের ধারণাটি বেশ পছন্দ করি তবে আমার বোধগম্যতা হল মাইক্রোসার্ফেসিসগুলি হর্টিজোটাল স্তরগুলির পরিবর্তে উল্লম্ব মডিউলগুলি বোঝায়। উদাহরণস্বরূপ আপনি যদি ফেসবুক তৈরি করে থাকেন তবে চ্যাট বৈশিষ্ট্যটি তার নিজস্ব সার্ভারে আলাদাভাবে মোতায়েন করা একটি পৃথক পরিষেবা হবে etc. ইত্যাদি This


2

তৃতীয় পক্ষের এটি ব্যবহার করবে? হ্যাঁ, আপনার উচিত

আপনি এটি একটি অতি-অদূর ভবিষ্যতে পুনরায় ব্যবহার করার পরিকল্পনা করছেন? হ্যাঁ তুমি পারবে.
আপনি নথিভুক্ত - বা ডকুমেন্টযোগ্য - বা তৃতীয় পক্ষের তৃতীয় পক্ষের এপিআই আপনার শক্তিশালী পুনরায় ব্যবহারযোগ্যতা এবং সামঞ্জস্যতা সরবরাহ করবে আপনার তৃতীয় পক্ষ

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

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


1

এখানে ভাল উত্তর আছে। আমি এটি একটি আংশিক উত্তর হিসাবে পোস্ট; এটি সম্ভবত একটি মন্তব্য হিসাবে ভাল হবে। তবে অসংখ্য পোস্টে একই মন্তব্য করা ভাল নয়।

কেউ দাবি করতে পারে না YAGNI একটি এপিআই তৈরির কারণ নয়।

এপিআই একটি প্রাকৃতিক এবং যৌক্তিক পরীক্ষার সমাপ্তি বিন্দু point সুতরাং 0 দিন থেকে সঠিকভাবে, দুটি অ্যাপ্লিকেশন রয়েছে যা এপিআই ব্যবহার করে: ইউআই এবং টেস্টিং স্যুট। একটি মানুষের জন্য বোঝানো হয়, অন্যটি মেশিনগুলির জন্য বোঝানো হয়। তারা অগত্যা পৃথক। ফ্রন্ট-এন্ড আচরণ পরীক্ষা করা ব্যাক-এন্ড আচরণের পরীক্ষার চেয়ে অনেক আলাদা কাজ। সুতরাং কৌশলগুলি এবং সম্ভবত সরঞ্জামগুলি সম্পূর্ণ আলাদা। API টি কাজের জন্য সেরা সরঞ্জামটি ব্যবহার করার অনুমতি দেয়। তদ্ব্যতীত, এপিআই দ্বারা সজ্জিত পৃথকীকরণের সাথে, সামনের প্রান্তের পরীক্ষকদের ব্যাক-এন্ড কার্যকারিতা পরীক্ষা করতে হবে না।

এআইপিআই সামনের এন্ড কোডারদের ব্যাক-এন্ড কোডারের উদ্বেগ থেকে দূরে রাখতে এবং তদ্বিপরীত থেকে সহায়তা করে। আমাদের কোম্পানিতে এগুলি খুব আলাদা দক্ষতা; API আমাদের ফোকাস করতে দেয় যেখানে আমরা সবচেয়ে শক্তিশালী।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.