কিভাবে এবং কেন আধুনিক ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্কগুলি ফাইল সিস্টেম থেকে ইউআরএল রুটগুলি ডিকুয়াল করতে বিকশিত হয়েছিল?


67

প্রায় 10 বছর পূর্বে তুলনায় আমি রাউটিংয়ের স্টাইলটি ব্যবহার করে ফ্রেমওয়ার্কের দিকে পরিবর্তনের বিষয়টি উল্লেখ করেছি যা ফাইল সিস্টেম থেকে ইউআরএল পাথকে ডেসপুল করে। এটি সাধারণত একটি ফ্রন্ট-কন্ট্রোলার প্যাটার্নের সাহায্যে সম্পন্ন হয়।

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

প্রশ্ন

কীভাবে এবং কেন এটি সাধারণ হয়ে উঠল? কীভাবে এবং কেন সিদ্ধান্ত নেওয়া হয়েছিল যে এটি "উন্নত" সেই স্থানে যেখানে একসময় সাধারণ-প্রত্যক্ষ ডাইরেক্ট-টু-ফাইল পদ্ধতির কার্যকরভাবে বাতিল করা হয়েছিল?

অন্যান্য উত্তর

এখানে একটি অনুরূপ উত্তর রয়েছে যা রুট এবং কিছু সুবিধাগুলি এবং ত্রুটিগুলির ধারণাটিতে কিছুটা যায়: পিএইচপি ফ্রেমওয়ার্ক সহ, কেন "রুট" ধারণাটি ব্যবহার করা হয়?

তবে এটি historicalতিহাসিক পরিবর্তনের দিকগুলি, বা কীভাবে বা কেন এই পরিবর্তনটি ধীরে ধীরে ঘটেছিল তা সম্বোধন করে না, যেখানে আজকাল কোনও নতুন প্রকল্প এই নতুন রাউটিং স্টাইলের ধরণটি ব্যবহার করে এবং ডাইরেক্ট-টু-ফাইলটি পুরানো বা পরিত্যাজ্য।

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

উদাহরণ:

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

জেন্ড এক্সপ্রেসিভ

https://docs.zendframework.com/zend-expressive/features/router/aura/
https://docs.zendframework.com/zend-expressive/features/router/fast-route/
https: //docs.zendframework। কম / Zend-ভাবপূর্ণ / বৈশিষ্ট্য / রাউটার / zf2 /

জেন্ড ফ্রেমওয়ার্ক

https://docs.zendframework.com/zend-mvc/routing/

Laravel

https://laravel.com/docs/5.5/routing

CakePHP

https://book.cakephp.org/3.0/en/development/routing.html


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

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

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

2
এটি (অংশে) ইউআরআই (এবং শনাক্তকারী ) হিসাবে কোনও ইউআরএল (একটি লোকেটার , কীভাবে কোনও উত্স সন্ধান করতে হবে ) দেখার বিষয়ে নয়?
হেগেন ভন ইটজেন

2
প্রাচীন ইতিহাস থেকে সম্পর্কিত পড়া: শীতল ইউআরআই পরিবর্তন করবেন না - টিম বার্নার্স-লি, 1998
মাইকেল হ্যাম্পটন

উত্তর:


72

এর সবচেয়ে বেসিক আকারে, একটি ওয়েবসাইট স্থিতিশীল ফাইলগুলি সরবরাহ করে। ফাইলের পাথের URL টি ম্যাপ করা সর্বাধিক সুস্পষ্ট পছন্দ; মূলত, এটি কেবল পঠনযোগ্য এফটিপি সাইট।

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

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

আপনি আরও উন্নত সংকলিত ভাষা ব্যবহার শুরু করার পরে, আপনি ফাইলের অবস্থান থেকে আরও তালাকপ্রাপ্ত হন।

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

