কীভাবে অনুসন্ধানগুলি একটি বিশিষ্ট ইন্টারফেসের সাথে ফিট করে?


137

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

  • GET - তালিকা সংগ্রহ বা উপাদান পুনরুদ্ধার
  • পুট - সংগ্রহ বা উপাদান প্রতিস্থাপন
  • পোস্ট - সংগ্রহ বা উপাদান তৈরি করুন
  • DELETE - ওয়েল, ERM, সংগ্রহ বা উপাদান মুছতে

যাইহোক, এটি "অনুসন্ধান" ধারণাটি কভার করে বলে মনে হচ্ছে না।

উদাহরণস্বরূপ ওয়েব সার্ভিসের একটি স্যুইট ডিজাইনের ক্ষেত্রে যা জব অনুসন্ধান সাইটকে সমর্থন করে আপনার নিম্নলিখিত প্রয়োজনীয়তা থাকতে পারে:

  • পৃথক কাজের বিজ্ঞাপন পান
    • পান করার জন্যdomain/Job/{id}/
  • কাজের বিজ্ঞাপন তৈরি করুন
    • পোস্ট করুনdomain/Job/
  • কাজের বিজ্ঞাপন আপডেট করুন
    • রাখুন করারdomain/Job/
  • কাজের বিজ্ঞাপন মুছুন
    • DELETE করতেdomain/Job/

"সমস্ত কাজ পান" খুব সহজ:

  • পান করার জন্যdomain/Jobs/

যাইহোক, কাজ "অনুসন্ধান" কীভাবে এই কাঠামোর মধ্যে পড়ে?

আপনি এটি "তালিকা সংগ্রহ" এর একটি বৈকল্পিক দাবি করতে পারেন এবং এটি প্রয়োগ করেছেন:

  • পান করার জন্যdomain/Jobs/

তবে অনুসন্ধানগুলি জটিল হতে পারে এবং এটি এমন একটি অনুসন্ধানের উত্পাদন সম্ভব যা একটি দীর্ঘ জিইটি স্ট্রিং তৈরি করে। এটি হ'ল এখানে একটি এসও প্রশ্ন উল্লেখ করা হচ্ছে, প্রায় 2000 টি অক্ষরের চেয়ে বেশি জিইটি স্ট্রিং ব্যবহার করার বিষয় রয়েছে।

"জব" উদাহরণটি চালিয়ে যাওয়া - একটি উদাহরণ হতে পারে সন্ধানী অনুসন্ধানে।

আমি "প্রযুক্তি", "কাজের শিরোনাম", "শৃঙ্খলা" পাশাপাশি ফ্রি-পাঠ্য কীওয়ার্ড, চাকরির বয়স, অবস্থান এবং বেতনের দিকগুলি অনুসন্ধান করার অনুমতি দিতে পারি।

তরল ব্যবহারকারী ইন্টারফেস এবং বিপুল সংখ্যক প্রযুক্তি এবং কাজের শিরোনামের সাহায্যে এটি সম্ভবত সম্ভব যে কোনও অনুসন্ধানে বিপুল সংখ্যক মুখোমুখি পছন্দ থাকতে পারে।

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

সেই পরিস্থিতিতে অনুসন্ধানের তথ্যটি সঠিকভাবে প্রেরণ হবে কিনা তা নিশ্চিত করার জন্য কোনও পুট বা পোষ্ট স্থানান্তর করা বাঞ্ছনীয়। উদাহরণ:

  • পোস্ট করুনdomain/Jobs/

কিন্তু শব্দার্থকভাবে এটি একটি সংগ্রহ তৈরি করার নির্দেশ

আপনি পারে বলতে আপনি একটি অনুসন্ধান সৃষ্টির হিসাবে এই প্রকাশ করার করব:

  • পোস্ট করুনdomain/Jobs/Search/

বা (নীচে বার্নগ্রাম দ্বারা প্রস্তাবিত)

  • পোস্ট করুনdomain/JobSearch/

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

সুতরাং, শব্দার্থগতভাবে এটি একটি জিইটি , তবে আপনার যা প্রয়োজন তা সমর্থন করার জন্য জিইটি গ্যারান্টিযুক্ত নয়।

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


3
আমি প্রায়শই জিইটি ব্যবহার করার ইচ্ছা করি domain/Jobs?keyword={keyword}। এটি আমার পক্ষে ঠিক কাজ করে :) আমার আশা, SEARCHক্রিয়াটি একটি মান হয়ে যাবে। প্রোগ্রামার্স.স্ট্যাক্কেচেঞ্জঞ্জ
প্রশ্নগুলি

