जब JSON एपीआई की बात आती है तो प्रतिक्रियाओं को समतल करने और नेस्टेड JSON ऑब्जेक्ट्स से बचने के लिए यह अच्छा अभ्यास है?
एक उदाहरण के रूप में हम कहते हैं कि हमारे पास IMDb के समान एक एपीआई है, लेकिन वीडियो गेम के लिए। कुछ इकाइयाँ, गेम, प्लेटफ़ॉर्म, ESRBRating और GamePlatformMap हैं, जो गेम्स और प्लेटफ़ॉर्म को मैप करते हैं।
कहते हैं कि आप अनुरोध / खेल / 1 जो आईडी 1 के साथ खेल लाने के लिए और यह खेल वस्तु को प्लेटफार्मों के साथ देता है और नेस्ट्रेस्टिंग नेस्टेड है।
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
"platforms": [
{"id":1,"name":"Xbox"},
{"id":2,"name":"Playstation"}
],
"esrbRating": {
"id": 1,
"code": "E",
"name": "Everyone"
}
}
यदि आप JPA / हाइबरनेट जैसी किसी चीज़ का उपयोग कर रहे हैं तो यह FETCH.EAGER पर सेट होने पर स्वचालित रूप से आपके लिए ऐसा कर सकता है।
अन्य विकल्प केवल एपीआई और अधिक अंत बिंदुओं को जोड़ना है।
उस स्थिति में जब / खेल / 1 का अनुरोध किया जाता है, तो बस खेल वस्तु वापस आ जाती है।
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
}
यदि आप प्लेटफ़ॉर्म और / या ESRBRating चाहते हैं, तो आपको निम्नलिखित कॉल करने होंगे:
/ खेल / 1 / मंच / खेल / 1 / esrb
इस विधि से ऐसा लगता है कि यह संभावित रूप से सर्वर को कई और कॉल जोड़ सकता है, जो क्लाइंट को डेटा की जरूरत है और जब उन्हें इसकी आवश्यकता हो, उसके आधार पर।
एक अंतिम विचार था कि मेरे पास ऐसा कुछ है जहां आप इस तरह से लौट आएंगे।
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
"platforms": ["Xbox","Playstation"]
}
हालाँकि यह मानता है कि उन्हें आईडी या जो भी अन्य जानकारी उन प्लेटफ़ॉर्म ऑब्जेक्ट्स से जुड़ी हो सकती है, की आवश्यकता नहीं है।
मैं सामान्य तौर पर पूछ रहा हूं कि आपके JSON ऑब्जेक्ट्स को आपके API से वापस लाने का सबसे अच्छा तरीका क्या है। क्या आपको अपनी संस्थाओं के करीब रहने की कोशिश करनी चाहिए, या डोमेन ऑब्जेक्ट्स या डेटा ट्रांसफर ऑब्जेक्ट्स का उपयोग करना ठीक है? मैं समझता हूं कि तरीकों में व्यापार से अधिक लाभ होगा, या तो डेटा एक्सेस लेयर पर अधिक काम करना होगा या क्लाइंट के लिए अधिक काम करना होगा।
मैं एपीआई के लिए बैकेंड तकनीक के रूप में स्प्रिंग एमवीसी का उपयोग करने से संबंधित एक उत्तर सुनना चाहूंगा, जिसमें या तो जेपीए / हाइबरनेट या दृढ़ता के लिए मायबैटिस हो।