তবে আমি মনে করি আসল সমুদ্র পরিবর্তন এসেছে যখন ব্যবহারকারীরা ফাইলের সম্প্রসারণকে পথ থেকে মুক্তি দিতে চেয়েছিল। মাইপেজ.এএসপি বা মাইপেজ.এফপি প্রাপ্তি এমন কিছু ছিল যা 'সাধারণ' মানুষকে বিভ্রান্ত করে এবং এসইওতে হস্তক্ষেপ করে।

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

আমি যদি mydomain.com/sale বনাম www.mydomain.co.uk/products/sale.aspx দিয়ে আরও বেশি অর্থ উপার্জন করি তবে আমি চাই না যে আমার পথে কোনও প্রযুক্তিগত সীমাবদ্ধতা দাঁড়ায়।


7
আমি সর্বদা ভেবেছিলাম ফাইলের এক্সটেনশানগুলি আড়াল করার আকাঙ্ক্ষাটি "অস্পষ্টতার দ্বারা সুরক্ষা" ছিল - নির্দিষ্ট সার্ভারগুলির নির্দিষ্ট সংযুক্ত / জ্ঞাত শোষণের জন্য লক্ষ্যকে আরও সহজ করার জন্য কোনও সাইট কোন প্রযুক্তি ব্যবহার করেছে তা বলা কিছুটা শক্ত করে তোলে making এবং সেই সময়ে প্রযুক্তিগুলি
কায়ুস জার্ড

20
@ কাইসজার্ড এটির একটি অংশ, তবে আরেকটি অংশ হ'ল প্রযুক্তি জ্ঞানবাদ - আমাদের পথগুলিতে file.html প্রতিস্থাপন করে, আমরা পরে অন্য একটি সুইচটির সাথে আটকাতে চাইনি (উদাহরণস্বরূপ, file.phtml to file.php, বা এমনকি file.asp)। তবে যেহেতু আমরা ডাটাবেস রেকর্ড এবং / অথবা অন্যান্য উত্স থেকে নির্মিত সংস্থানগুলি অ্যাক্সেসের জন্য ইউআরএল এবং ফাইলসিস্টেম পাথ (রাউটিং বা যে কোনও কিছু ব্যবহার করে) বিচ্ছিন্ন করছি, কেন ইউআরএলটিতে মোটেও একটি এক্সটেনশন থাকবে?
HorusKol

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

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

8
পুরানো দিনগুলিতে mydomain.com/sale এখনও কাজ করেছে; এটি / বিক্রয় / এ পুনঃনির্দেশিত হয়েছে এবং ঠিক জরিমানা হয়েছে (আপনার পৃষ্ঠাটি mydomain.com/sale/index.aspx ছিল তবে কেউ কখনও সূচক.এএসপিএক্স দেখেনি)।
জোশুয়া

39

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

রেষ্টের পিছনে মূল ধারণাগুলি যেগুলি রূপান্তরকারী ছিল:

  • একটি URL একটি সংস্থান প্রতিনিধিত্ব করে
  • এই সংস্থার একাধিক উপস্থাপনা থাকতে পারে
  • অ্যাপ্লিকেশনটির পুনর্গঠন করা থাকলে URL টি ভাঙ্গা উচিত নয়
  • অ্যাপ্লিকেশনগুলির উচিত ওয়েবের স্থিতিহীনতা আলিঙ্গন করা

ফাইলগুলি ইউআরএল দ্বারা সরাসরি পরিবেশন করার প্রধান অপূর্ণতা হ'ল আপনি নিম্নলিখিত সমস্যাগুলি অনুভব করছেন:

  • ওয়েব সাইটগুলি পুনর্গঠিত হওয়ায় রিসোর্স লিঙ্কগুলি অবিচ্ছিন্নভাবে ভেঙে যায়
  • সংস্থান এবং উপস্থাপনা একসাথে আবদ্ধ হয়

আমি মনে করি পাশাপাশি কিছু ন্যায্য ভারসাম্য সরবরাহ করা জরুরী:

  • সমস্ত সংস্থান গুরুত্বের সমান নয়। এজন্য আপনার এখনও স্টাইল ভিত্তিক সংস্থানগুলি সরাসরি পরিবেশন করা হয়েছে (সিএসএস, জাভাস্ক্রিপ্ট / ইকামাস্ক্রিপ্ট, চিত্রগুলি)
  • HETOAS এর মতো REST এর সংশোধনগুলি রয়েছে যা একক পৃষ্ঠার অ্যাপ্লিকেশনগুলিকে আরও ভাল সমর্থন করে।

