HATEOAS: পরম বা আপেক্ষিক ইউআরএল?


84

হেটিওএএস ব্যবহার করে একটি রেস্টস্টুল ওয়েব সার্ভিস ডিজাইনের ক্ষেত্রে সম্পূর্ণ ইউআরএল (" http: // সার্ভার: পোর্ট / অ্যাপ্লিকেশন / গ্রাহক / 1234 ") বনাম কেবল পথ ("/ অ্যাপ্লিকেশন / গ্রাহক / 1234 ")?

উত্তর:


83

লোকেরা যখন "আপেক্ষিক ইউআরআই" বলে তখন একটি সূক্ষ্ম ধারণাগত অস্পষ্টতা থাকে।

দ্বারা RFC3986 সংজ্ঞা , একটি জেনেরিক কোনো URI রয়েছে:

  URI         = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

  hier-part   = "//" authority path-abempty
              / path-absolute
              / path-rootless
              / path-empty

     foo://example.com:8042/over/there?name=ferret#nose
     \_/   \______________/\_________/ \_________/ \__/
      |           |            |            |        |
   scheme     authority       path        query   fragment

কৌতূহলোদ্দীপক বিষয় হ'ল, যখন পরিকল্পনা এবং কর্তৃত্ব বাদ দেওয়া হয়, "পথ" অংশটি নিজেই হয় পরম পাথ (শুরু হয় /) বা "মূলবিহীন" আপেক্ষিক পথ হতে পারে। উদাহরণ:

  1. একটি পরম ইউআরআই বা একটি সম্পূর্ণ ইউআরআই:"http://example.com:8042/over/there?name=ferret"
  2. এবং এটি একটি আপেক্ষিক ইউরি, সম্পূর্ণ পথ সহ :/over/there
  3. এবং এটি একটি আপেক্ষিক ইউরি, আপেক্ষিক পথ সহ : hereবা ./hereবা ../hereবা ইত্যাদি with

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

ও অনুশীলন, অধিকাংশ সার্ভার সাইড MVC ফ্রেমওয়ার্ক সহজে তৈরি করতে পারেন আপেক্ষিক কোনো URI পথটি সঙ্গে যেমন /absolute/path/to/the/controller, এবং প্রশ্ন হয়ে "কিনা সার্ভার বাস্তবায়নের একটি উপসর্গ উচিত scheme://hostname:portসুনির্দিষ্ট পাথ সামনে"। ওপি-র প্রশ্নের মতোই। আমি এই সম্পর্কে পুরোপুরি নিশ্চিত নই।

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

অন্যদিকে, ক্লায়েন্টের পক্ষে http://example.com:8042এবং পরম পথটিকে একত্রিত করা খুব ঝামেলা বলে মনে হচ্ছে না । সর্বোপরি, ক্লায়েন্টটি ইতিমধ্যে সেই স্কিম এবং ডোমেন নামটি জানে যখন এটি সার্ভারে অনুরোধটি ডানে?

সব মিলিয়ে আমি বলব, নিখুঁত ইউআরআই ব্যবহার করার পরামর্শ দিন, সম্ভবত নিখুঁত পাথের সাথে সম্পর্কিত ইউআরআইয়ের ফ্যালব্যাক, কখনও আপেক্ষিক পথ ব্যবহার করবেন না


4
এটি একটি ভাল উত্তর (+1) যার সাথে আমি চূড়ান্ত উপসংহার ব্যতীত সম্মত। তবে আমার উত্তরে আমি যুক্তি দিচ্ছি যে এইচটিটিপি অনুচ্ছেদে সংজ্ঞায়িত করা হয়েছে, উদাহরণস্বরূপ , "নিখুঁত" একটি নিখুঁত পাথকে বোঝায় , পুরোপুরি যোগ্যতাসম্পন্ন ইউআরআই নয়। এটা - তাই আমি সঙ্গে আপনার (2) অসম্মতি হয় একটি পরম কোনো URI এক, যার জন্য ক্লায়েন্ট, নেটওয়ার্ক প্রোটোকল এবং হোস্ট অনুমান হবে যাতে এটি একটি সম্পূর্ণরূপে যোগ্যতাসম্পন্ন কোনো URI না, কিন্তু। এবং, সুতরাং, আমি আপনার (1) সংজ্ঞার সাথেও একমত নই যা সম্পূর্ণ ইউআরআই এবং পরম ইউআরআই উভয়ই
লরেন্স ডল

