RESTful API এবং i18n: প্রতিক্রিয়াটি কীভাবে ডিজাইন করবেন?


15

আমরা একটি RESTful এপিআই ডিজাইন করছি যা মূলত একক ক্লায়েন্টের চাহিদা মেটাতে উদ্দিষ্ট। খুব নির্দিষ্ট পরিস্থিতির কারণে, এই ক্লায়েন্টকে যতটা সম্ভব কম আবেদন করা উচিত।

অ্যাপ্লিকেশনগুলি অনুরোধগুলিতে একটি স্বীকৃতি-ভাষা শিরোনামের মাধ্যমে i18n পরিচালনা করে। এটি ক্লায়েন্টকে একটি বৈশিষ্ট্য ব্যতীত যা করা দরকার সেগুলির জন্য কাজ করে, যেখানে ক্লায়েন্টকে সমস্ত উপলব্ধ লোকেলগুলিতে একক শেষ পয়েন্টে একটি অনুরোধের প্রতিক্রিয়াগুলি সংরক্ষণ করতে হবে।

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

আমরা এখন পর্যন্ত বিবেচনা করা বিকল্পগুলি:

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

কোনটি সেরা বিকল্প?

উত্তর:


22

আপনি একাধিক ভাষা জিজ্ঞাসার দুটি কার্যকর উপায় বর্ণনা করেছেন। হয় ভাল কাজ করা উচিত। আমি আমার নিজের কোডের জন্য সুস্পষ্ট ভাষা অনুরোধ পরামিতিটি বেছে নেব।

টিএল; ডিআর ব্যাকস্টোরি

একটি স্বীকৃত-ভাষা শিরোনাম আছে । নোট, Acceptনা Accepted। এটি HTTP সামগ্রী আলোচনার একটি স্ট্যান্ডার্ড অংশ। প্রতিক্রিয়াটি সাধারণত একটি সামগ্রী-ভাষার শিরোনাম সেট করে ।

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

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

তবে, HTTP শিরোনামগুলিতে REST এপিআই পরামিতিগুলি সিগন্যাল করার উপযুক্ততা সম্পর্কে যথেষ্ট বিতর্ক রয়েছে। এটি কিছুটা ওয়েস্টর বা ওয়েট্রেস উপস্থিত হওয়ার অপেক্ষা না করে কোনও রেস্তোঁরা enteringুকে আপনার হোস্ট বা মাট্রে ডি'র কাছে আপনার বিশদ অর্ডার ঝাপসা করার মতো। এটি কাজ করতে পারে, এবং ভালভাবে কাজ করতে পারে যেমন হোস্টের নির্দেশিত আদেশটি পানীয় বা অ্যাপেটিজারগুলির সাথে সম্পর্কিত হয় - হোস্টটি দ্রুত যা দেখতে পারে বা আপনার সার্ভারে দ্রুত যোগাযোগ করতে পারে communicate তবে এটিকে প্রোটোকল লঙ্ঘন হিসাবেও দেখা যায়, ভুল স্তর / স্তরে বা ভুল প্লেয়ারকে সম্বোধন করা।

দ্বিতীয় বিকল্পটি হ'ল সুস্পষ্ট অনুরোধের পরামিতি। আপনি পরামর্শ দিন ?all_languages=true। এটি অত্যধিক নির্দিষ্ট বলে মনে হয়। lang=en,fr,es(একাধিক তালিকাভুক্ত ভাষাগুলির অনুমতি দিন) lang=*বা lang=all(প্রতিটি উপলব্ধ ভাষা নির্দিষ্ট করুন ) এর মতো কিছু আরও সাধারণ বলে মনে হচ্ছে। এটি URL বা অনুরোধ সংস্থায় প্রকাশ করা যেতে পারে।

যে কোনও উপায়ে, আপনার বহু-ভাষাগুলি প্রতিক্রিয়া সহজেই ফিরে আসা জেএসএন পে-লোডে এনকোড করা যায়:

[ { "lang": "en", "content": "As Gregor Samsa awoke one morning..." },
  { "lang": "de", "content": "Als Gregor Samsa eines Morgens..." },
  ...
]

শেষ পর্যন্ত, এই পদ্ধতির কোনওটিই আপনার পক্ষে ভালভাবে কাজ করা উচিত। হয় একটি "সামঞ্জস্যপূর্ণ, সুসংগঠিত RESTful API নকশা" হিসাবে দেখা যেতে পারে। যার দৃ better় সংকল্পটি বেশিরভাগই পিগিগ্যাব্যাকিংয়ের যথাযথতার প্রতি আপনার মনোভাবের উপর নির্ভর করে (এবং এইচটিপিপি বিষয়বস্তু আলোচনার শিরোনামের সামান্যতম পরিবর্তনের জন্য)।

আমার নিজের পছন্দটি হ'ল একটি এপিআই অনুরোধের সমান অংশ হিসাবে শিরোনাম এবং অন্যান্য পরামিতিগুলিকে অন্তর্নিহিত করা নয় । সুস্পষ্ট langবা languageপরামিতি আমার কাছে পরিষ্কার মনে হচ্ছে। কিন্তু যেহেতু HTTP- র ক্রিয়া (যেমন GET, PUT, POST, PATCH, ...), হেডার অংশ এবং সমালোচনামূলক থেকে / অনুরোধের ব্যাখ্যার সাথে intermixed, আমি সত্য বলিয়া স্বীকার করা খাম বনাম বিষয়বস্তু পার্থক্য একটি বিট কৃত্রিম এবং ঝাপসা হয়। বেশিরভাগ ডিজাইনের সিদ্ধান্তের মতোই খাঁটি বিশেষজ্ঞরা এর আলাদাভাবে উত্তর দেন এবং ওয়াইএমএমভি।


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