আপনি যখন বলেন প্রতিনিধিত্ব বলতে আপনি JSON / এইচটিএমএল / এইচএসটিএল / পাঠ / ইত্যাদি মত জিনিস বোঝাতে চান? আমি REST এর সাথে অস্পষ্টভাবে পরিচিত, তবে আমি REST এর সাথেও কল্পনা করি আপনার প্রতিক্রিয়া উপস্থাপনা পরিবর্তন করতে কোনও ধরণের ট্রিগার থাকতে হবে ...
ডেনিস

@ ডেনিস, হ্যাঁ এইচটিটিপি-র বেশ কয়েকটি শিরোলেখ রয়েছে যা ইচ্ছামত ফর্মটি ( বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েবে / এইচটিটিপি / কনটেন্ট_নিগোটিয়েশন) এ ইঙ্গিত করতে ব্যবহার করা যেতে পারে এবং এইচটিটিপি-র শক্তিগুলি আলিঙ্গন করার বিষয়েই আরইএসটি ছিল। তবে, কোনও অ্যাপ্লিকেশনটির পক্ষে কাঙ্ক্ষিত সামগ্রীর আলোচনার মালিকানার উপায় থাকা এখনও অস্বাভাবিক নয়।
বেরিন লরিটস্ক

5
সিজিআই (1993), সার্লেলেটস (1997) এবং জেএসপি (1999) প্রায়শই ফাইল সিস্টেম থেকে ইউআরএল এবং প্রাক-তারিখের আরআরএসটি (2000) ডিকোলড করে দেয়। তবে এই উত্তরটি নকশার প্যাটার্নের জনপ্রিয়তার কারণগুলি সনাক্ত করতে মূলত সঠিক: এককবিংশ শতাব্দীর জনপ্রিয়তার উপর রিয়েল, জাভা স্ট্রুটস এবং রেল অন রিয়েলগুলি উপস্থাপনা থেকে পৃথক করার জনপ্রিয়তার উপর বিশাল প্রভাব ফেলে।
dcorking

1
ফিল্ডিংয়ের কাগজ অনুসারে, "আরইএসটি-র প্রথম সংস্করণটি 1994 সালের অক্টোবর থেকে 1995 সালের আগস্টের মধ্যে বিকশিত হয়েছিল"
কনার

1
@ ডকার্কিং, সিজিআই তখন ফাইলগুলি থেকে ইউআরএলগুলি ডিকুয়াল করেনি, এটি 10 ​​এর মধ্যে 9 বারের পরিবর্তে ফাইলটি চালিয়েছিল সার্ভলেটগুলি সবচেয়ে নিকটতম মিল হতে পারে, তবে আপনি যদি রুটের ধারণার কথা বলছেন এবং ডিজাইনের ইউআরএল স্পেস রাখছেন , এটি আসল এবং এর মতো ফ্রেমওয়ার্ক সহ with
বারিন লরিটস

20

আমি এটি আধুনিক ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্কের একটি প্রত্নতত্ব মনে করি না , এটি বেশিরভাগ ক্ষেত্রে গতিশীল পৃষ্ঠাগুলির সাধারণভাবে পরিবেশন করার একটি প্রত্নতত্ত্ব।

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

তারপরে গতিশীল বিষয়বস্তু পরিবেশন করার বয়সটি এসেছিল। সিজিআই স্ক্রিপ্টগুলি (এবং এগুলি থেকে বিবর্তিত সমস্ত কিছু) ফ্লাইয়ের পৃষ্ঠাগুলি তৈরি করেছিল, কোনও প্রকারের ডেটাবেস দ্বারা সমর্থনযুক্ত। URL- এ GET প্যারামিটারগুলি সাধারণ হয়ে উঠেছে, উদাহরণস্বরূপ, en.wikedia.org/w/index.php?title=Path_( কমপিউটিং)