মন্তব্যের জন্য ধন্যবাদ. আমি কেবল ফাইল সিস্টেম থেকে পরম পথ এবং আপেক্ষিক পাথ ধারণা ধার করি। পৃথক পৃথক পদ, আমি আপনার মতামত এবং আমার মধ্যে যথেষ্ট পার্থক্য দেখতে পাচ্ছি না। আপনি ফর্ম 1 এবং 2 এরও প্রস্তাব দিন এবং আপনি ফর্ম 3 এর বিপরীতে আছেন, তাই না?
রায়লুও

4
ব্যবহারিকভাবে বলতে গেলে, আমি (2) এর পক্ষে; আমি মনে করি (1) ব্যাকএন্ডের অনেক বেশি HTTP নির্দিষ্ট জ্ঞান থাকা প্রয়োজন (নির্দিষ্ট HTTP পরিবেশের বিবরণ সম্পর্কে বোঝানো হয়, সাধারণত HTTP নয়) এবং (3) ক্লায়েন্টের খুব বেশি প্রয়োজন বলে মনে হয়। তবে , আমার যুক্তিটি মূল খসড়া স্পেকের ভিত্তিতে ছিল এবং উদাহরণগুলি পরবর্তী সংস্করণে এমনভাবে পরিবর্তিত হয়েছিল যা আমার যুক্তিটিকে অকার্যকর করে দেয়।
লরেন্স ডল

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

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

13

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

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

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


11

কেবল আসল পার্থক্যটি মনে হয় ক্লায়েন্টদের পক্ষে আপেক্ষিক সংস্করণ থেকে এটি নির্মাণের পরিবর্তে নিখুঁত ইউআরআই খাওয়া হয়। অবশ্যই, পার্থক্যটি আমাকে পরম সংস্করণে চালিত করার পক্ষে যথেষ্ট হবে।


7

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


প্রদত্ত আপনি "পরম" কে নিরঙ্কুশ পথ (উদাহরণস্বরূপ /xxx/yyy...) হিসাবে সংজ্ঞায়িত করেছেন এবং পুরোপুরি যোগ্য ইউআরআই অর্থ (উদাহরণ ) হিসাবে নয় http://api.example.com/xxx/yyy...
লরেন্স ডল

6

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

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

* দয়া করে এই যুক্তির লাইনে কোনও ত্রুটি আছে কিনা তা আমাকে জানান। অবশ্যই লক্ষ্যটি সমস্ত আক্রমণ প্রতিরোধ করা নয়, তবে আক্রমণটির কমপক্ষে একটি উপায়।


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

4
আমি জানি এটি একটি পুরানো পোস্ট, তবে আমি কেবল এটিই উল্লেখ করতে চাই যে "যদি কোনও আক্রমণকারী ফিরে আসা প্রতিক্রিয়ায় তাদের নিজস্ব ইউআরএল রুটটি ইনজেক্ট করতে পারে" তবে এটি একটি আজেবাজে কারণ। যদি তারা প্রতিক্রিয়াটিতে সঠিক জায়গায় "তাদের নিজস্ব ইউআরএল" ইনজেক্ট করতে পারে, তবে আমি বাজি ধরছি যে তারা কেবলমাত্র নিজের হোস্টনামটিকে নিজের সাথে প্রতিস্থাপন করতে পারে। তাই সুরক্ষার দিক থেকে আমি এটিকে বৈধ যুক্তি হিসাবে দেখছি না।
ম্যাগনাস এরিকসন