হ্যাঁ, আমি দেখতে পাচ্ছি যে তুচ্ছ উদাহরণের জন্য কোনও সমস্যা নেই। তবে আমরা যে সরঞ্জামটি তৈরি করছি তাতে এটি অবিশ্বাস্য নয় যে আমরা একটি জটিল অনুসন্ধান শেষ করব যা ফলস্বরূপ 2000 টি অক্ষরের চেয়ে বেশি সময় ধরে জিইটি স্ট্রিংয়ের ফলস্বরূপ। তখন কি?
রব বেলি

আসলে একটি খুব ভাল পয়েন্ট। একটি সংক্ষেপণ প্রযুক্তি নির্দিষ্টকরণ সম্পর্কে কি?
কেনার্ড

2
এইচটিটিপি স্পেক দ্বারা একটি বডি সহ জিইটি অনুমোদিত, মিডলওয়্যার দ্বারা সমর্থন করা যেতে পারে (কখনও কখনও নয়);) এবং অনুশীলন হিসাবে অনুকূল নয়। এটি পর্যায়ক্রমে স্ট্যাকেক্সচেঞ্জে আসে। stackoverflow.com/questions/978061/http-get-with-request-body
রব

2
আমি পোস্ট জব সন্ধানের সাথে একটি আসল অনুসন্ধান সত্তা তৈরি করে এবং একটি চাকরি অনুসন্ধান আইডি ফিরিয়ে দিয়ে শেষ করেছি। তারপরে চাকরি পাবেন? জব সন্ধান = জব সন্ধানআইডি প্রকৃত চাকরির সংগ্রহটি ফেরত দেয়।
সেরাদ

উত্তর:


93

আপনি ভুলে যাবেন না যে অন্যান্য সমাধানগুলির তুলনায় জিইটি অনুরোধগুলির কিছু উচ্চতর সুবিধা রয়েছে:

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

2) এই সমস্ত ধারণাগুলি কেবল ব্যবহারকারী এবং অনুসন্ধান ইঞ্জিন নয়, একটি আর্কিটেকচারাল, এপিআই নকশার দিক থেকে গুরুত্বপূর্ণ।

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

এই সমস্ত বিবেচনা করে আমার পরামর্শটি হ'ল:

ক) চতুর প্যারামিটার কাঠামো ব্যবহার করে আপনার জিইটি-র অভ্যন্তরে ফিট করতে সক্ষম হওয়া উচিত । চরম ক্ষেত্রে আপনি এমনকি এই গুগল অনুসন্ধানের মতো কৌশলও সন্ধান করতে পারেন যেখানে আমি অনেকগুলি পরামিতি এখনও সেট করেছি এটি একটি সুপার শর্ট url।

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


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


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

@ রববাইলি ইয়ে ব্রাউজারটি কেবল ব্যবহারের ঘটনা ছিল। আমি এই সত্যটি প্রকাশ করতে চেয়েছিলাম যে সামগ্রিকভাবে আপনার অনুসন্ধানের URL টি স্ট্রিং দ্বারা প্রতিনিধিত্ব করা হয়েছে। যা উত্তরের পরে অন্যান্য পয়েন্টগুলির সাথে ব্যবহারযোগ্যতায় অনেক আরাম পেয়েছে।
p1100i

বি বিন্দুতে, এটি কি কোনও পোস্টের প্রতি আমার নিজস্ব রেফারেন্সের একটি সাধারণ প্রকরণ, তার পরিবর্তে domain/Jobs/Search/সম্ভবত domain/JobsSearch/, বা আপনি কিছু আলাদা বোঝাতে চেয়েছিলেন? আপনি কি স্পষ্ট করতে পারেন?
রব বেইলি

7
আমি কেন এই ধারণাটি পেয়ে যাচ্ছি যে সমাধানের অংশের চেয়ে REST প্রায়শই সমস্যার একটি অংশ?
জেনসজি

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

12

টিএল; ডিআর: ফিল্টারিংয়ের জন্য জিইটি, অনুসন্ধানের জন্য পোস্ট করুন

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

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

-

এটি কিছুক্ষণ হয়ে গেছে এবং আমার আসল পোস্টটি কিছুটা slালু ছিল তাই আমি ভেবেছিলাম আপডেট করব।

জিইটি হ'ল বেশিরভাগ ধরণের ডেটা, আরএসটি সংস্থান সংগ্রহ, কোনও সংস্থার কাঠামোগত ডেটা, এমনকি একক পেলোড (চিত্র, ডকস, ইত্যাদি) ফিরিয়ে দেওয়ার জন্য স্বজ্ঞাত পছন্দ।

