এএসপি.নেটে জেএসএনকে ফেরত দিতে ওয়েবএপিআই বা এমভিসি ব্যবহার করে


138

আমি একটি এএসপি.এনইটি এমভিসি অ্যাপ্লিকেশন তৈরি করছি যা ক্লায়েন্ট-স্ক্রিপ্ট ভারী, এটি ডমকে সামাল দিতে JSON এবং jQuery ব্যবহার করবে।

আমার বোঝাপড়া উভয়ই ওয়েব এপিআই কন্ট্রোলার এবং এমভিসি কন্ট্রোলার জেএসএনকে ফিরিয়ে দিতে পারে।

আমার দৃশ্যের প্রেক্ষিতে, আমি কি কোনও ওয়েব এপিআই কন্ট্রোলার বা একটি এমভিসি কন্ট্রোলার ব্যবহার করব ?



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

উত্তর:


156

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

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

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

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

ব্যক্তিগতভাবে, আমি JSON- ভিত্তিক RESTful ক্লায়েন্টদের ড্রাইভিংয়ের জন্য ওয়েব API কন্ট্রোলার ব্যবহার করি, আমি বেসিক ব্রাউজারের রাউটিং এবং এসপিএর সরবরাহের জন্য এমভিসি নিয়ন্ত্রক ব্যবহার করি।


32

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

আপনার ক্ষেত্রে আপনাকে কেবল JSON এ ক্লায়েন্টের সাথে কথা বলতে হবে।

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

সুতরাং আপনার নির্দিষ্ট পরিস্থিতির জন্য (যদি আমি সঠিকভাবে বুঝতে পারি) তবে আমি কন্ট্রোলারদের সাথে থাকব।


ধন্যবাদ, কীভাবে আমরা ওয়েবএপিআই বনাম কন্ট্রোলার তৈরি করি তাতে কোনও পার্থক্য আছে?
নীল পুন

1
@ ফ্লাইবাইটে হ্যাঁ আপনাকে এপিআইকন্ট্রোলার থেকে উদ্ভূত হওয়া দরকার, দেখুন এসপ নেটওয়ার্ড
মুহাম্মদ হাসান খান

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

8

উত্তরগুলি উদ্বেগগুলি পৃথক করে, পরিষেবা তৈরিতে দৃ fas়তা দেয় এবং কনফিগারেশনের পরিবর্তে কনভেনশনের উপর নির্ভর করে।

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

  • জিইটি: পড়ুন
  • পোস্ট: তৈরি করুন
  • পুট: আপডেট
  • মোছা: মুছুন

সুতরাং এপিআইগুলির সাহায্যে আপনাকে পৃথক ক্রিয়া তৈরি করতে হবে না এবং এইচটিটিপি ক্রিয়াকলাপগুলির সাথে তাদের বিশিষ্ট করতে হবে।


0

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

domain.com/api/area1/controller1/

domain.com/api/area2/controller1/

আমার মনে আছে এটি করতে সক্ষম হওয়ার জন্য কিছু কাস্টম কোড সেটিংস রয়েছে তবে এটি ডিফল্টরূপে কাজ করে না।


এটি একটি মন্তব্য নয়, উত্তর বলে মনে হচ্ছে।
ডিলান হেইস

আপনি যা বলছেন তা সত্যিই করবেন না। আপনি যদি কোনও কন্ট্রোলার এরিয়া 1 এক্স কনট্রোলারের নাম দেন তবে আপনি এটি করতে পারেন: ডোমেন / আআআআআআআ 1 এক্স / 1, একটি নিয়ামক তৈরি করতে: এরিয়া 2 এক্স কনট্রোলার এবং তারপরে এটিকে অ্যাক্সেস করুন: ডোমেন / আআআআ 2 এক্স / 1 দিয়ে access বড় প্রশ্ন হ'ল আপনি যেভাবেই তা করতে চান। ক্ষেত্রের নাম বিমূর্ত হয় এটি কোনও ব্যবহারকারীর কাছে কিছুই বলে না। যদি আপনি 4 টি অঞ্চল বলতে দেন তবে এর জন্য কার্যকরী উদ্দেশ্য নামটি ব্যবহার করা আরও ভাল।
হারমান ভ্যান ডের ব্লম

0

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

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

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


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

0

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

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

উদাহরণ স্বরূপ:

আপনার কাছে একটি জিকিউরি ইউআই ডেটপিকার রয়েছে যা নির্বাচনের পরে রেডিও বোতামগুলির একটি তালিকা তৈরি করে যা নির্বাচিত দিনে ইভেন্টগুলি উপস্থাপন করে।

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

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