5

আপনার সর্বদা পূর্ণ URL টি ব্যবহার করা উচিত। ইউআরএলগুলির সমস্ত অনন্য হওয়ার প্রয়োজন হওয়ায় এটি সংস্থানটির অনন্য সনাক্তকারী হিসাবে কাজ করে।

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


4
ঠিক আছে, অবস্থান শিরোনামের জন্য এইচটিটিপি স্পেকটিমকে ইউআরআই বলে একটি পরম ইউআরআইতে অবশ্যই একটি স্কিম থাকতে হবে (যেমন http) http
মার্ক বোবার

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

আপনি যে স্পেকের কথা বলছেন তার অংশে একটি লিঙ্ক পাঠাতে পারবেন?
মার্ক বোবার

একটি পরম ইউআরআই একটি স্কিম নির্দিষ্ট করে; এমন একটি ইউআরআই যা পরম নয় সেটিকে আপেক্ষিক বলে মনে হয়। ইউআরআইগুলি তারা অস্বচ্ছ বা শ্রেণিবদ্ধ কিনা তা অনুসারে শ্রেণিবদ্ধ করা হয়। একটি অস্বচ্ছ ইউআরআই একটি সম্পূর্ণ ইউআরআই যার স্কিম-নির্দিষ্ট অংশটি স্ল্যাশ অক্ষর ('/') দিয়ে শুরু হয় না। অস্বচ্ছ ইউআরআইগুলি আরও বিশ্লেষণের বিষয় নয়। অস্বচ্ছ ইউআরআইয়ের কয়েকটি উদাহরণ হ'ল মেলটো: java-net@java.sun.com নিউজ: comp.lang.java urn: isbn: 096139210x
মার্ক বোবার

4
আরে কোন উদ্বেগ মানুষ। এই স্টাফটি সম্পর্কে অন্য একটি বিষয় হ'ল আমি লোককে আইডি হিসাবে hrefs ব্যবহার করতে দেখেছি। যাতে ক্লায়েন্টকে কিছু কনফিগার ফাইল এবং একটি আইডি থেকে ইউআরএল পুনর্গঠন করার প্রয়োজন না হয়, এটি কেবলমাত্র URL টি জানে এবং এর উপর ভিত্তি করে ক্যাশে করতে পারে can
মার্ক বোবার

2

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


2

পরম ইউআরআই ব্যবহারের একটি অসুবিধা হ'ল এপিআই প্রক্সি করা যায় না।

এটিকে ফিরিয়ে দিন ... সত্য নয়। আপনার ডোমেন সহ একটি সম্পূর্ণ URL এর জন্য যাওয়া উচিত।


4
কেন পরম ইউআরআই প্রক্সিটির হোস্টনাম ব্যবহার করতে পারে না?
এড সামার

4
এই মুহুর্তে এই সঠিক সমস্যাটি নিয়ে কাজ করা। আমরা সমস্ত অনুরোধগুলি প্রথমে প্রথমে "লোড-ব্যালেন্সিং" স্তরটির মধ্য দিয়ে যেতে চাই। সরাসরি সার্ভারগুলিতে সম্পূর্ণ ইউআরআই এই মডেলটিকে ভেঙে দেবে।
Mag382

4
আমি নিগিনেক্সকে পরম ইউআরএল সহ একটি সাইট প্রক্সি করতে ব্যবহার করছি। এটি সমতুল্য প্রক্সি URL সহ ব্যাকএন্ড URL প্রতিস্থাপনে পুরোপুরি সক্ষম capable বিশেষত এটি উইন্ডোআরড.আর্টিফ্যাক্টরিওনলাইন.কম (যা সম্পূর্ণরূপে যোগ্য ইউআরএল এবং সম্পূর্ণরূপে যোগ্যতাসম্পন্ন পুনঃনির্দেশগুলি রয়েছে) এর repo.windyroad.com.au
টম হাওয়ার্ড

2

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

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

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