இன்வாய்ஸ்கள் மற்றும் ரசீதுகள் ஒரே நுழைவாயிலைப் பகிர்ந்து கொள்கின்றன. இரண்டு கட்டமைப்புகளையும் கலப்பதைத் தவிர்ப்பது எப்படி?
ஒரு இடைமுகம் இன்வாய்ஸ்கள் மற்றும் ரசீதுகள் இரண்டையும் பெறுகிறது, மேலும் பெரிய பொருட்களை "அனைத்து புலங்களும் விருப்பத்திற்குரியது" என்று எழுதுவது எளிது. அத்தகைய பொருள் எதையும் வைத்திருக்க முடியும், ஆனால் அது சரியாக என்ன பெறப்பட்டது என்று சொல்வது கடினம். It would be clearer to keep two separate contracts and select one of them with the explicit type field.
இன்வாய்ஸ்கள் மற்றும் ரசீதுகள் செயலாக்கத்திற்காக ஒரே இடைமுகத்தில் வைக்கப்படுகின்றன, ஆனால் "அனைத்து புலங்களும் விருப்பத்தேர்வு" கொண்ட ஒரு பரந்த பொருள் மட்டுமே அதைப் பெறப் பயன்படுத்தினால், அது எந்த உள்ளீட்டிற்கும் இடமளிக்கும், ஆனால் எந்த வகையான ஆவணம் பெறப்பட்டது என்பதைக் கூற முடியாது. இந்தக் கட்டுரை டெவலப்பர்கள் மற்றும் வணிகப் பணியாளர்களுக்காக வடிவமைக்கப்பட்டுள்ளது, அவர்கள் ஒரு ஆவணத்தைப் பெறும் இடைமுகத்தை வடிவமைக்க வேண்டும் அல்லது JSON ஸ்கீமா சரிபார்ப்பு விதிகளைப் பராமரிக்க வேண்டும். இதைப் படித்த பிறகு, இரண்டு சுயாதீன ஒப்பந்தங்களை வைத்திருப்பது, வெளிப்படையான வகை புலத்துடன் ஒன்றைத் தேர்ந்தெடுப்பது மற்றும் கிளை மோதல்கள் மற்றும் அறியப்படாத வகைகளைக் கையாளுவது எப்படி என்பதை நீங்கள் கற்றுக் கொள்வீர்கள்.
இந்த கட்டுரையில் உள்ள எடுத்துக்காட்டுகள் செயலாக்க முறைகளை நிரூபிக்க செயற்கை மாதிரிகளைப் பயன்படுத்துகின்றன. குறியீடு ஒரு தனிமைப்படுத்தப்பட்ட சூழலில் எடுத்துக்காட்டுகளுடன் சரிபார்க்கப்பட்டது, ஆனால் இது அனைத்து உண்மையான கோப்புகள் அல்லது தயாரிப்பு செயல்திறனுக்கான உத்தரவாதம் அல்ல. முக்கியமான ஆவணங்களைச் செயலாக்குவதற்கு முன், அசல் ஆவணங்களை வைத்து, உரையில் உள்ள எல்லைகள் மற்றும் ஏற்றுக்கொள்ளும் உருப்படிகளின்படி அவற்றை மதிப்பாய்வு செய்யவும்.
இன்வாய்ஸ்கள் மற்றும் ரசீதுகளின் பகிரப்பட்ட நுழைவை எவ்வாறு கையாள்வது? ஒரு வாக்கியத்தின் முடிவு
ஒரே போர்ட்டலில் இருந்து இரண்டு ஆவணங்களைப் பெறும்போது, எல்லாவற்றையும் வைத்திருக்கக்கூடிய பரந்த பொருளைப் பயன்படுத்துவதை விட, இரண்டு தனித்தனி ஒப்பந்தங்களை வைத்து, அவற்றில் ஒன்றைத் தேர்ந்தெடுக்க தேவையான kind புலத்தைப் பயன்படுத்துவது தெளிவாக இருக்கும்.
| உங்கள் நிலைமை | பரிந்துரைக்கப்பட்ட நடைமுறைகள் | காரணம் |
|---|---|---|
| அதே இடைமுகம் இன்வாய்ஸ்கள் மற்றும் ரசீதுகளைப் பெற வேண்டும் | இரண்டு தனித்தனி ஒப்பந்தங்களை வைத்திருக்கவும், தேவையான வகையான புலத்துடன் தேர்ந்தெடுக்கவும் | அனைத்து துறைகளும் விருப்பமான ஒரு பெரிய பொருள் எதையும் வைத்திருக்க முடியும், ஆனால் பெறப்பட்டதை விளக்குவது கடினம். |
| oneOf மூலம் கிளைகளை ஒழுங்கமைக்கவும் | ஒவ்வொரு கிளையும் வகையை சரிசெய்ய const ஐப் பயன்படுத்துகிறது | oneOf சரியாக ஒரு கிளையை பொருத்த வேண்டும். கிளைப் புலங்கள் ஒன்றுடன் ஒன்று சட்ட உள்ளீடு தோல்வியடையும். |
| உள்ளீடு விடுபட்ட வகை அல்லது புல முரண்பாடு | முரண்பட்ட புலங்கள் மற்றும் ஆதாரங்களைக் காட்டும் தெளிவான பிழைச் செய்தியை வழங்கவும் | "பொருத்தம் இல்லை" என்பதைக் காண்பிப்பது மட்டுமே சிக்கலைக் கண்டறிய உதவாது |
| வகைப்படுத்தி ஆவண வகைகளை வேறுபடுத்த முடியாது | அறியப்படாத நிலையைத் தக்கவைத்து, வகைப்படுத்தப்படும் சுயாதீன வரிசையை உள்ளிடவும் | தற்செயலாக ஒரு கிளையைத் தேர்ந்தெடுப்பது போலியான "வெற்றியை" மட்டுமே உருவாக்கும். |
| கட்டமைப்பு சரிபார்ப்பு நிறைவேற்றப்பட்டது | வகைப்பாடு சரியானது என்று அர்த்தமல்ல, ஆவணங்கள் உண்மையானவை என்று அர்த்தமல்ல. | வகைப்பாடு நம்பிக்கை, கட்டமைப்பு சரிபார்ப்பு மற்றும் வணிக நம்பகத்தன்மை மூன்று வெவ்வேறு நிலைகள் |
ஏன் பரந்த பொருளைப் பயன்படுத்த முடியாது?
அனைத்து புலங்களும் விருப்பமானவை என்ற ஆபத்து
ஒரு இடைமுகம் ஒரே நேரத்தில் விலைப்பட்டியல்கள் மற்றும் ரசீதுகள் இரண்டையும் பெறும்போது, "தேர்ந்தெடுக்கக்கூடிய அனைத்து புலங்களும்" கொண்ட ஒரு பெரிய பொருளை எழுதுவது எளிது. அத்தகைய பொருள் உண்மையில் பல்வேறு உள்ளீடுகளை ஏற்க முடியும், ஆனால் செலவு:
- கட்டமைப்பு ரீதியாக, எந்த வகையான ஆவணம் பெறப்படுகிறது என்பதை தீர்மானிக்க முடியாது.
- இரண்டு ஆவணங்களுக்கும் தேவையான புலங்கள் மற்றும் விருப்பங்கள் கலக்கப்பட்டுள்ளன, மேலும் சரிபார்ப்பு விதிகள் பெருகிய முறையில் மங்கலாகி வருகின்றன.
- பிழைகள் ஏற்படும்போது, உள்ளீடு எதிர்பார்ப்புகளை பூர்த்தி செய்யாத இடத்தை சரியாக விளக்குவது கடினம்.
ஒரு தெளிவான அணுகுமுறை இரண்டு தனித்தனி ஒப்பந்தங்களை வைத்திருப்பது மற்றும் தெளிவான வகை புலத்துடன் ஒன்றைத் தேர்ந்தெடுப்பது.
oneOf அவர்களில் ஒருவர் மட்டுமல்ல
கிளைகள் ஒன்றுடன் ஒன்று செல்லுபடியாகும் உள்ளீட்டு தோல்விகளை ஏற்படுத்தும்
oneOf ஆனது ஒரு கிளைக்கு சரியாக பொருந்துவதற்கு உள்ளீடு தேவைப்படுகிறது. இரண்டு கிளைகளும் ஒரே நேரத்தில் கடந்து சென்றால், ஒட்டுமொத்த சரிபார்ப்பும் தோல்வியடையும்.
ஒரு கிளையில் சில விருப்பப் புலங்கள் மட்டுமே இருந்தால், அவை பரவலாக ஒன்றுடன் ஒன்று சேர வாய்ப்புள்ளது. இந்த கட்டத்தில், முறையான உள்ளீடு உண்மையில் சரிபார்ப்பில் தேர்ச்சி பெறத் தவறிவிட்டது.
ஒன்றுடன் ஒன்று அகற்ற வகை மற்றும் const ஐப் பயன்படுத்தவும்
மதிப்புகளை சரிசெய்ய தேவையான kind புலம் மற்றும் const ஐப் பயன்படுத்துவதன் மூலம், நீங்கள் கிளைகளுக்கு இடையில் தெளிவான எல்லைகளை நிறுவலாம் மற்றும் அத்தகைய ஒன்றுடன் ஒன்று முன்கூட்டியே அகற்றலாம்.
சேர்க்கை விதிகள் பற்றிய கூடுதல் விவரங்களுக்கு, JSON ஸ்கீமா சேர்க்கை விதிகள் ஐப் பார்க்கவும்.
ஒரு இயங்கக்கூடிய திசைதிருப்பல் நெறிமுறை
from jsonschema import Draft202012Validator
def branch(kind, identity):
return {
"type": "object", "additionalProperties": False,
"required": ["kind", identity],
"properties": {"kind": {"const": kind},
identity: {"type": "string", "minLength": 1}}
}
schema = {"oneOf": [branch("invoice", "invoice_number"),
branch("receipt", "receipt_number")]}
v = Draft202012Validator(schema)
valid = lambda x: not list(v.iter_errors(x))
assert valid({"kind": "invoice", "invoice_number": "I-1"})
assert valid({"kind": "receipt", "receipt_number": "R-1"})
assert not valid({"kind": "invoice", "receipt_number": "R-1"})
assert not valid({"kind": "receipt", "receipt_number": ""})
assert not valid({"kind": "invoice", "invoice_number": "I-1",
"receipt_number": "R-1"})
assert not valid({"kind": "unknown"})
இது ஒரு நெறிப்படுத்தப்பட்ட உதாரண பதிவு, உண்மையான விலைப்பட்டியலின் முழுமையான புல மாதிரி அல்ல. இந்த குறியீடு கிளை தேர்வு மற்றும் தேவையற்ற புலங்களை நிராகரிப்பதை நிரூபிக்கிறது; வரி விகிதங்கள், தலைப்புகள் மற்றும் தொகைகள் தனித்தனியாக வரையறுக்கப்பட வேண்டும்.
வணிகம் கூடுதல் புலங்களை அனுமதித்தால், இந்த புலங்களுக்கான பெயர்வெளிகள் அனைத்து தடைகளையும் அமைதியாக அகற்றுவதை விட தெளிவாக வரையறுக்கப்பட வேண்டும்.
"பொருத்தமின்மை" பிழை செய்திகளை மட்டும் காண்பிக்க வேண்டாம்
"பொருத்தமின்மை" மட்டுமே காட்டப்படும், மேலும் பயனர்கள் அல்லது பராமரிப்பு ஊழியர்கள் சிக்கல் எங்கு உள்ளது என்பதை அறிய முடியாது. கீழே உள்ள அட்டவணை பல பொதுவான உள்ளீட்டு அம்சங்களையும் அவற்றின் தொடர்புடைய பின்னூட்ட முறைகளையும் பட்டியலிடுகிறது:
| உள்ளீட்டு அம்சங்கள் | உண்மையான சந்தேகங்கள் | கருத்து பரிந்துரைக்கவும் |
|---|---|---|
| குறைபாடு | ஒப்பந்தத்தை தேர்வு செய்ய முடியவில்லை | தயவுசெய்து ஆவண வகையை வழங்கவும் |
| வகை மற்றும் எண் புலங்கள் முரண்பாடு | இரண்டு கட்டமைப்புகளும் கலக்கப்படுகின்றன | முரண்பட்ட புலங்கள் மற்றும் அவற்றின் மூலங்களைக் காண்பிக்கவும் |
| எண்ணிடப்பட்ட வெற்று சரங்கள் | விசை உள்ளது ஆனால் மதிப்பு இல்லை | எண்ணிடப்பட்ட பகுதியைத் திரும்பிப் பார்ப்பது |
| அறியப்படாத வகை | தற்போதைய ஒப்பந்தம் இதை உள்ளடக்கவில்லை | வகைப்படுத்தப்பட வேண்டிய சுயாதீன வரிசையை உள்ளிடவும் |
நிச்சயமற்ற வகைகளுக்கும் வெளியேற வேண்டும்
வகைப்படுத்துபவர் விலைப்பட்டியல்கள் மற்றும் ரசீதுகளுக்கு இடையில் வேறுபடுத்த முடியாவிட்டால், "வெற்றி" செய்ய ஒரு கிளையைத் தோராயமாக தேர்ந்தெடுப்பதை விட அறியப்படாத நிலையைத் தக்கவைத்துக் கொள்ள வேண்டும்.
தனித்தனியாக கருத்தில் கொள்ள வேண்டிய மூன்று வெவ்வேறு நிலைகள் இங்கே உள்ளன:
- வகை நம்பிக்கை: ஆவண வகைகளை தீர்ப்பதில் கணினி எவ்வளவு நம்பிக்கையுடன் உள்ளது.
- கட்டமைப்பு சரிபார்ப்பு: தேர்ந்தெடுக்கப்பட்ட ஒப்பந்தம் பூர்த்தி செய்யப்பட்டதா என்பதை உள்ளிடவும்.
- வணிக நம்பகத்தன்மை: ஆவணங்கள் உண்மையானவை மற்றும் செல்லுபடியாகும்.
கட்டமைப்பு சரிபார்ப்பு சரியானது என்று தலைகீழாக நிரூபிக்க முடியாது, அல்லது ஆவணம் உண்மையானது என்பதை நிரூபிக்க முடியாது.
மொழிபெயர்ப்பு செயல்முறையில் ஆவண வகையையும் தக்கவைத்துக் கொள்ள வேண்டும்
ஒரே புலத்திற்கு வெவ்வேறு ஆவணங்களில் வெவ்வேறு சொற்கள் தேவைப்படலாம். OmniDoc சொற்கள் மற்றும் இருமொழி மதிப்பாய்வு பணிப்பாய்வுகளைப் பயன்படுத்தும் போது, டெலிவரி பட்டியல்களுடன் ஆவண வகைகளை வழங்குவது விமர்சகர்கள் எண் மற்றும் தொகையின் சூழலைப் புரிந்துகொள்ள உதவுகிறது.
ஒரு பரந்த JSON பொருள் இந்த வேறுபாடுகளை அழிக்க அனுமதிக்காதீர்கள்.
📊 முக்கிய ஒப்பீடு
| செய்முறை | ஆவணத்தின் வகையை தெளிவாக வரையறுக்க முடியுமா? | கிளைகள் ஒன்றுடன் ஒன்று இருக்கும் வெளிப்பாடுகள் | அறியப்படாத வகைகளைக் கையாளுதல் |
|---|---|---|---|
| அனைத்து புலங்களுடனும் பரந்த பொருள்கள் விருப்பமானது | என்ன பெறப்பட்டது என்பதை விளக்குவது கடினம் | பொருந்தாது; புலங்களுக்கு இடையில் கிளை எல்லைகள் இல்லை | பரந்த இலக்குகளால் எளிதில் விழுங்கப்படுகிறது மற்றும் கவனிக்க கடினமாக உள்ளது |
| இரண்டு சுயாதீன ஒப்பந்தங்கள் + தேவையான வகை | வகை புலத்தைப் பயன்படுத்தி தெளிவாகத் தேர்ந்தெடுக்கவும் | ஒன்றுடன் ஒன்று குறைக்க மதிப்புகளை சரிசெய்ய கான்ஸ்டைப் பயன்படுத்தவும் | அறியப்படாத நிலையை விட்டுவிட்டு, வரிசைப்படுத்த வேண்டிய வரிசையை உள்ளிடவும் |
🎯 எந்த முறை உங்களுக்கு பொருத்தமானது?
நீங்கள் ஒரே நேரத்தில் விலைப்பட்டியல் மற்றும் ரசீதுகள் இரண்டையும் பெற வேண்டும் என்றால்
இரண்டு தனித்தனி ஒப்பந்தங்களை வைத்திருங்கள் மற்றும் kind ஐ தேவையான புலமாக அமைக்கவும்.
உங்கள் கிளை வயல்கள் பரவலாக ஒன்றுடன் ஒன்று இருந்தால்
ஒரே நேரத்தில் பல கிளைகளுடன் பொருந்தக்கூடிய முறையான உள்ளீட்டைத் தவிர்க்க ஒவ்வொரு கிளையிலும் const உடன் kind ஐ சரிசெய்யவும்.
உங்கள் கணினி கூடுதல் புலங்களை அனுமதித்தால்
முதலில், கூடுதல் புலத்தின் பெயர்வெளியை தெளிவுபடுத்தவும், பின்னர் கட்டுப்பாடுகளை எவ்வாறு தளர்த்துவது என்பதை முடிவு செய்யுங்கள்.
உங்கள் வகைப்படுத்தி போதுமான அளவு உறுதியாக தெரியவில்லை என்றால்
அறியப்படாத நிலையை வைத்து, வரிசைப்படுத்த வேண்டிய வரிசைக்கு ஆவணங்களை அனுப்பவும்; கிளைகளை வலுக்கட்டாயமாக தேர்ந்தெடுக்க வேண்டாம்.
❓ அடிக்கடி கேட்கப்படும் கேள்விகள் (FAQ)
1. அனைத்து புலங்களும் விருப்பமாக இருக்கும் ஒரு பொருளை ஏன் பயன்படுத்தக்கூடாது?
அத்தகைய பங்குதாரர் எதையும் போலியாக செய்ய முடியும், ஆனால் அவர்கள் சரியாக எதைப் பெறுகிறார்கள் என்று சொல்வது கடினம்.
2. oneOf ஏன் செல்லுபடியாகும் நுழைவு தோல்வியை ஏற்படுத்துகிறது?
oneOf க்கு ஒரு கிளையை சரியாக பொருத்த வேண்டும். இரண்டு கிளைகளும் ஒரே நேரத்தில் கடந்து சென்றால், ஒட்டுமொத்த காசோலை தோல்வியடையும். கிளை வயல்கள் பரவலாக ஒன்றுடன் ஒன்று சேரும்போது இந்த நிலைமை ஏற்பட வாய்ப்புள்ளது.
3. கூடுதல் புலங்களை அனுமதிக்கும் போது நீங்கள் என்ன கவனம் செலுத்த வேண்டும்?
கூடுதல் புலத்திற்கான பெயர்வெளி தெளிவாக வரையறுக்கப்பட வேண்டும், மாறாக அனைத்து கட்டுப்பாடுகளையும் அமைதியாக அகற்றுவதற்குப் பதிலாக.
4. வகைப்படுத்தியால் ஆவண வகையை தீர்மானிக்க முடியாவிட்டால் என்ன செய்வது?
அறியப்படாத நிலையை வைத்து, வகைப்படுத்த ஒரு சுயாதீன வரிசையில் உள்ளிடவும்; ஒரு வெற்றிகரமான கிளையை இணைக்க தோராயமாக ஒரு கிளையைத் தேர்ந்தெடுக்க வேண்டாம்.
5. கட்டமைப்பு சரிபார்ப்பில் தேர்ச்சி பெறுவது ஆவணங்களின் நம்பகத்தன்மையை நிரூபிக்கிறதா?
இல்லை. வகைப்படுத்தல் நம்பிக்கை, கட்டமைப்பு சரிபார்ப்பு மற்றும் வணிக நம்பகத்தன்மை ஆகியவை மூன்று தனித்துவமான நிலைகள்; கட்டமைப்பு சரிபார்ப்பு ஆவணங்களின் நம்பகத்தன்மையை நிரூபிக்க முடியாது.
📝 சுருக்கம்
ஒரே உள்ளீட்டில் விலைப்பட்டியல்கள் மற்றும் ரசீதுகளை வைக்கும் போது, இரண்டு தனித்தனி ஒப்பந்தங்களை வைத்து, தேவையான kind புலத்தைப் பயன்படுத்தி அவற்றைத் தேர்ந்தெடுக்கவும், உள்ளிடப்பட்ட ஆவணத்தின் வகையை தெளிவாகத் தெரியும். கிளை சரிபார்ப்பு, பிழை கருத்து மற்றும் அறியப்படாத வகை ஏற்றுமதி ஆகியவையும் ஒன்றாக வடிவமைக்கப்பட வேண்டும்.


