JSON API'lerine gelince, yanıtları düzeltmek ve iç içe geçmiş JSON nesnelerinden kaçınmak iyi bir uygulama mıdır?
Örnek olarak IMDb'ye benzer bir API'miz var ama video oyunları için. Oyun ve Platformları haritalayan bir kaç varlık, Oyun, Platform, ESRBRating ve GamePlatformMap vardır.
Diyelim ki, ID 1 ile oyunu alan / oyun / 1'i talep edelim ve oyun nesnesini platformlar ve esrbRating ile iç içe geçirir.
{
"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 gibi bir şey kullanıyorsanız, FETCH.EAGER olarak ayarlanmışsa, sizin için otomatik olarak bunu yapabilir.
Diğer seçenek basitçe API ve daha fazla bitiş noktası eklemektir.
Bu durumda / oyun / 1 istendiğinde sadece oyun nesnesi döndürülür.
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
}
Platformları ve / veya ESRBRating'i istiyorsanız aşağıdakileri çağırmanız gerekir:
/ oyun / 1 / platform / oyun / 1 / esrb
Bu yöntem, istemcinin ihtiyaç duyduğu verilere ve ne zaman ihtiyaç duyduklarına bağlı olarak sunucuya birkaç çağrı daha ekleyebilecek gibi görünüyor.
Bunun gibi bir şeyin geri döndüğü yerde yaşadığım son bir düşünce vardı.
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
"platforms": ["Xbox","Playstation"]
}
Ancak bu, kimlik numaralarına ihtiyaç duymadıklarını veya bu platform nesneleriyle ilişkili olabilecek diğer bilgilerin ne olduğunu varsayar.
Genel olarak, API'nizden döndürülen JSON nesnelerinizi yapılandırmanın en iyi yolunun ne olduğunu soruyorum. Kurumlarınıza mümkün olduğunca yakın kalmaya mı çalışmalısınız yoksa Etki Alanı Nesneleri veya Veri Aktarım Nesneleri'ni kullanmanız uygun mudur? Metodların, veri erişim katmanı üzerinde daha fazla iş veya müşteri için daha fazla iş olduğu gibi ticari teklifleri olacağını anlıyorum.
Ayrıca, Spring MVC'yi API için arka uç teknolojisi olarak kullanmaya ilişkin bir cevap duymak isterim, ya da kalıcılık için JPA / Hibernate ya da MyBatis.