সার্ভারে এক্সএমএলকে পার্স করা উচিত বা একটি প্রক্সি সরবরাহ করা উচিত এবং ব্রাউজারটিকে পার্স করা উচিত?


11

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

সামগ্রিক তথ্য যদিও মূলত দুটি সেটে বিভক্ত হয়।

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

স্কেলিবিলিটি কারণে আমি সার্ভারের লোডকে যতটা সম্ভব ছোট রাখতে চাই।

আমি আমার সামনে দুটি বিকল্প দেখতে পাচ্ছি:

  1. এমন একটি প্রক্সি সরবরাহ করুন যা তৃতীয় পক্ষের সার্ভারে এক্সএমএল অনুরোধগুলি রুট করার জন্য এবং ক্লায়েন্ট এবং তৃতীয় পক্ষের API এর মধ্যে সরাসরি পিছনে পিছনে ব্যবহৃত হতে পারে Prov
  2. এক্সএমএল থেকে জেএসএনে রূপান্তরটি সার্ভারকে করুন এবং অপ্রয়োজনীয় তথ্য সরিয়ে দিন। এর অর্থ হ'ল আমাদের সার্ভারের জন্য একটি নতুন এপিআই তৈরি করা, যা তৃতীয় পক্ষের API থেকে অনুরোধগুলিতে অনুবাদ করে

ব্যবহারকারীকে ডেটা সরবরাহ করার সর্বোত্তম উপায় কী হবে? (দুটি বিকল্পের মধ্যে একটি হতে হবে না)


কোডটির সাথে এক্সএমএল উত্সের সম্পর্ক কী এটি ব্রাউজারে এটি ব্যাখ্যা করে? কারণ যদি আপনি কিছু তৃতীয় পক্ষের ডেটা থেকে আপনার নিজের (অসমর্থিত) ক্লায়েন্ট কোডটি লিখেছেন তবে প্রথম জিনিসটি আমি মনে করি যে কোনও এক দিন 3 য় পক্ষ এক্সএমএলটিতে কিছুটা পরিবর্তন আনবে এবং ভালভাবে আপনার অ্যাপ্লিকেশনটি ভেঙে দেবে।
এসজেউন 76

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

1
যদি API ঘন ঘন পরিবর্তিত হয় তবে আপনার নিজের স্কিমা ঘোষণা করা এবং মিডলওয়্যার হিসাবে কাজ করে এমন একটি পরিষেবা রয়েছে যা আপনার ক্লায়েন্টের প্রত্যাশা এমন কিছুতে ডেটা ম্যানিপুলেটেড করা সম্ভবত আপনার সময়ের জন্য উপযুক্ত। আমি মনে করি প্রশ্নটি 'কোনটি সহজ, ক্লায়েন্টকে আপডেট করা বা সার্ভার আপডেট করা যায়?' এ নেমে আসে?
হাইপারবোল

এটি ঘন ঘন হয় না। এটি দশ বছরে একবার পরিবর্তিত হয়েছে।
অ্যামেথিস্টড্রাগন

উত্তর:


12

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

একটি প্রক্সি একটি পছন্দসই পছন্দ হবে:

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

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

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

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

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

    উদাহরণস্বরূপ, যদি এজেএক্স অনুরোধের সংখ্যাটি একটি সমস্যা হয়ে যায় বা দ্বি-মুখী যোগাযোগের মডেলটি বোঝায়, আপনি ওয়েব সকেটগুলি প্রয়োগ করতে পারেন।

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

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

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

আপনি খেয়াল করতে পারেন যে আমি জেএসওএন, পারফরম্যান্স, ক্যাশিং ইত্যাদি সম্পর্কে কথা বাদ দিয়েছি তার কারণ রয়েছে:

  • জেএসএন বনাম এক্সএমএল: সঠিক প্রযুক্তিটি বেছে নেওয়া আপনার পক্ষে up আপনি JSON এর মাধ্যমে এক্সএমএলটির অতিরিক্ত তাপমাত্রা পরিমাপ করে এটি করেন, ডেটা সিরিয়ালাইজ করতে সময় লাগে এবং পার্সিংয়ের স্বাচ্ছন্দ্য।

  • পারফরম্যান্স: বিভিন্ন বাস্তবায়ন মাপদণ্ড, দ্রুততম চয়ন করুন, তারপরে এটি প্রোফাইল করুন এবং প্রোফাইলার থেকে প্রাপ্ত ফলাফলের ভিত্তিতে এটি অনুকূলিত করুন। যখন আপনি অ-কার্যক্ষম প্রয়োজনে নির্দিষ্ট করা কর্মক্ষমতা অর্জন করেন তখন থামুন।

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

  • ক্যাচিং: আপনার ওয়েব অ্যাপ্লিকেশনটিকে দ্রুত বোধ করা, ব্যান্ডউইদথ হ্রাস করা ইত্যাদি কৌশলগুলির মধ্যে একটি ক্যাচিং aching

    1. নিশ্চিত হয়ে নিন যে আপনি ক্লায়েন্ট ক্যাশেও ব্যবহার করেছেন (সার্ভার-সাইড ক্যাচিং আপনার এবং গ্রাহকদের মধ্যে ব্যান্ডউইথের ব্যবহার হ্রাস করবে না), এইচটিটিপি শিরোনামগুলি সঠিকভাবে স্থাপন করা প্রায়শই জটিল is

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

    3. কেবল ক্যাচিংয়ে ফোকাস করবেন না। খনন, উদাহরণস্বরূপ, পাশাপাশি গুরুত্বপূর্ণ। অনুরোধের সংখ্যা হ্রাস করাও উপকারী হতে পারে।


