কীভাবে একটি REST এপিআই অনুকরণ করবেন?


13

আমি একটি নতুন প্রকল্পে কাজ করছি যা একটি তৃতীয় পক্ষের REST এপিআই থেকে ডেটা জিজ্ঞাসা করবে। এটি রিয়েল টাইম স্পোর্টসের ডেটা ফিডের জন্য, সুতরাং যখন কোনও গেমটি বাস্তবে ঘটে তখন ফিডটি কেবল তখনই কাজ করে।

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

আমার একমাত্র অবলম্বনটি আমার নিজের একটি গেম অনুকরণের জন্য কোড লেখা, তবে এটি অনেকটা কাজের মতো মনে হয়। আপনি কিভাবে এই কাছে যেতে হবে?


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

2
একটি মক অবজেক্টথের জন্য নিখুঁত ব্যবহারের কেস: //en.wikedia.org/wiki/Mock_object
কেভিন

উত্তর:


15

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


1
এখানে সমস্যাটি এতটা কোডের একটি নয়। এটি একটি তথ্য। আমি এপিআই মকস বা স্টাবগুলি উপহাস করতে পারি, তবে সমস্যাটি নকল তথ্য তৈরি করছে যা এটি আমাকে দেবে
ডিফেরারো

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

4

কোনও খেলাটি না হওয়া পর্যন্ত অপেক্ষা করুন। ফিড থেকে প্রতিটি ইভেন্ট ক্যাপচার। একটি কাল্পনিক লেখার রিপ্লেতে উপযুক্ত সময়ে ইভেন্ট নেই। ভয়েলা, আপনার কাছে সত্যিকারের ডেটা সহ একটি ফিড সিমুলেটর রয়েছে।


আপনি যদি রুবি ব্যবহারকারী হন, আপনি HTTP প্রতিক্রিয়াগুলি ক্যাপচার এবং পুনরায় খেলতে VCR ব্যবহার করতে পারেন ।
দুসান

2

আমি আপনার নিজের সিমুলেটর লেখার পরামর্শ দিচ্ছি। আপনি এটি সব ধরণের পরিস্থিতি পরীক্ষা করতে ব্যবহার করতে পারেন;

  • সার্ভার সংযোগ গ্রহণ করে কিন্তু প্রতিক্রিয়া জানায় না
  • সার্ভারের সময় শেষ
  • সার্ভার আবর্জনা জবাব ইত্যাদি প্রেরণ করুন ...

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

সম্পাদনা করুন: উদাহরণস্বরূপ, যদি আপনার প্রকল্পটি কোনও তৃতীয় পক্ষের পরিষেবাতে এক্সএমএল জমা দেয় তবে অনুরোধটিতে উদাহরণস্বরূপ অন্তর্ভুক্ত থাকতে পারে <value>50.00</value>। সিমুলেটরটি কোডিং করা যায় (বা, আরও ভাল, কনফিগার করা) যাতে 50.00 => বিস্ফোরিত হতে পারে, 60.00 => আবর্জনা, 70.00 => ঘনিষ্ঠ সংযোগ, এবং আরও অনেক কিছু। ধারণাটি হ'ল সিমুলেটারের আচরণ তার ইনপুটটির উপর নির্ভর করে, যা আপনি প্রতিটি পরীক্ষার ক্ষেত্রে নিয়ন্ত্রণ করেন।


ধন্যবাদ। 'বিশেষ' মানগুলি সম্পর্কে আপনি কী বোঝাতে চান তার একটি উদাহরণ দিতে পারেন?
ডিফেরারো

1
আমার উত্তরটি বিশদভাবে জানিয়েছি।
ররি হান্টার

2

সম্ভবত বুকমেকার কিছু নমুনা ডেটা সরবরাহ করে তা বিবেচনা করে (এবং এটি ইন্টিগ্রেশন পর্বের সময় এটি সংরক্ষণ করা যেতে পারে), আমার পরামর্শটি এই ফিডগুলি এইভাবে সাজানোর জন্য:

  • ইভেন্টের তালিকা
  • নির্ধারিত ইভেন্টগুলির জন্য আপডেট
  • অদ্ভুত আপডেট
  • ফলাফল

সম্ভবত সরবরাহকারী 2 ধরণের আপডেট সরবরাহ করে: পুশ (পোস্ট) এবং পুল (জিইটি)।

এই মুহুর্তে আপনার উচিত

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

উন্নয়ন এবং পরীক্ষা পরিচালনা করুন

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

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

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


2

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

এটি দুর্দান্তভাবে কাজ করে:

  1. ফ্যান্টমজরা একটি ইউআরআইয়ের অনুরোধ করে।
  2. অনুরোধ 127.0.0.1:port এ প্রক্সি সার্ভারে যায়।
  3. আপনার নোড.জেএস প্রক্রিয়াটি স্বচ্ছতার সাথে ব্যবহার করে এগিয়ে চলেছে http-proxy। সুতরাং যে কোনও "সাধারণ" লোডিং (পৃষ্ঠা, চিত্র) কাজ করে।
  4. আপনি যদি কিছু অনুরোধ (এপিআই, মূলত) বাধা বেছে নেন তবে আপনি এর nockজন্য ব্যবহার করেন।

আমার দৃশ্যে, আমি এটি একই প্রক্রিয়াতে শসা জেএস পরীক্ষার সাথে সংযুক্ত করেছি, সুতরাং এটি গিয়েছিল:

  1. টেস্ট রান।
  2. এটি nockদৃশ্যের পরীক্ষার জন্য এইচটিটিপি বিদ্রূপ সেট আপ করে।
  3. এটি সেলেনিয়াম প্রোটোকলের মাধ্যমে ফ্যান্টমজে একটি পৃষ্ঠা লোড করে।

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

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