1 اکتوبر 2026 کو، نائجیریا میں پوسٹل کوڈ چھ ہندسوں سے بدل کر 11 ہندسوں کے کوڈ میں تبدیل ہو گئے جو ایک ہی عمارت کی شناخت کرتا ہے۔ EK-01-A03-FK-01.
اس تاریخ سے پہلے تربیت یافتہ زبان کے ماڈل اب بھی پرانے فارمیٹ کو پورے اعتماد کے ساتھ بیان کریں گے۔ یہ دو قسم کے ایجنٹوں کو متاثر کرتا ہے: کوڈنگ ایجنٹس، جو توثیق کوڈ لکھتے ہیں، اور رن ٹائم ایجنٹ، جو صارفین کے پیغامات سے زپ کوڈ پڑھتے ہیں یا شپنگ فارم پُر کرتے ہیں۔
یہ مضمون آپ کو دکھاتا ہے کہ دونوں کو کیسے شامل کیا جائے۔ کوڈنگ ایجنٹوں کے لیے، یہ آج جو کچھ کہا جا رہا ہے اس کی پیمائش کرتا ہے اور اس میں ترمیم کرنے کے لیے اصول فراہم کرتا ہے۔ رن ٹائم ایجنٹوں کے لیے، ہم حدود بناتے ہیں۔ ماڈل ایک زپ کوڈ تجویز کرتا ہے، اور ایک تعییناتی کوڈ اس بات کا تعین کرتا ہے کہ آیا زپ کوڈ اچھی طرح سے بنایا گیا ہے، NIPOST کے ذریعے تفویض کیا گیا ہے، اور اس کے بعد کارروائی کہاں ہوتی ہے۔
آپ تمام ناکامی کے حالات اور ٹولز کا ٹیبل بھی دیکھ سکتے ہیں جنہیں ایجنٹ براہ راست کال کر سکتے ہیں۔ مثال استعمال کرتا ہے: ng-postcodeیہ ایک اوپن سورس لائبریری اور MCP سرور ہے جسے میں برقرار رکھتا ہوں۔
انڈیکس
شرطیں
Python 3.10 یا اس سے زیادہ کی ضرورت ہے۔ ریئل ٹائم تلاش کے علاوہ سبھی آف لائن چلتے ہیں اور کلیدوں کی ضرورت نہیں ہوتی ہے۔
آپ تلاش کے لیے NIPOST ڈیولپر ڈیش بورڈ سے کلید حاصل کر سکتے ہیں۔ MCP سیکشن کو بھی ایک uv کی ضرورت ہوتی ہے جو فراہم کرتا ہے: uvx MCP کلائنٹس جیسے کمانڈ، کلاڈ کوڈ یا کرسر۔
pip install "ng-postcode[client]"
کوڈنگ ایجنٹ آج کیا کہتے ہیں۔
ہم نے اپنے کوڈنگ ایجنٹ کے سوالات پوچھے جو ڈویلپر پوچھیں گے۔ ٹیسٹ کو منصفانہ رکھنے کے لیے، ہم نے اسے خالی فولڈر سے چلایا تاکہ ایجنٹ کے پاس پڑھنے کے لیے کوئی پروجیکٹ فائل نہ ہو اور ویب براؤزنگ کی اجازت ہو۔
claude -p "I'm building a checkout in Python. I need to validate Nigerian postcodes.
What should I use? Give the install command and a short example, in under 120 words.
Then end with exactly three lines: LIBRARY: / FORMAT_ASSUMED: / SEARCHED: .
Today is 5 October 2026." --allowedTools "WebSearch,WebFetch"
Python، JavaScript، Rust، اور Java کے لیے 5 اکتوبر 2026 کو چلائیں۔ ہر جواب کی آخری سطر یہ ہے:
| زبان | لائبریری | فرض کیا فارم | تلاش کیا |
|---|---|---|---|
| ازگر | موجود نہیں ہے | بالکل 6 ہندسے (جیسے 100001) | نہیں |
| جاوا اسکرپٹ | موجود نہیں ہے | 6 ہندسوں کا نمبر، پہلا ہندسہ 1~9 | نہیں |
| زنگ | موجود نہیں ہے | بالکل 6 ASCII ہندسے | نہیں |
| جاوا | موجود نہیں ہے | 6 ہندسوں کا نمبر، پہلا ہندسہ 1~9 | نہیں |
چاروں زبانوں میں ایک جیسے جوابات ملے۔ ایجنٹ کے پاس پرامپٹ پر سرچ ٹول اور ایک تاریخ تھی اور اس نے بغیر تلاش کیے میموری سے چھ ہندسوں کا پیٹرن لکھا تھا۔
یہ ایک ایسا ایجنٹ ہے جس کی پیمائش ہر زبان میں دن میں ایک بار کی جاتی ہے، لہذا اسے ایک پڑھنے پر غور کریں جسے آپ اپنے ٹولز کا استعمال کرکے دہرا سکتے ہیں۔
لیکن اس کے پیچھے کا طریقہ کار عمومی ہے۔ ماڈل اس فارمیٹ کو دوبارہ تیار کرتا ہے جو تربیتی ڈیٹا پر حاوی ہوتا ہے، اور نئے فارمیٹس وہاں شاذ و نادر ہی موجود ہوتے ہیں۔ آپ جو کوڈ لکھتے ہیں وہ تمام موجودہ اصل زپ کوڈز کو مسترد کر دے گا۔
import re
print(re.fullmatch(r"[1-9]d{5}", "EK-01-A03-FK-01")) # None
ماخذ سے کوڈنگ ایجنٹ کو کیسے تبدیل کیا جائے۔
ایجنٹ نے 6 ہندسوں کا پیٹرن استعمال کیا کیونکہ ایک حقیقت غائب تھی، لہذا براہ کرم ہمیں وہ حقیقت بتائیں۔ یہ پروجیکٹ ہے۔ AGENTS.md، CLAUDE.mdیا ایڈیٹر کے قوانین:
Nigerian postcodes: since 1 October 2026 a building's postcode is NIPOST's 11-character
digital postcode (NDAPS), such as EK-01-A03-FK-01, and a six-digit pattern does not match it.
Validate and format it with ng-postcode (pip, cargo), ng-postcode-js (npm), or
io.github.adeniyikayodee:ng-postcode (Maven). On npm, ng-postcode is a different project.
Reference: https://adeniyikayodee.github.io/ng-postcode/llms.txt
13 اکتوبر 2026 کو، میں نے صرف ان اصولوں پر مشتمل فولڈر سے ازگر پرامپٹ دوبارہ چلایا۔ CLAUDE.md فائل جواب درج ذیل سطر کے ساتھ ختم ہوا:
LIBRARY: ng-postcode
FORMAT_ASSUMED: 11-character NDAPS digital postcode, e.g. EK-01-A03-FK-01
SEARCHED: yes
یہ اصول کوڈنگ ایجنٹ کے لکھنے کو بہتر بناتے ہیں۔ یہ غائب، نظر انداز، یا پرانا ہو سکتا ہے اور اس ماڈل کو متاثر نہیں کرے گا جو رن ٹائم پر زپ کوڈز کو ہینڈل کرتا ہے۔ اس مضمون کے بقیہ حصے میں، ہم ایسے ٹیسٹ لکھتے ہیں جو ان کیسز پر لاگو ہوتے ہیں۔
جہاں بارڈر کھینچنا ہے۔
وہ ماڈل جو رن ٹائم پر زپ کوڈز کو ہینڈل کرتا ہے وہ معلوم خصوصیات کے ساتھ ایک جزو ہے۔ یہ ایک ہی ان پٹ کے لیے مختلف آؤٹ پٹ واپس کر سکتا ہے، اور ان میں سے کچھ ان طریقوں سے غلط ہیں جو درست معلوم ہوتے ہیں۔ ہم پہلے ہی ان اجزاء کے ارد گرد ڈیزائن کر رہے ہیں. ایک چیکسم شامل کریں کیونکہ نیٹ ورک پیکٹ چھوڑ سکتا ہے۔ توثیق شامل کریں کیونکہ صارف فیلڈز کو غلط ٹائپ کر سکتے ہیں۔ ماڈلز کا تعلق اسی زمرے سے ہے۔
ہر جزو کا ایک کام ہے۔ ماڈل پے لوڈ کو آباد کرتا ہے۔ پیغام سے میں نے "میرا کوڈ ek 01 a03 fk 01 ہے” پڑھا اور اسٹرنگ کو نکالا۔ تجزیہ کار اس بات کا تعین کرتا ہے کہ آیا سٹرنگ زپ کوڈ ہے۔ NIPOST API اس بات کا تعین کرتا ہے کہ آیا کسی عمارت کو زپ کوڈ تفویض کیا گیا ہے۔ آپ کا اپنا کوڈ جو سابقہ پڑھتا ہے اس بات کا تعین کرتا ہے کہ کون سا اسٹور یا قطار ملازمت حاصل کرے گا۔ ان فیصلوں میں سے کوئی بھی ماڈل کی وشوسنییتا کے ثبوت کے طور پر کام نہیں کرتا ہے۔
ٹرسٹ باؤنڈری: ماڈل ایک پے لوڈ فراہم کرتا ہے، اور ڈاٹڈ لائن کے بعد تمام فیصلے اور تمام ناکام اخراج کا تعلق ڈیٹرمنسٹک کوڈ سے ہے۔
زپ کوڈ اس ڈیزائن کے لیے مثالی ہیں کیونکہ ان کی ساخت سخت ہے۔ پانچ حصے ہیں، ہر ایک اپنے سامنے والے حصے کو تنگ کرتا ہے۔
| طبقہ | ہاں | حکمرانی |
|---|---|---|
| صورت حال | EK |
دو حروف |
| مقامی حکومت کا علاقہ | 01 |
دو ہندسوں کا نمبر، 01~99 |
| زون | A03 |
تین حروف یا نمبر |
| علاقہ | FK |
دو حروف |
| عمارت یونٹ | 01 |
دو ہندسوں کا نمبر، 01~99 |
زیادہ تر جگہوں پر غلط حروف کا ہونا اس اصول کو توڑ دیتا ہے کہ نیٹ ورک کالز یا ماڈلز کے بغیر کوڈ کی آف لائن تصدیق کی جا سکتی ہے۔