1
+1 আমার ক্যাচিংয়ের কথা উল্লেখ করা উচিত কিনা সে সম্পর্কে আমি কিছুটা দ্বিধায় পড়েছিলাম এবং শেষ পর্যন্ত এর বিরুদ্ধে সিদ্ধান্ত নিয়েছি। এখনও এটি আনতে মূল্যবান, ভাল পয়েন্ট।
জেনসজি

7

একটা হল তৃতীয় : বিকল্প যা আপনি দেখেন নি, ক্রস অরিজিন রিসোর্স শেয়ারিং (CORS)

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

উদাহরণ : বলুন যে আপনার সাইটটি http://my-cool-site.com এবং আপনার একটি ডোমেন http://third-party-site.com এ একটি তৃতীয় পক্ষের API রয়েছে , যা আপনি এজেএক্সের মাধ্যমে অ্যাক্সেস করতে পারবেন।

এবং ধরে নেওয়া যাক যে my-cool-site.com থেকে আপনার সার্ভার করা একটি পৃষ্ঠা তৃতীয় পক্ষ-সাইট ডটকমকে একটি অনুরোধ করেছে। সাধারণত, ব্যবহারকারী ব্রাউজার একই-উত্স সুরক্ষা নীতি অনুসারে আপনার নিজস্ব ডোমেন / সাবডোমেন ছাড়া অন্য যে কোনও সাইটে এজ্যাক্স কল প্রত্যাখ্যান করবে । তবে যদি ব্রাউজার এবং তৃতীয় পক্ষের সার্ভার সিওআরএস সমর্থন করে তবে নিম্নলিখিত জিনিসগুলি ঘটে:

  • ব্রাউজারটি নিম্নলিখিত HTTP শিরোনামটি তৃতীয় পক্ষ-সাইট ডটকমকে প্রেরণ করবে

    Origin: http://my-cool-site.com
  • যদি তৃতীয় পক্ষের সার্ভারটি আপনার ডোমেন থেকে অনুরোধগুলি গ্রহণ করে, তবে এটি নিম্নলিখিত HTTP শিরোনামের সাথে প্রতিক্রিয়া জানাবে:

    Access-Control-Allow-Origin: http://my-cool-site.com
  • সমস্ত ডোমেনকে অনুমতি দেওয়ার জন্য, তৃতীয় পক্ষের সার্ভারটি এই শিরোনামটি প্রেরণ করতে পারে:

    Access-Control-Allow-Origin: *
  • আপনার সাইটের অনুমতি না থাকলে ব্রাউজার ত্রুটি ছুঁড়ে দেবে।

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

আমি একটি পাওয়া CORS উপর চমৎকার ব্যাখ্যা : যার উপর আপনার কাছে অন্য উপায় এই কাজ করতে পাবেন jsonp । তবে জেএসএনপি-র আপনার কোডে ন্যায্য পরিমাণের পরিবর্তন দরকার।

একটি XMLHttpRequestসিওআরএস অনুরোধ করার জন্য আপনি কেবল ফায়ারফক্স 3.5.5+, সাফারি 4+ এবং ক্রোম এবং আই 8 XDomainRequest+ এ অবজেক্ট ব্যবহার করুন। XMLHttpRequestঅবজেক্ট ব্যবহার করার সময় , ব্রাউজারটি যদি দেখে যে আপনি ক্রস-ডোমেন অনুরোধ করার চেষ্টা করছেন এটি নির্বিঘ্নে CORS আচরণকে ট্রিগার করবে।

এখানে একটি জাভাস্ক্রিপ্ট ফাংশন যা আপনাকে ক্রস ব্রাউজারের CORS অবজেক্ট তৈরি করতে সহায়তা করে।

function createCORSRequest(method, url){
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        // XHR has 'withCredentials' property only if it supports CORS
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined"){ // if IE use XDR
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}

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



1
আপনি কি লিঙ্কগুলিতে সামগ্রীর সংক্ষিপ্তসার চেষ্টা করে দেখতে পারেন? লিঙ্কগুলি লিঙ্ক-পচা হওয়ার প্রবণতা এবং সে জন্য এসই তে তথ্য জানানোর সর্বোত্তম উপায় নয় :)
অগস্ট

আফসোসভাবে তৃতীয় পক্ষের সার্ভার সিওআরএস সমর্থন করে না।
অ্যামেথিস্ট্রড্রাগন

4

স্কেলিবিলিটি কারণে আমি সার্ভারের লোডকে যতটা সম্ভব ছোট রাখতে চাই

আমি মনে করি এটি কমবেশি উত্তরের দিকে নির্দেশ করছে। ক্লায়েন্টকে প্রাক প্রসেসড ডেটা সরবরাহ করা বা না দেওয়া মূলত এর উপর নির্ভর করে:

  1. ট্র্যাফিকের ক্ষেত্রে পার্থক্য
  2. প্রসেসিং এর কর্মক্ষমতা প্রভাব
  3. ক্লায়েন্ট উপর একটি পৃথক তথ্য বিন্যাসের প্রভাব

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

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

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


+1 এবং যোগ করা - বিভিন্ন পরিস্থিতিতে কর্মক্ষমতা পরীক্ষা করুন।
SeraM

0

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

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