তবে কেবল পাঠের অংশগুলি নিয়েই পঠনযোগ্য ইউআরএল থাকা আরও বেশি বন্ধুত্বপূর্ণ । সুতরাং ডায়নামিক অ্যাপ্লিকেশনগুলি সরল পাথগুলিকে (উদাহরণস্বরূপ en.wikedia.org/wiki/Path_ ( কমপুটিং) মাপদণ্ডগুলিতে ম্যাপ করেছে এবং এই ম্যাপিংগুলি "রুট" হিসাবে পরিচিত।

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


12

এর একটি কারণ হ'ল প্রতিটি অনুরোধে ডিস্ক থেকে কোনও ফাইল লোড করা ধীর, সুতরাং ওয়েব সার্ভারগুলি মেমরির মধ্যে ফাইলগুলি ক্যাশে করার উপায়গুলি তৈরি করা শুরু করে, তবে যদি আপনি যেভাবেই এটি মেমরিতে রাখার চেষ্টা করতে চলেছেন তবে কেন এটি যেখানে ছিল তাতে কেন फरक আসে না does ডিস্ক?

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

একটি কারণ হ'ল আরও শব্দার্থক, গতিশীল রুটের জন্য ইচ্ছা https://softwareengineering.stackexchange.com/questions/363517/how-and-why-did-modern-web-application-frameworks-evolve-to-decouple-url-routes। স্পষ্টতই, আপনি কোনও /var/www/questions/363517/how-and-why-did-modern-web-application-frameworks-evolve-to-decouple-url-routes.phpফাইল চান না । আপনি ওয়েব সার্ভার কনফিগারেশনে url- রচনার নিয়মগুলি এর মতো রুট তৈরি করতে ব্যবহার করেছেন। এখন এটি কেবল একটি কোড পরিবর্তন যা কার্যকরভাবে কার্যকর।


এই উদাহরণটির জন্য আপনার ইউআরএল পুনর্লিখনের দরকার নেই।
Yay295

1
এটি কোড দ্বারা পরিচালিত হয়েছে যা পাথের প্রথম অংশটিকে স্বীকৃতি দেয় এবং একটি ডাটাবেসে প্রশ্নটি সন্ধান করতে নম্বর / 363517 / ব্যবহার করে। ওয়েব সার্ভার নিজেই কিছুই করার নয়, তবে একটি অ্যাপ্লিকেশন ...
উইল ক্রফোর্ড

11

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

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

এটি কেবল পিএইচপি-ইস্যু নয়। প্রমাণ হিসাবে এখানে অ্যাপাচি শক্তকরণ গাইডের একটি প্রাসঙ্গিক বিভাগ ।


1
ডাউনটা কেন?
জিমি জেমস

8

আমি শিল্পটির পক্ষে উত্তর দিতে পারি না, তবে আমি আপনাকে বলতে পারি যে কেন আমি ইউআরএল = ফাইল সিস্টেম থেকে 2000 এর দশকের গোড়ার দিকে ভার্চুয়াল 'রুটগুলি'র দিকে ফিরে এসেছি।

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

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

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


আপনি আরও কুরুচিপূর্ণ কোড দিয়ে শেষ করতে পারেন কেন আপনি আরও বলতে পারেন? আমি 1000 টি ফাইল পরিবর্তন করার প্রয়োজনীয়তা দেখতে পাচ্ছি (ধরে নিলাম এটি শিরোনাম / পাদলেখ আপডেট করা আছে) তবে আপনি কুৎসিত কোডের ঝাঁকুনির অর্থ কী?
ডেনিস

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

5

এই বিচ্ছেদ কেন উপকারী তা নিয়ে আমি খুব বেশি বিশদে যাব না। মূল যুক্তিটি হ'ল এটি অন্তর্নিহিত বাস্তবায়ন থেকে শব্দার্থবিজ্ঞানগুলি (আপনি আসলে কী অ্যাক্সেস করার চেষ্টা করছেন) পৃথক করে।

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

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

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


1

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

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

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


1

সময়ের শুরুতে, ইউআরএলগুলি সার্ভারে পাথ ফাইল করার জন্য সরাসরি ম্যাপ করে কারণ এটি সহজ, এবং যাইহোক এটি করার অন্য কোনও উপায় নেই, আছে কি? যদি আমি জিজ্ঞাসা করি তবে আমি ওয়েবসাইটটির মূল ডিরেক্টরি থেকে শুরু /path/to/index.phpকরব /path/to/index.php(সাধারণত সার্ভারের নয়, ওয়েবসাইটটি আরও একটি ডিরেক্টরি বা একটি ডিরেক্টরিতে রাখা উচিত)।

তারপরে কয়েক বছর পরে, আমরা পুনর্লিখন সম্পর্কে শিখতে শুরু করি, যা স্পষ্টতই বলা হয়েছিল তার চেয়ে আলাদা সংস্থান সরবরাহ করে। /request/path/to/index.phpআসলে পরিবেশন করতে পারেন /response/path/to/index.php

আর একটি কৌশল লুকিয়ে আছে index.php। যদি ডাকি /index.php?foo=bar&baz=quxসার্ভার গোপন করে উত্তর দিতে পারেন index.php: তাই মত /?foo=bar&baz=qux, সব সময় আসলে ভজনা index.phpযাহাই হউক না কেন।

পরবর্তী পদক্ষেপ, যা সবচেয়ে গুরুত্বপূর্ণ একটি, আমরা সমস্ত ইউআরএলগুলিকে পুনঃনির্দেশ করতে শিখেছি /index.php। এখন, /path/to/some/pageনিঃশব্দে পুনঃনির্দেশিত হয় /index.php?path/to/some/page। এটি কিছুটা জটিল, কারণ সাধারণত প্রতিটি স্ল্যাশ একটি নতুন উপ-ডিরেক্টরিকে উপস্থাপন করে তবে এই ক্ষেত্রে ওয়েব সার্ভারটি অনুসন্ধানের পরিবর্তে পরামিতি হিসাবে পাঠাতে কনফিগার করা হয়েছে।

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

এটি কার্যকরভাবে আপনার একশ বা হাজার অ্যাপ্লিকেশন ওয়েবসাইটকে (যদি আপনি প্রতিটি ফাইলকে নিজস্ব অ্যাপ হিসাবে বিবেচনা করেন) একক, আরও জটিল তবে আরও অনেক বেশি ধারাবাহিক অ্যাপে রূপান্তরিত করে।

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

দীর্ঘ গল্প সংক্ষেপে, এটি আবিষ্কারের ক্রম বিবর্তন ছিল, হঠাৎ লাফানো নয়, এবং প্রতিটি বিকাশকারীকে আবিষ্কারের একই যাত্রা পেরিয়ে যেতে হয়েছিল। শেখার বক্ররেখাটি বেশ খাড়া, যদি না আপনি সত্যিই দ্রুত বিমূর্ত ধারণাটি উপলব্ধি করতে পারেন।


-1

দীর্ঘকালীন ওয়েবদেব হিসাবে, আমার মনে হয় এইচটিএমএল 5 এর সময়কালে নেভিগেশন-কম ইতিহাসের নিয়ন্ত্রণ ( history.pushState()) এর উদ্ভব এটিকে ব্যবহারিক করে তুলেছে। এর আগে, ইউআরএল বার আপডেট করার জন্য আপনাকে পৃষ্ঠাটি পুনরায় লোড করতে হয়েছিল, যদি না আপনি কেবলমাত্র খণ্ড ( /path#fragment) আপডেট করেন । এই খণ্ডটি সার্ভারের কাছে অদৃশ্য ছিল (এটি রুটে নয়), তাই ডায়নামিক পৃষ্ঠাটি রিফ্রেশ বা বুকমার্ক করার একমাত্র উপায় ছিল জাভাস্ক্রিপ্টের মাধ্যমে।

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

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

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