Как скрыть поле _embedded сущности в Spring Data Rest - PullRequest
1 голос
/ 26 октября 2019

Я запускаю приложение 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"
    }
  }
}

Без доказательства я предполагаю следующие недостатки:

  1. Это значительно увеличивает размер ответа. Я могу понять, что есть случаи использования, в которых эти дополнительные данные желательны, однако в таких случаях я предпочитаю выставлять их вручную, создавая Проекции по мере необходимости.
  2. Для сбора дополнительно предоставляемых данных требуются дополнительные транзакции базы данных, что отрицательно влияет на производительность.
  3. По умолчанию предоставляется больше открытых API, которые необходимо поддерживать. Опять же, я бы предпочел использовать Проекции , чтобы минимизировать ответ, если это возможно.

Это мои вопросы:

  1. IsМожно ли восстановить предыдущий формат API, например, настроить новую функцию или полностью ее отключить?
  2. Интересно, каково было решение для этого дизайна. Учитывая вышеизложенные недостатки, какие преимущества дает новая функция?
...