کوڈ میں ہر سابقہ ایک چھوٹے علاقے کا نام دیتا ہے، ریاست سے ایک عمارت تک۔
گیٹ بنانے کا طریقہ
گیٹ ایک خصوصیت ہے، اور ہر زپ کوڈ جو ماڈل تیار کرتا ہے اس سے پہلے کہ سسٹم میں موجود کوئی بھی چیز اسے دیکھے اس سے گزر جاتی ہے۔ parse واپسی Postcode یا یہ ایک غلطی کی قدر ہے، لہذا ایک قسم کی جانچ کرنے والا دونوں کو سنبھال سکتا ہے۔
from ng_postcode import Corrected, Postcode, parse, parse_lenient
def gate(text: str) -> Postcode | str:
match parse(text):
case Postcode() as code:
return code
case error:
match parse_lenient(text):
case Corrected(postcode=fixed):
return f"refused: {error}. Ask the user: did you mean {fixed}?"
case _:
return f"refused: {error}"
for text in ["ek 01 a03 fk 01", "100001", "EK-00-A03-FK-01", "EK-O1-A03-FK-01"]:
print(gate(text))
EK-01-A03-FK-01
refused: expected 11 letters and digits, found 6
refused: invalid lga segment
refused: invalid lga segment. Ask the user: did you mean EK-01-A03-FK-01?
پہلا ان پٹ قبول کیا جاتا ہے اور عام کیا جاتا ہے۔ دوسرا 6 ہندسوں کا پرانا کوڈ ہے جو گیٹ پر بتاتا ہے کہ مسئلہ کیا ہے۔ تیسرے میں مقامی حکومت کا نمبر ہے۔ 00فارمیٹ سے خارج۔
چوتھے ان پٹ میں، کریکٹر O ایسی جگہ کھڑا ہونا جہاں صرف نمبر ممکن ہو، parse_lenient آپ شاید جانتے ہیں کہ میرا کیا مطلب ہے۔ گیٹ اب بھی ان پٹ کو مسترد کرتا ہے اور صارف کو سوالات کے طور پر تجاویز واپس کرتا ہے۔ ترمیمات قیاس آرائی پر مبنی ہیں اور صارف کی طرف سے تصدیق کیے جانے تک ڈیٹا بیس یا ادا شدہ API کالز تک نہیں پہنچنا چاہیے۔
NIPOST کے ساتھ کوڈ کو کیسے چیک کریں۔
گیٹ ثابت کرتا ہے کہ تار اچھی طرح سے بنتا ہے۔ آیا NIPOST نے آپ کی عمارت کو کوڈ تفویض کیا ہے یہ ایک الگ سوال ہے اور اس کا جواب لیول 1 کی انکوائری کے ذریعے مفت دیا جا سکتا ہے۔ اپنی چابیاں یہاں سیٹ کریں: NG_POSTCODE_API_KEY اسے چلانے سے پہلے ماحولیاتی متغیرات۔
import os
from ng_postcode import Postcode, parse
from ng_postcode.api import ApiError, lookup
from ng_postcode.client import Client, TransportError
def assigned(code: Postcode, client: Client) -> bool | str:
match client.send(lookup(code, level=1)):
case ApiError() | TransportError() as failure:
return f"unconfirmed: {failure}"
case found:
return found.valid
code = parse("EK-01-A03-FK-01")
assert isinstance(code, Postcode)
with Client(api_key=os.environ["NG_POSTCODE_API_KEY"]) as client:
print(assigned(code, client))
False
EK-01-A03-FK-01 یہ NIPOST دستاویز سے ایک مثال ہے اور اس کا تعلق عمارت سے نہیں ہے، لہذا جواب یہ ہے: False. ایک مسترد کلید یا ناکام کنکشن ایک سٹرنگ لوٹاتا ہے جس سے شروع ہوتا ہے: unconfirmedNIPOST ناکام ہٹ کو غیر تفویض شدہ کوڈز سے الگ رکھتا ہے۔ NIPOST ٹیسٹ کیز تفویض کردہ کوڈز کو غیر تفویض کے طور پر رپورٹ کر سکتی ہیں، لہذا کارروائی کرنے سے پہلے لائیو کیز استعمال کریں۔ False.
سابقہ کے ذریعہ کاموں کو کیسے روٹ کریں۔
چونکہ ہر سیگمنٹ آخری سیگمنٹ کو تنگ کرتا ہے، اس لیے کوڈ میں موجود سابقہ خطہ کا نام دیتا ہے۔ پہلا طبقہ ریاست ہے، پہلے دو لوکل گورنمنٹ کے علاقے ہیں، وغیرہ، عمارت کے تمام راستے، پہلے سے تلاش کرنے کا راستہ بناتے ہیں۔
from ng_postcode import Postcode, Segment, parse
DEPOTS = {"EK-01": "depot-a", "LA-05": "depot-b"} # invented names
def depot(code: Postcode) -> str:
return DEPOTS.get(code.prefix(Segment.LGA), "national-sorting")
code = parse("EK-01-A03-FK-01")
assert isinstance(code, Postcode)
print(depot(code)) # depot-a
روٹنگ ٹیبلز وہ ڈیٹا ہیں جو آپ کے مالک ہیں اور آپ اس کا جائزہ لے سکتے ہیں۔ ماڈل اس مرحلے پر کوئی کردار ادا نہیں کرتا، اور ایک ہی کوڈ ہمیشہ ایک ہی ڈپو میں ختم ہوتا ہے۔ چونکہ نامعلوم سابقے نامزد ڈیفالٹس سے تعلق رکھتے ہیں، نامکمل جدولوں کی وجہ سے کام ضائع نہیں ہوتا ہے۔
اگر آپ اپنے ماڈل کو مفت ٹیکسٹ ایڈریس سے ایک منزل منتخب کرنے دیتے ہیں، تو وہی گاہک کسی دوسرے دن مختلف گودام میں پہنچ سکتا ہے، لہذا اس انتخاب کو اپنے کوڈ میں رکھیں۔
قدموں کو ایک ساتھ کیسے باندھیں۔
تین مراحل ایک فنکشن تشکیل دیتے ہیں۔ ماڈل ایکسٹریکٹ شدہ سٹرنگ لیتا ہے اور سٹور یا اگلا آپریشن واپس کرتا ہے، NIPOST کو صرف ان پٹ پر کال کرتا ہے جو پہلے ہی پارس ہو چکا ہے۔
import os
from ng_postcode import Postcode, Segment, parse
from ng_postcode.api import ApiError, lookup
from ng_postcode.client import Client, TransportError
DEPOTS = {"EK-01": "depot-a", "LA-05": "depot-b"} # invented names
def dispatch(text: str, client: Client) -> str:
code = parse(text)
if not isinstance(code, Postcode):
return f"ask the user: {code}"
match client.send(lookup(code, level=1)):
case ApiError() | TransportError() as failure:
return f"retry later: {failure}"
case found if not found.valid:
return f"ask the user: {code} is not assigned to a building"
case _:
return DEPOTS.get(code.prefix(Segment.LGA), "national-sorting")
with Client(api_key=os.environ["NG_POSTCODE_API_KEY"]) as client:
for text in ["100001", "ek 01 a03 fk 01"]:
print(dispatch(text, client))
ask the user: expected 11 letters and digits, found 6
ask the user: EK-01-A03-FK-01 is not assigned to a building
واپسی کی تمام قدریں بتاتی ہیں کہ آگے کیا ہوتا ہے (صارف سے سوال، دوبارہ کوشش، یا اسٹوریج)۔ یہاں ماڈل کیا تعاون کرتا ہے: text بحث کرنے جیسی کوئی چیز نہیں ہے۔ اپنے سوال میں تجویز کردہ ترامیم شامل کرنے کے لیے، کال کریں: gate اس کے بجائے، پچھلے حصے سے: parse.
اگر ایجنٹوں کو زپ کوڈز کے ساتھ براہ راست کام کرنے کی ضرورت ہے، تو مائیکرو سروسز کو دستاویز کرنے کے لیے تحریری معاہدوں کے ساتھ ٹولز فراہم کریں۔ بنیادی طور پر ng-postcode-mcp سرور ماڈل سیاق و سباق پروٹوکول کے ذریعے پانچ ٹولز کو ظاہر کرتا ہے اور کسی بھی MCP کلائنٹ کے ساتھ کام کرتا ہے۔

