JSON API와 관련하여 응답을 평평하게하고 중첩 된 JSON 객체를 피하는 것이 좋습니다.
예를 들어 IMDb와 유사하지만 비디오 게임용 API가 있다고 가정하겠습니다. 게임 및 플랫폼을 매핑하는 몇 가지 엔티티 인 Game, Platform, ESRBRating 및 GamePlatformMap이 있습니다.
/ game / 1을 요청하여 ID가 1 인 게임을 가져오고 플랫폼과 esrbRating이 중첩 된 게임 객체를 반환한다고 가정 해 보겠습니다.
{
"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 / 플랫폼 / game / 1 / esrb
이 방법은 클라이언트가 필요로하는 데이터와 필요할 때에 따라 서버에 여러 번 더 호출 할 수있는 것처럼 보입니다.
당신이 이것과 같은 것을 가질 수있는 마지막 생각이있었습니다.
{
"id": 1,
"title": "Game A",
"publisher": "Publisher ABC",
"developer": "Developer DEF",
"releaseDate": "2015-01-01",
"platforms": ["Xbox","Playstation"]
}
그러나 이것은 ID 나 다른 플랫폼 정보와 관련된 정보가 필요하지 않다고 가정합니다.
API에서 반환 된 JSON 객체를 구성하는 가장 좋은 방법은 무엇인지 일반적으로 묻습니다. 가능한 한 엔터티에 가까이 접근해야합니까, 아니면 도메인 개체 또는 데이터 전송 개체를 사용하는 것이 좋습니다? 데이터 액세스 계층에 대한 더 많은 작업이나 클라이언트에 대한 더 많은 작업 중 하나의 방법으로 트레이드 오프가 발생한다는 것을 알고 있습니다.
또한 JPA / Hibernate 또는 MyBatis를 사용하여 API의 백엔드 기술로 Spring MVC를 사용하는 것과 관련된 답변을 듣고 싶습니다.