டெவ் லாக்: டிரைவர் இடைவெளிகள், URL பிழைகள் மற்றும் DB அமைப்புகள்

நான் ஒரு தளத்தை (platform) உருவாக்குவதில் இந்த நாளைச் செலவிட்டேன். ஒரு கட்டடக்கலை யோசனை (architectural idea) தொடர்ந்து தோன்றிக்கொண்டே இருந்தது. நீங்கள் செய்யும் செயலுக்கும், தரவைச் சேமிக்கும் இடத்திற்கும் இடையில் ஒரு இடைவெளியை (seam) நீங்கள் உருவாக்க வேண்டும்.

இது உங்கள் முக்கிய குறியீட்டை (main code) மாற்றாமல், பிற்காலத்தில் உங்கள் பேக்எண்டை (backend) மாற்றிக்கொள்ள அனுமதிக்கிறது.

இடைவெளிகளின் முறை (The Pattern of Seams)

நான் ஒரு கண்காணிப்புத் தளத்தை (observability platform) உருவாக்கி வருகிறேன். இது பல ஆதாரங்களில் இருந்து பிழைகளையும் (errors) அளவீடுகளையும் (metrics) சேகரிக்கிறது. ஒவ்வொரு சேமிப்புப் பணியும் (storage task) ஒரே முறையைப் பின்பற்றியது:

• ஒரு சிறிய இடைமுகத்தை (interface - ஒப்பந்தம்) உருவாக்கவும். • ஒரு Eloquent டிரைவரை (driver - செயலாக்கம்) உருவாக்கவும்.

டேஷ்போர்டுகளும் (Dashboards) பைப்லைன்களும் (pipelines) இடைமுகத்துடன் மட்டுமே தொடர்பு கொள்கின்றன. தற்போது நான் Postgres-ஐப் பயன்படுத்துகிறேன், ஏனெனில் அது நம்பகமானது. பிற்காலத்தில் எனக்கு வேகமான தரவுத்தளம் தேவைப்பட்டால், நான் ஒரு புதிய டிரைவரை மட்டும் எழுதினால் போதும். எனது டேஷ்போர்டு குறியீட்டை மாற்ற வேண்டியதில்லை.

பாடம் எளிமையானது: முதல் நாளிலேயே உங்களுக்கு இரண்டாவது டிரைவர் தேவையில்லை. முதல் நாளிலேயே உங்களுக்கு இடைமுகம் (interface) தேவை. இப்போது சேர்க்கப்படும் ஒரு கூடுதல் கோப்பு, பிற்காலத்தில் மிகப்பெரிய அளவில் குறியீட்டை மீண்டும் எழுதும் வேலையைத் தவிர்க்கிறது.

மூன்று நல்ல பழக்கங்கள்

• இரட்டை அடையாளங்காட்டிகளைப் (dual identifiers) பயன்படுத்தவும். வேகமான உள் இணைப்புகளுக்கு (internal joins) auto-increment IDs-களைப் பயன்படுத்தவும். URL அல்லது API போன்ற உங்கள் அமைப்பிலிருந்து வெளியே செல்லும் எதற்கும் UUID-களைப் பயன்படுத்தவும். இது உங்கள் வரி எண்ணிக்கையை (row counts) ரகசியமாக வைத்திருக்க உதவும்.

• Enums-களைப் பயன்படுத்தவும். பங்குகள் (roles) மற்றும் நிலைகளை (statuses) PHP enums-களில் சேமிக்கவும். இது உங்கள் UI மற்றும் உங்கள் தர்க்கம் (logic) ஆகிய இரண்டும் ஒரே உண்மையான ஆதாரத்தைப் (source of truth) பயன்படுத்துவதை உறுதி செய்கிறது.

• உங்கள் தரவை பதிப்புப்படுத்தவும் (Version your data). உங்கள் பேலோட்களில் (payloads) எப்போதும் ஒரு பதிப்புத் புலத்தை (version field) சேர்க்கவும். புதிய விருப்பத் புலங்களை (optional fields) சேர்க்கலாம், ஆனால் பழையவற்றை ஒருபோதும் மறுபெயரிடவோ அல்லது நீக்கவோ வேண்டாம். இது பழைய கிளையண்டுகளைப் (clients) பாதிக்காமல் தடுக்கும்.

ட்ராக்கிங் URL பிழை (The Tracking URL Bug)

ஒரு மின்னஞ்சல் ட்ராக்கிங் பேக்கேஜில் (email tracking package) ஒரு பிழையைக் கண்டறிந்தேன். அந்த பேக்கேஜ் கிளிக்ஸ்களைக் கண்காணிக்க இணைப்புகளை (links) மாற்றியமைக்கிறது. அது URL-ஐ என்க்ரிப்ட் (encrypt) செய்து, பின்னர் ரீடைரக்ட் (redirect) செய்யும் போது அதை மீட்டெடுக்கிறது.

பிரச்சனை: Laravel மின்னஞ்சல் டெம்ப்ளேட்களில் இணைப்புகளை HTML-escape செய்கிறது. ஒரு கையொப்பமிடப்பட்ட URL (signed URL) "&" எழுத்துக்களைப் பயன்படுத்துகிறது. HTML-இல், இவை "&" ஆக மாறுகின்றன.

நீங்கள் அந்த escape செய்யப்பட்ட சரத்தை (string) என்க்ரிப்ட் செய்தால், "&" என்பது URL-இல் அப்படியே இருக்கும். Laravel கையொப்பத்தைச் சரிபார்க்க முயலும்போது, சரம் மாறியிருப்பதால் அது தோல்வியடைகிறது. இது கையொப்பமிடப்பட்ட URL-களுக்கு மட்டுமே நடப்பதால், இதைக் கண்டறிவது கடினம்.

தீர்வு: URL-ஐப் பெறுவதற்கு முன்பே HTML entities-களை டீகோட் (Decode) செய்யவும்.

உள்ளமைப்பிற்கு (Config) தரவுத்தளத்தைப் பயன்படுத்துதல்

நிர்வாகிகளால் (admins) ஒரு டேஷ்போர்டில் ஆப் அமைப்புகளை (app settings) மாற்றும் வசதியை நான் உருவாக்கினேன். இந்த அமைப்புகள் தரவுத்தளத்தில் உள்ளன, ஆனால் ஆப் இன்னும் நிலையான config() செயல்பாட்டைப் பயன்படுத்தி அவற்றை வாசிக்கிறது.

நான் AppServiceProvider-இல் ஒரு மெல்லிய ஓவர்லேயைப் (thin overlay) பயன்படுத்துகிறேன். இது தரவுத்தள அமைப்புகளைப் படித்து, தற்போதைய கோரிக்கைக்கு (current request) அவற்றை config-க்குள் செலுத்துகிறது. இது மீதமுள்ள குறியீட்டை எளிமையாகவும் நிலையானதாகவும் வைக்கிறது.

இங்குள்ள பொதுவான கருப்பொருள் எல்லைகள் (boundaries) ஆகும். இடைவெளி (seam) எங்கு செல்ல வேண்டும் என்பதைத் தீர்மானிக்கவும். எல்லையை ஒருமுறை சரியான இடத்தில் வைக்கவும். மற்ற அனைத்தும் எளிமையாக இருக்கும்.

ஆதாரம்: https://dev.to/nasrulhazim/dev-log-2026-06-25-driver-seams-everywhere-a-tracking-url-bug-and-db-backed-settings-442l