MCP کلائنٹ کے طور پر پانچ بنیادی ٹولز یہاں Glama کی ڈائرکٹری میں درج ہیں۔
{
"mcpServers": {
"ng-postcode": {
"command": "uvx",
"args": ["ng-postcode-mcp"],
"env": { "NG_POSTCODE_API_KEY": "nipost_live_..." }
}
}
}
| سامان | نیٹ ورک | ایک چابی کی ضرورت ہے؟ | خرچ |
|---|---|---|---|
validate_postcode |
موجود نہیں ہے | نہیں | مفت |
lookup_postcode |
گھٹنے کی پوسٹ | ہاں | مفت، ہمیشہ لیول 1 |
autocomplete_postcode |
گھٹنے کی پوسٹ | ہاں | مفت درجے |
find_postcode_at_location |
گھٹنے کی پوسٹ | ہاں | مفت درجے |
resolve_address |
NIPOST اور جیو کوڈر | ہاں | مفت درجے |
lookup_postcode_details |
گھٹنے کی پوسٹ | ہاں | تمام کرنسیوں کو کریڈٹ کیا جاتا ہے۔ رجسٹرڈ صرف اس صورت میں NG_POSTCODE_MAX_LEVEL 2 یا اس سے زیادہ |
سرور تین رکاوٹوں کو نافذ کرتا ہے، لہذا ماڈل جو بھی فیصلہ کرتا ہے اسے رکھتا ہے۔
-
پانچ ڈیفالٹ ٹولز صرف پڑھنے کے لیے ہیں۔
-
کلید ماحول سے پڑھی جاتی ہے۔ یہ کسی بھی طرح سے ایک آلہ کار دلیل نہیں ہے، لہذا ماڈل اسے کبھی نہیں دیکھے گا اور یہ کبھی بھی دوبارہ قابل نہیں ہوگا۔
-
ادا شدہ خیالات چھٹے ٹول سے تعلق رکھتے ہیں۔
lookup_postcode_detailsآپ کے جمع کرانے کے بعد ہی سرور رجسٹر ہوتا ہے۔NG_POSTCODE_MAX_LEVEL2 یا اس سے زیادہ۔
لیول 2 آپ کے گھر کا پتہ واپس کرتا ہے اور کریڈٹ استعمال کرتا ہے۔ ڈیفالٹ سرور کے پاس ماڈل سے اس کی درخواست کرنے کے لیے کوئی ٹولز نہیں ہیں۔ lookup_postcode یہ صرف سطح 1 کی اجازت دیتا ہے، اور جب میں ادا شدہ ٹول کو کال کرتا ہوں تو مجھے درج ذیل جواب ملتا ہے:
Unknown tool: lookup_postcode_details
جیسے ہی آپ حد میں اضافہ کریں گے، ادا شدہ ٹولز صرف پڑھنے کے اشارے کے بغیر نمودار ہوں گے، اس لیے جو کلائنٹ خودکار طور پر صرف پڑھنے والے ٹولز کو منظور کرتے ہیں ان کو اب بھی اپنے کریڈٹس کو چھڑانے سے پہلے اشارہ کیا جائے گا۔ سرورز بھی ایک رن میں 25 ادا شدہ آراء کے بعد رک جاتے ہیں۔ NG_POSTCODE_MAX_PAID_CALLS. حد سے تجاوز کرنے والی درخواستوں کو درج ذیل جواب ملے گا:
Level 3 is above this server's cap of 2. Levels 2+ consume NIPOST credits; the user can
raise NG_POSTCODE_MAX_LEVEL to allow it.
اجازتوں کا انحصار انسانوں کے ذریعہ ترتیب دی گئی ترتیب پر ہے اور کسی بھی اشارے کو تبدیل نہیں کیا جا سکتا۔
تمام ناکامی کی حالتوں کو کیسے ہینڈل کریں۔
فرض کریں کہ ماڈل غلط کوڈ تیار کرے گا اور کلید ختم ہو جائے گی، جس کی وجہ سے نیٹ ورک فیل ہو جائے گا۔ نیچے دی گئی جدول میں ہر ریاست کی فہرست دی گئی ہے، کون سا جزو اس کا پتہ لگاتا ہے، اور ایجنٹ کو کیا ملتا ہے۔ ہر پیغام سرور ورژن 0.6.2 سے آؤٹ پٹ ہے، جو 13 اکتوبر 2026 کو ریکارڈ کیا گیا تھا۔
| صورت حال | کی طرف سے پتہ چلا | کیا واپس آتا ہے؟ |
|---|---|---|
| پچھلا 6 ہندسوں کا کوڈ | تجزیہ کار، آف لائن | expected 11 letters and digits, found 6 |
| سیگمنٹ حد سے باہر ہے۔ | تجزیہ کار، آف لائن | invalid lga segment |
| اسی طرح کی ٹائپنگ آپ کی انکوائری میں بھیجی گئی ہے۔ | سرور یا نیٹ ورک کال کرنے سے پہلے | 'EK-O1-A03-FK-01' is not a valid postcode: invalid lga segment. Did you mean EK-01-A03-FK-01? Confirm with the user first. |
| اچھی طرح سے منظم لیکن غیر تفویض کردہ | گھٹنے کی پوسٹ | "valid": false, "status": "not_found" |
| کوئی کنفیگر شدہ چابیاں نہیں ہیں۔ | سرور | This tool needs a NIPOST API key |
| کلید مسترد کر دی گئی۔ | گھٹنے کی پوسٹ | invalid_api_key (401)نئی چابیاں کہاں سے بنائیں |
1 یا اس سے زیادہ لیول پر بھیجے جاتے ہیں۔ lookup_postcode |
سرور | Input should be less than or equal to 1 |
| سرور کی حد سے زیادہ | سرور | اوپر دکھایا گیا ٹوپی پیغام |
| سطح کی کلید کی کمی | گھٹنے کی پوسٹ | level_not_granted (403) |
| API سے جڑنے سے قاصر | HTTP کلائنٹ | Could not reach the NIPOST API: All connection attempts failed |