জিইটি, পুট, ডিলিট ইত্যাদির অধীনে ফিট না বলে এমন কোনও কিছুর জন্য ক্যাচল পদ্ধতি হ'ল পোষ্ট

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

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

যেভাবেই হোক, আপনি জিইটি বা পোস্টে অনুসন্ধান করছেন কিনা তার চেয়ে ধারাবাহিকতা সম্ভবত আরও গুরুত্বপূর্ণ।

আশাকরি এটা সাহায্য করবে.


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

"ফিল্টারিং" এবং "অনুসন্ধান" এর মধ্যে কোনও পার্থক্য নেই।
নিকোলাস শ্যাঙ্কস

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

@ স্টেভেনডেসু ঠিক সে কারণেই আমি উভয়ের জন্য পোস্ট ব্যবহার করেছি (অনুসন্ধান তৈরি করা) :-)
ইয়ামাজোরস

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

10

REST এ, সংস্থান সংজ্ঞাটি খুব বিস্তৃত। এটি আসলে তবে আপনি কিছু ডেটা বান্ডিল করতে চান।

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

উদাহরণস্বরূপ, প্রধান গুগল ইউআরআই "ইন্টারনেটের প্রতিটি সাইটের লিঙ্ক" এর সংগ্রহ সংস্থানকে নির্দেশ করে। ক্যোয়ারী প্যারামিটারগুলি যে সাইটগুলিতে আপনি দেখতে চান তাতে সংকীর্ণ।

(ইউআরআই = সর্বজনীন সংস্থান শনাক্তকারী, যার মধ্যে ইউআরএল = সর্বজনীন উত্স লোকেটার, যেখানে পরিচিত "http: //" একটি ইউআরআইয়ের জন্য ডিফল্ট ফর্ম্যাট। যদিও লোকেরা এগুলি আন্তঃব্যবহারযোগ্যভাবে ব্যবহার করে))

  • যেহেতু আপনার উদাহরণটিতে আপনি যে সংস্থানটি সন্ধান করছেন সেটি হ'ল চাকরি সংগ্রহ, সুতরাং এটি অনুসন্ধানে বুদ্ধিমান হয়

সাইট / চাকরীগুলি পান? টাইপ = ব্লাহ এবং অবস্থান = এখানে এবং ইত্যাদি = ইত্যাদি

(প্রত্যাবর্তন) {চাকরি: [{কাজ: ...}]}

এবং তারপরে POST ব্যবহার করুন, যা সেই সংকলনে নতুন আইটেম যুক্ত করতে সংযোজন বা প্রক্রিয়া ক্রিয়া:

পোষ্ট সাইট / কাজ

{কাজ: ...}

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

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

যদিও আমি ফ্যালব্যাক পরিকল্পনা হিসাবে এটি ব্যবহার করব।

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

