เมื่อพูดถึง API ของ JSON เป็นวิธีปฏิบัติที่ดีในการแผ่การตอบสนองออกและหลีกเลี่ยงวัตถุ JSON ที่ซ้อนกันหรือไม่
ตัวอย่างเช่นสมมติว่าเรามี API คล้ายกับ IMDb แต่สำหรับวิดีโอเกม มีหน่วยงานคู่เกมแพลตฟอร์ม ESRBRating และ GamePlatformMap ซึ่งทำแผนที่เกมและแพลตฟอร์ม
สมมติว่าคุณร้องขอ / เกม / 1 ซึ่งดึงข้อมูลเกมด้วย ID 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 / Hibernate ระบบอาจทำสิ่งนี้ให้คุณโดยอัตโนมัติหากตั้งค่าเป็น FETCH.EAGER
อีกตัวเลือกหนึ่งคือเพียงแค่ API และเพิ่มจุดสิ้นสุดเพิ่มเติม
ในกรณีนั้นเมื่อมีการร้องขอ / game / 1 เพียงแค่ส่งคืนวัตถุเกม
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
}
หากคุณต้องการแพลตฟอร์มและ / หรือ ESRBRating คุณจะต้องเรียกสิ่งต่อไปนี้:
/ game / 1 / platform / game / 1 / esrb
วิธีนี้ดูเหมือนว่าจะสามารถเพิ่มการเรียกไปยังเซิร์ฟเวอร์ได้อีกหลายครั้งโดยขึ้นอยู่กับข้อมูลที่ลูกค้าต้องการและเมื่อพวกเขาต้องการ
มีความคิดครั้งสุดท้ายที่ฉันมีที่ที่คุณจะมีอะไรเช่นนี้กลับมา
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
"platforms": ["Xbox","Playstation"]
}
อย่างไรก็ตามสิ่งนี้ถือว่าพวกเขาไม่ต้องการ ID หรือข้อมูลอื่นใดที่อาจเกี่ยวข้องกับออบเจ็กต์ของแพลตฟอร์มเหล่านั้น
ฉันถามโดยทั่วไปว่าวิธีใดที่ดีที่สุดในการจัดโครงสร้างออบเจ็กต์ JSON ของคุณที่ส่งคืนจาก API ของคุณ คุณควรพยายามอยู่ใกล้กับเอนทิตีของคุณมากที่สุดหรือไม่ก็ควรใช้ Domain Objects หรือ Data Transfer Objects ฉันเข้าใจวิธีการที่จะมีการแลกเปลี่ยนไม่ว่าจะทำงานบนชั้นการเข้าถึงข้อมูลหรือทำงานให้กับลูกค้ามากขึ้น
ฉันอยากได้ยินคำตอบที่เกี่ยวข้องกับการใช้ Spring MVC เป็นเทคโนโลยีแบ็กเอนด์สำหรับ API ด้วย JPA / Hibernate หรือ MyBatis สำหรับการคงอยู่