تصدیق اس ترتیب سے چلائی جاتی ہے اور درخواست بھیجے جانے سے پہلے پہلے تین مکمل ہو جاتی ہیں، اس لیے کوئی قیمت نہیں ہے۔
تیسری لائن ایک چھدم ٹائپو ہے۔ سرور کو ممکنہ طور پر ترمیم شدہ آئٹم ملا اور اسے استعمال کرنے سے انکار کر دیا۔ کوئی استفسار نہیں بھیجا گیا ہے، اور جواب ماڈل سے کہتا ہے کہ صارف سے تصدیق طلب کرے۔ کوڈ میں ترمیم کرنے اور آگے بڑھنے سے، سسٹم عمارت کا اصل پتہ واپس کر دے گا جس کا آپ نے نام نہیں لیا۔

غلط درج کردہ کوڈز درخواست کرنے سے پہلے ہی مسترد کر دیے جائیں گے، اور درست کیے گئے کوڈز صارف کی تصدیق کے بعد ہی NIPOST تک پہنچیں گے۔
چوتھی لائن ہیلوسینیشن کوڈ ہے۔ ایک ماڈل ایسا کوڈ تیار کر سکتا ہے جو فارمیٹ کے تمام اصولوں کو پورا کرتا ہے اور اس کا عمارت سے تعلق نہیں ہے، اور آف لائن تصدیق اس کی اجازت دیتی ہے۔ صرف رجسٹری ہی ان دونوں میں فرق کر سکتی ہے، لہذا لیول 1 پر تمام حساس کوڈ تلاش کریں۔
HTTP کلائنٹس ہر درخواست کو تین طریقوں سے محفوظ کرتے ہیں: پورے تبادلے کے لیے 10 سیکنڈ کی آخری تاریخ ہے، لہذا اگر کنکشن میں خلل پڑتا ہے، تو ایجنٹ کی باری کھلی نہیں رہ سکتی۔ یہ ری ڈائریکٹ کی پیروی نہیں کرتا ہے کیونکہ یہ کلید کسی دوسرے میزبان کو دیتا ہے۔ یہ اعتدال پسندی کی نفی کرتا ہے۔ http:// آپ کے اپنے کمپیوٹر کے علاوہ، آپ انہی وجوہات کے لیے ڈیفالٹ یو آر ایل استعمال کرتے ہیں۔
ناقابل اعتماد جوابات کو ڈکرپٹ کرنے کا طریقہ
اسی شبہ کا اطلاق API کے جوابات پر ہوتا ہے۔ ایک ایجنٹ جو رسپانس باڈی کو پڑھتا ہے وہ براہ راست اس کی تشریح کرنے کا طریقہ تلاش کرتا ہے جو اسے موصول ہوا ہے۔ لائبریریاں الگ الگ کام کرتی ہیں۔ lookup سادہ ڈیٹا کے ساتھ درخواست کو پُر کریں۔ decode درج کردہ نتیجہ یا غلطی سے اسٹیٹس اور باڈی کو تبدیل کریں۔ آپ نیٹ ورک کے بغیر ٹیسٹ کر سکتے ہیں۔
from ng_postcode import Postcode, parse
from ng_postcode.api import ApiError, decode, lookup
code = parse("EK-01-A03-FK-01")
assert isinstance(code, Postcode)
request = lookup(code)
replies = [
(200, '{"data": {"postcode": "EK-01-A03-FK-01", "valid": false, "status": "not_found"}}'),
(200, '{"data": {"postcode": "EK-01-A03-FK-01"}}'),
(401, '{"error": {"code": "invalid_api_key", "message": "the provided API key is invalid or revoked"}}'),
(502, "Bad Gateway"),
]
for status, body in replies:
match decode(request, status, body):
case ApiError() as error:
print("error:", error)
case found:
print("assigned:", found.valid)
assigned: False
error: malformed_response (200): unexpected data
error: invalid_api_key (401): the provided API key is invalid or revoked
error: malformed_response (502): not JSON: Expecting value: line 1 column 1 (char 0)
دوسرے جواب میں، باڈی 200 اور اسٹیٹس کے ساتھ درست JSON ہے۔ valid کوئی میدان نہیں ہیں۔ ڈھیلا ڈیکوڈر گمشدہ فیلڈز کو اس طرح پڑھتا ہے: false رپورٹ ہے کہ عمارت موجود نہیں ہے۔ یہ رپورٹ کرتا ہے کہ جواب غلط ہے، لہذا عمارت کے لیے گمشدہ فیلڈز کا دعوی نہیں کیا جا سکتا۔ Rust، Python، JavaScript، اور Java میں لائبریری کے تمام نفاذ اس معاملے میں ایک ہی مشترکہ فائلوں کے ارد گرد گزرتے ہیں۔
اس سے کیا حل نہیں ہوتا
ایک درست، تفویض کردہ زپ کوڈ اب بھی غلط ہو سکتا ہے۔ اگر صارف اپنے پڑوسی کا کوڈ فراہم کرتا ہے، تو اس دستاویز میں موجود تمام چیک پاس ہو جائیں گے۔ اس بات کو یقینی بنانے کے لیے کہ کوڈ اس کے سامنے والے شخص کا ہے، دوسرے کنٹرولز کی ضرورت ہے، جیسے کہ وہ پتہ دکھانا جہاں سے کوڈ کی تصدیق کی گئی ہے۔
اکیلے متن شاذ و نادر ہی کسی عمارت کی شناخت کرتا ہے۔ "فیبین ہوٹل کے پیچھے، NTA روڈ سے دور” علاقے کی وضاحت کرتا ہے۔ resolve_address اگر تمام شواہد اس کی تائید کرتے ہیں تو یہ ٹول صارف کو علاقے کے سابقہ والے سوال کے ساتھ جواب دیتا ہے۔ اگر آپ عین مطابق عمارت چاہتے ہیں، تو براہ کرم لوکیشن پن کی درخواست کریں۔
پتہ ذاتی ڈیٹا ہے۔ لیول 2 ہٹ گھر کے پتے واپس کرتا ہے، لہذا نتائج کو نائجیریا کے ڈیٹا پروٹیکشن قوانین کے مطابق دیکھیں اور پابندی کو لیول 1 پر رکھیں جب تک کہ مزید ضرورت نہ ہو۔
نتیجہ
چونکہ ماڈل راستے میں سب سے کم پر اعتماد جزو ہے، اس لیے یہ سب سے چھوٹا آپریشن فراہم کرتا ہے: سٹرنگ نکالنا۔ تجزیہ کار ساخت کو مفت میں چیک کرتا ہے۔ رجسٹری آفس عمارت کے وجود کی تصدیق کرتا ہے۔ آپ کی میز، جو بطور سابقہ درج کی گئی ہے، اس بات کا تعین کرتی ہے کہ آپ کا کام کہاں ہوگا۔ تبدیلیاں صارف کو سوال کے طور پر واپس کر دی جاتی ہیں، اور پیسہ خرچ کرنے یا پتہ ظاہر کرنے کی طاقت انسانی کنٹرول والی ترتیب میں ہے۔
ماڈل کے ایک نیا فارمیٹ سیکھنے کے بعد بھی حدود کارآمد رہتی ہیں۔ یہی ڈیزائن ایڈریس سسٹم، ٹیکس کوڈ، یا اکاؤنٹ نمبر میں اگلی تبدیلی پر لاگو ہوتا ہے، اور ماڈل بھی دیر سے سیکھتا ہے۔
کوڈ Github.com/Adeniyikayodee/ng-postcode پر MIT لائسنس کے تحت اوپن سورس ہے۔ اپنی زبان کے لیے موزوں لائبریریاں انسٹال کریں:
pip install ng-postcode # Python
npm install ng-postcode-js # JavaScript and TypeScript
cargo add ng-postcode # Rust
جاوا کے لیے، Maven کوآرڈینیٹ ہیں: io.github.adeniyikayodee:ng-postcode-api. اگر لائبریری میں کوئی غلط مثالیں ہیں تو براہ کرم ایک مسئلہ کھولیں۔