"অনুসন্ধান" থেকে "তৈরি করুন" এর মধ্যে পার্থক্য করতে। কয়েকটি বিকল্প রয়েছে যা REST অনুশীলনের সাথে সামঞ্জস্যপূর্ণ:

  • আপনি ইউআরআইতে সংগ্রহের নামে কিছু যুক্ত করে যেমন চাকরীর পরিবর্তে চাকরি-অনুসন্ধান করতে পারেন। এর অর্থ হ'ল আপনি অনুসন্ধান সংগ্রহটিকে একটি পৃথক সংস্থান হিসাবে বিবেচনা করছেন।

  • যেহেতু POST এর শব্দার্থবিজ্ঞান উভয়ই সংযোজন বা প্রক্রিয়াজাতকরণ, তাই আপনি পে-লোড দিয়ে অনুসন্ধান সংস্থাগুলি সনাক্ত করতে পারেন। পছন্দ {জব: ...} বনাম {অনুসন্ধান: ... Like। এটি পোস্ট করতে বা যথাযথভাবে প্রক্রিয়া করা পোস্ট যুক্তির উপর নির্ভর করে।

এটি প্রায় একটি নকশা / বাস্তবায়ন পছন্দ। আমি মনে করি না একটি পরিষ্কার সম্মেলন আছে।

সুতরাং, যেমন আপনি ইতিমধ্যে রেখেছেন, ধারণাটি হ'ল সংগ্রহ সংস্থান সংজ্ঞা দেওয়া jobs

সাইট / কাজ

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

(ইউআরআই-এর সাথে স্টাইলের সম্মেলন হ'ল হাইফেন দ্বারা পৃথক শব্দের সাথে সমস্ত ছোট হাতের অক্ষর ব্যবহার করা But তবে এর অর্থ এই নয় যে আপনাকে সেভাবে এটি করতে হবে))

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


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

বাস্তবায়নের ক্ষেত্রে (আমরা নোড এবং এক্সপ্রেস ব্যবহার করছি), এর অর্থ সম্ভবত routeপ্রক্রিয়াজাতকরণের পছন্দটি পরিচালনা করতে পারে না। আমাকে
রব বেলি

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

8

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

আপনি টোকেনগুলি ব্যবহার করেন $select=এবং $filter=তাই আপনি এমন একটি ইউআরআই দিয়ে শেষ করবেন যা দেখতে এরকম কিছু দেখায়:

/users?$select=Id,Name$filter=endswith(Name, 'Smith')

এছাড়াও আপনি ব্যবহার পেজিং কি করতে পারেন $skipএবং $topএবং ক্রম।

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


6
একটি আকর্ষণীয় লিঙ্ক এবং দেখার মতো, তবে এটি কী বর্ণিত মৌলিক সমস্যার সমাধান করে, যে জিইটি অনুরোধগুলি ক্যোয়ারী স্ট্রিংয়ে 2000 টিরও বেশি অক্ষরকে সমর্থন করে না এবং এটি সম্পূর্ণভাবে সম্ভব যে কোয়েরিটি এর চেয়ে দীর্ঘতর হতে পারে?
রব বেলি

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

আপনি কি একটি "নির্দিষ্ট শেষ পয়েন্ট যা আপনি জিইটি কল করেন" এর জন্য আপনার দৃষ্টিভঙ্গি ব্যাখ্যা করতে পারেন? আপনি কীভাবে ভাবতে পারেন যে এন্ডপয়েন্টটি দেখতে পাবে?
রব বেলি

@ রব্বাইলি নিশ্চিত - আবার আপনি নিশ্চিত নন যে আপনি কোন প্রযুক্তি ব্যবহার করছেন তবে এএসপি.এনইটি-তে আমি একটি নির্দিষ্ট নিয়ন্ত্রক তৈরি করেছি JobsNearMeAddedInTheLast7Daysযা ওডিটার জন্য অত্যন্ত দীর্ঘ / জটিল কোয়েরিটি encapsulate করতে হবে এবং তারপরে এটি কেবল জিইটি কলের মাধ্যমে প্রকাশ করা হবে ।
ট্রেভর পিলি

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

5

একটা পদক্ষেপ বিবেচনা করতে একটি সংগ্রহ রিসোর্স যেমন যতটা সম্ভব প্রশ্নের সেট চিকিত্সা করা হয় /jobs/filters

POSTএই সম্পদ অনুরোধ, শরীর ক্যোয়ারী পরামিতি সঙ্গে, হয় একটি নতুন রিসোর্স তৈরি করবে বা একটি বিদ্যমান সমতুল্য ফিল্টার সনাক্ত এবং একটি URL তার আইডি ধারণকারী ফিরে /jobs/filters/12345

আইডি তারপর কাজের জন্য একটি অনুরোধ পান ব্যবহার করা যেতে পারে: /jobs?filter=12345GETফিল্টার রিসোর্সে পরবর্তী অনুরোধগুলি ফিল্টারটির সংজ্ঞা ফিরিয়ে দেবে।

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

এই পদ্ধতির একটি অপূর্ণতা হ'ল আপনি ইউআরএলটির পঠনযোগ্যতা হারাবেন (যদিও GETএটি ফিল্টার সংস্থার জন্য অনুরোধ হলেও সংজ্ঞাটি পুনরুদ্ধার করে প্রশমিত করা যেতে পারে )। এই কারণে আপনি /jobsকোনও ফিল্টার সংস্থার পক্ষে সমর্থন করার মতো সংস্থানটিতে ক্যোয়ারী প্যারামিটারগুলির একই বা একটি উপসেটটিকে সমর্থন করতেও পারেন । এটি ছোট প্রশ্নের জন্য ব্যবহার করা যেতে পারে। যদি এই বৈশিষ্ট্যটি সরবরাহ করা হয়, তবে দুই ধরণের ফিল্টারিংয়ের মধ্যে ক্যাশিবিলিটি বজায় রাখার জন্য, উত্সটিতে কোয়েরি প্যারামিটার ব্যবহার করার সময় /jobs, বাস্তবায়নের অভ্যন্তরীণভাবে একটি ফিল্টার উত্স তৈরি / পুনরায় ব্যবহার করা উচিত এবং URL হিসাবে সূচিত একটি 302বা 303স্থিতি ফিরিয়ে আনতে হবে /jobs?filter=12345


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

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

আপনি কেবল ফিল্টারগুলি সংরক্ষণ না করে স্টোর সংরক্ষণের প্রয়োজনীয়তাটি অতিক্রম করতে পারেন। আরইএসটি সম্পর্কে কিছুই গ্যারান্টি দেয় না যে এটি অবিচল। আপনি একটি অনুরোধ করতে পারেন GET /jobs/37এবং ফলাফলটি পেতে পারেন, তারপরে কেউ সংস্থানটি মুছে ফেলবে এবং ২ সেকেন্ড পরে একই অনুরোধটি 404 ফেরত দেয় Similarly একইভাবে যদি আপনি POST /searchesএবং আপনাকে কোনও অনুসন্ধানের ফলাফলে পুনঃনির্দেশিত করা হয় (অনুসন্ধানটি তৈরি করা হয় এবং আপনি একটি 201 দিয়ে পান সংস্থানটিতে অবস্থানের শিরোনাম), 2 সেকেন্ড পরে ফলাফলটি মেমরি থেকে মুছে ফেলা হতে পারে এবং পুনরায় জজ করতে হবে। দীর্ঘমেয়াদী স্টোরেজের প্রয়োজন নেই।
স্টিভেন্ডেসু

5

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

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

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

সংজ্ঞা অনুসারে, একটি উত্স হ'ল এমন একটি বিষয় যা নিজেই একটি জিনিস হিসাবে উল্লেখ করা গুরুত্বপূর্ণ।

রিসোর্স ওরিয়েন্টেড আর্কিটেকচারে (চলুন এখন থেকে ব্রিভির জন্য একে আরওএ বলি) আমরা সেই সংস্থানটিতে ফোকাস করি যা প্রচুর জিনিস হতে পারে:

  • একটি নথির একটি সংস্করণ
  • দস্তাবেজের সর্বশেষ আপডেট হওয়া সংস্করণ
  • একটি অনুসন্ধান থেকে আসে
  • বস্তুর একটি তালিকা
  • আমি প্রথম নিবন্ধটি একটি ই-বাণিজ্য থেকে কিনেছি

উত্সের ক্ষেত্রে এটি যা অনন্য করে তোলে তা হ'ল অ্যাড্রেসিবিলিটি যার অর্থ এটির কেবল একটি ইউআরআই রয়েছে

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

আপনি ডাব্লু 3 এর মূল নথিতে ঠিক কী এবং ইউআরআই এর নীতিগুলি খুঁজে পেতে পারেন:

https://www.w3.org/DesignIssues/Axioms

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

আরএসএফুল এ আরওএ প্যাটার্ন অনুসরণ করা অন্য অনুসন্ধানের চেয়ে কোনও অনুসন্ধান নয়, কেবলমাত্র পার্থক্য হ'ল সংস্থানগুলি কেবলমাত্র বস্তুর সাথে সরাসরি সম্পর্কের পরিবর্তে গণনা থেকে আসে। নীতির ভিত্তিতে আমি নিম্নোক্ত প্যাটার্নের ভিত্তিতে একটি সাধারণ গাণিতিক গণনা পরিষেবাটি সম্বোধন করতে এবং প্রাপ্ত করতে পারলাম:

http://myapi.com/sum/1/2

যেখানে যোগফল, 1 এবং 2 সংশোধন করা যেতে পারে তবে গণনার ফলাফলটি অনন্য এবং এটি আরাধ্য able পুনঃবৃত্তি / যোগফল / 1/2 এবং / স্তর / 5/4 নীতিগুলি পুরোপুরি আটকে থাকে।


3

GET ঠিক আছে, যদি আপনার কাছে স্থিতিশীল সংগ্রহ থাকে যা সর্বদা একটি ইউআরআইয়ের জন্য একই ফলাফল (প্রতিনিধিত্ব) প্রদান করে। এটি এও বোঝায় যে এই উপস্থাপনাগুলি তৈরি করার ডেটা কখনই পরিবর্তিত হয় না। উত্সটি কেবল পঠনযোগ্য একটি ডাটাবেস।

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

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

যাইহোক, আমি জানি লোকেরা এটি আলাদাভাবে করে। REST লঙ্ঘন করা কতটা সুবিধাজনক হতে পারে তা আমাকে বোঝানোর দরকার নেই।


আআআআআআআআআআআআআআআ - সুতরাং এটি কীভাবে কাজ করার কথা! ধন্যবাদ!
রব বেলি

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

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

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