Я запускаю приложение SDR на основе Spring Boot Gradle Plugin . Я недавно обновился с 2.1.9.RELEASE до 2.2.0.RELEASE . Не будучи на 100% уверенным, что именно это и было причиной, SDR теперь, похоже, предоставляет дополнительное поле _embedded
для каждого ресурса. Новое поле содержит данные связанных сущностей.
Например, это ресурс, доступный с 2.1.9.RELEASE :
{
"uuid": "77315176-cb4f-4126-8e8b-9007457a7ce1",
"name": "root",
"_links": {
"self": {
"href": "localhost/users/1"
},
"user": {
"href": "localhost/users/1"
},
"group": {
"href": "localhost/users/1/group"
}
}
}
Этот же ресурс открытс 2.2.0.RELEASE :
{
"uuid": "77315176-cb4f-4126-8e8b-9007457a7ce1",
"name": "root",
"_embedded": {
"group": {
"uuid": "be43382c-7b03-4d28-9597-7284986f700b",
"name": "admin"
}
},
"_links": {
"self": {
"href": "localhost/users/1"
},
"user": {
"href": "localhost/users/1"
},
"group": {
"href": "localhost/users/1/group"
}
}
}
Без доказательства я предполагаю следующие недостатки:
- Это значительно увеличивает размер ответа. Я могу понять, что есть случаи использования, в которых эти дополнительные данные желательны, однако в таких случаях я предпочитаю выставлять их вручную, создавая Проекции по мере необходимости.
- Для сбора дополнительно предоставляемых данных требуются дополнительные транзакции базы данных, что отрицательно влияет на производительность.
- По умолчанию предоставляется больше открытых API, которые необходимо поддерживать. Опять же, я бы предпочел использовать Проекции , чтобы минимизировать ответ, если это возможно.
Это мои вопросы:
- IsМожно ли восстановить предыдущий формат API, например, настроить новую функцию или полностью ее отключить?
- Интересно, каково было решение для этого дизайна. Учитывая вышеизложенные недостатки, какие преимущества дает новая функция?