সিমফোনির সাহায্যে কীভাবে বাহ্যিক RESTful API ব্যবহার করবেন?


10

আমরা আমাদের প্রকল্পগুলির জন্য একটি মাইক্রোসার্চিস আর্কিটেকচার তৈরি করছি, বেশিরভাগ ফ্রন্ট-এন্ড সিমফনি অ্যাপ্লিকেশনগুলি ব্যাক-এন্ড RESTful APIs এর সাথে ইন্টারঅ্যাক্ট করছে।

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

উদাহরণস্বরূপ, একটি ক্লায়েন্ট সত্তা সহ:

  • মতবাদ ব্যবহার করে, আমাদের কেবলমাত্র আমাদের ক্লায়েন্ট শ্রেণিটি নির্ধারণ করতে হবে, এবং এখন আমাদের ক্লায়েন্ট তৈরি করা, আপডেট করা, পুনরুদ্ধার করা সহজ
  • আরএসটি এপিআই পদ্ধতির ব্যবহার করে ক্লায়েন্টরা এপিআইয়ের মাধ্যমে অ্যাক্সেসযোগ্য তবে ক্লায়েন্ট কীভাবে তৈরি হয় (POST), আপডেট (PUT), পুনরুদ্ধার (জিইটি) ইত্যাদি কী তা নির্ধারণ করার জন্য আমাদের প্রচুর কাজ রয়েছে etc.

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

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


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

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

এখানেও একই ধরণের পদ্ধতির প্রয়োগ হয়েছিল। ব্যবসায়ের যুক্তি এখন একটি 'অ্যাকশন' স্তরে রয়েছে, এটি আরএসপি এপি বা ক্লাইম কমান্ড এটি কল করে কিনা তা বিবেচ্য নয়। অ্যালিস্টায়ার ককবার্নের ষড়ভুজ নকশাটি আমাদের ক্ষেত্রে দুর্দান্ত সূচনা পয়েন্ট ছিল: alistair.cockburn.us/Haxagonal+architecture
প্রবাহিত

উত্তর:


2

আমি একটি সিমফনি-ভিত্তিক প্রকল্প তৈরি করেছি যা একটি বাহ্যিক এপিআই (জেএসএন) ব্যবহার করছে; আমি যা করেছি তা হ'ল একটি স্বতন্ত্র ক্লায়েন্ট লাইব্রেরি ("ক্লায়েন্ট লাইব্রেরি" - একটি টুকরো সফ্টওয়্যার, সুরকার প্যাকেজ) তৈরি করছিল, এটির নিজস্ব সংস্থার সেট (পিওপিও); এটি সিমফনি দ্বারা সরবরাহিত ইন্টারফেসগুলি ব্যবহার করে কাঠামোর সাথে সংহত করে (উদাহরণস্বরূপ, কেবলমাত্র একটি কাস্টম ব্যবহারকারী সরবরাহকারী তৈরি করে )।

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

ক্লায়েন্ট লাইব্রেরি ইন্টারফেস (উদাহরণস্বরূপ এটি দেখতে কেমন হতে পারে):

class ApiClient {

   /**
    * @throws SomeApiException If credentials are invalid
    * @return ApiUser
    */
   public function authenticate($username, $password);

   /**
    * @return ApiUser
    */
   public function findUserByEmail($email);

   /**
    * @throws SomeApiException If email is invalid
    * @return void
    */
   public function changeUserEmail(User $user, $newEmail);
}

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

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

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

এবং মতবাদ সম্পর্কে বলতে গেলে, " যন্ত্রের আইন " দেখুন।


1

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


0

এফওয়াইআই, এখন ভি 4.3 এর জন্য একটি এইচটিপিপ্লাইয়েন্ট উপাদান রয়েছে।

https://symfony.com/blog/new-in-symfony-4-3-httpclient-component


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