এপিআই তৈরি করার সময় আমার কি ছোট ফাংশন এবং অনেক কল, বা কয়েকটি কল এবং বড় ফাংশন থাকা উচিত?


25

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

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

সুতরাং API তৈরি করার সময় আমার প্রশ্নটি হ'ল:

যখন আমি জিনিস অনেক করতে হবে, মত validate, একটি তৈরি user, user profileএবং policy, প্রায় কাছাকাছি একই সময়ে। আমার কি 4 টি পৃথক এপিআই কল করা উচিত এবং ক্লায়েন্টকে তাদের পক্ষে 4 টি কল করা উচিত। বা আমার কি একটি কল থাকা উচিত যা প্রচুর পরামিতি ব্যতীত, ক্লায়েন্টকে বৈধতা দেয় এবং ক্লায়েন্টের জন্য জিনিসগুলি সরল করে একই সময়ে 3 টি জিনিস তৈরি করে?

ক্লায়েন্ট, এক্ষেত্রে, প্রয়োজনীয় সমস্ত তথ্য একই সাথে পেয়ে যায়, তাই এটির মতো নয় যে তাদের অ্যাপ্লিকেশনটিতে প্রাকৃতিক প্রবাহ রয়েছে যেখানে এটি বিরতি দেয় এবং তারা আমার প্ল্যাটফর্মে একটি API কল করতে পারে।

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

আমি কীভাবে এটিকে মোকাবেলা করার পরামর্শ দিই?

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

উত্তর:


32

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

আপডেট: অন্যদের দ্বারা করা দুর্দান্ত পয়েন্ট এবং মন্তব্যগুলির কিছু অন্তর্ভুক্ত করার জন্য।

  1. বিবেচনা করুন যদি ক্লায়েন্টটি কখনও কখনও ছোট্ট একটি এপিআই পদ্ধতিতে কল করার প্রয়োজন হয় যেমন, ক্রিয়েট ইউজারকে কল না করে কি ক্রিয়েট ইউজারপ্রাইফিল কল করা সম্ভব? যদি না হয় তবে সেই পদ্ধতিটি প্রকাশ করবেন না। ধন্যবাদ NoobsArePeople2

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


10
+1 এমন কিছু বলছিল। আরও একটি প্রশ্ন জিজ্ঞাসা করুন: আপনি কি ক্লায়েন্টকে বিচ্ছিন্ন করে এই জিনিসগুলির কোনও কাজ করতে পারেন? উদাহরণস্বরূপ, ক্লায়েন্ট কখনও কখনও createUserProfileছাড়া কল প্রয়োজন হবে createUser? যদি তা না হয় তবে তা প্রকাশ করবেন না।
NoobsArePeople2

4
@ NoobsArePeople2 চমৎকার পয়েন্টটি যদি প্রয়োজন না হয় তবে তা প্রকাশ করবেন না
ড্রায়জা

9
কোনও এপিআইতে কিছু উন্মোচিত করার মূল বিষয় - আপনি কখনই এটি আনপোজ করতে পারবেন না। কাজ করার জন্য ন্যূনতম প্রয়োজনীয়টিকে উদ্ভাসিত করুন এবং তারপরে সবকিছুকে প্রকাশ করার চেয়ে প্রসারিত করুন এবং ... ভাল, তবে এর নগ্ন এবং পরিবর্তনগুলি বিব্রতকর এবং বিশ্রী হতে পারে।

1
@ আরয়ানঅপটিনি হ্যাঁ, আমি যে লাইনে নেমে যাব তা। তবে আপনি যদি কোনও কল এপিআই ফ্যাশনে ডিজাইন করেন তবে তাদের স্তরটি বহিঃপ্রকাশ করা কোনও সমস্যা হবে না।
dreza

1
@RryanOptini ড্রিজা কী বলেছে।
NoobsArePeople2

10

আমি মনে করি আপনি এটি ভুল উপায়ে দেখছেন। বড় সম্পর্কে চিন্তা করবেন না ছোট কল বা প্রচুর | কয়েকটি কল।

ব্যবসায়িক বিষয়গুলি এবং যেগুলি সম্পাদন করা যেতে পারে সেগুলি সম্পর্কে চিন্তা করুন Think জন্য | objects বস্তুর বিরুদ্ধে

আপনি পেয়েছেন:

  • ব্যবহারকারীরা
  • নীতিসমূহ
  • হার
  • ...

সুতরাং আপনার এই আইটেমগুলির চারপাশে API কল করা উচিত।

  • User.Create
  • User.UpdatePassword
  • Policy.Validate
  • ...

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

বৃহত্তর, সমস্ত ইন-ওয়ান টাইপ কলগুলির সাথে সমস্যাগুলি পার্শ্ব প্রতিক্রিয়াগুলির ঝুঁকি। যদি পলিসি.ক্রিয়েট কোনও ব্যবহারকারীকে উত্সাহ দেয় এবং কিছু অন্যান্য ক্রিয়াকলাপ শুরু করে, তবে তা প্রোগ্রামারদের প্রত্যাশা ভঙ্গ করবে। একইভাবে, প্রচুর ছোট কল প্রোগ্রামারকে "একক" ব্যবসায়িক ক্রিয়াকলাপ সম্পাদনের জন্য A এবং তারপরে B এবং তারপরে সি কল করতে বাধ্য করে।

এবং কলগুলির নাম কীভাবে রাখবেন তার উপর ভিত্তি করে রেল এবং আপনার সমর্থনকারী ওয়েব পরিষেবাদি সমর্থন করবে।

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


4

আমার মনে হয় আপনার অন্ত্রের অনুভূতিটি সঠিক - গ্রাহকদের জন্য এপিআই সহজ করুন। কতক করতে, এই পিছনে দর্শন উপভোক্তা চালিত চুক্তি

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


1
এছাড়াও, সহজ এপিআইর অগত্যা বৃহত ফাংশনগুলি বোঝায় না। এপিআই ফাংশনটি কেবল একটি "অর্কেস্টেটর" হতে পারে যা কয়েকটি অভ্যন্তরীণ গ্রন্থাগার ফাংশনগুলিকে কল করে, যা আপনার কোডটিতে সঠিক পরিমাণের গ্রানুলারিটি না পাওয়া পর্যন্ত অন্যান্য ফাংশনগুলিকে কল করে।
মিসকো

3

ব্যক্তিগতভাবে, আমি এমন এপিআই পছন্দ করি যা:

  1. এমন একটি উপায়ে অপ্টিমাইজ করা হয় যাতে সাধারণ ব্যবহারের কেসগুলি সহজেই সম্পাদন করা যায়
  2. সিআরইউডি অপারেশন সম্পর্কিত কলগুলি ব্যাচ ওরিয়েন্টেড বা ব্যাচের সংস্করণ রয়েছে
  3. প্রতিবিম্বের অনুমতি দেয় (যাতে অন্যান্য কম্পিউটারের ভাষার জন্য প্লাগইন বা বাইন্ডিং লেখার লোকেরা প্রক্রিয়াটি স্বয়ংক্রিয় করতে পারে)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.