В настоящее время я создаю rest-api с Java-EE/Jax-RS/JPA. У меня уже есть рабочая база данных + модель базы данных и используется опция eclipse для создания jpa-сущностей из существующих таблиц. Я создал некоторые базовые службы, и теперь мне любопытно, имеет ли смысл использование jpa-ассоциаций для создания rest-api или нет, потому что иногда это приводит к большому фрагменту данных, которые становятся доступными. Я также не уверен, где отделять данные, которые подвергаются.Java Rest API - разделение ресурсов/данных с JPA
например:
table "FOLDER" has an id, name
table "FOLDER_ITEM" has an id, folder_id (fk), item_id (fk)
table "ITEM" has an id, name, itemprop_id(fk)
table "ITEM_PROP" has an id, valueA, valueB, valueC
Вызов /папки/1 в настоящее время выводит:
{
"id": 1,
"name": "Folder1",
"items": [
{
"id": 1,
"name": "pencil",
"item_prop": {
"id": "1",
"valueA": "example",
"valueB": "example",
"valueC": "example"
}
},...]
}
, который добавляет к большому количеству данных, если есть много элементов, подключенных к папке.
Так что я подумал, что, возможно, проще и чище отделить данные, создав услугу /items/{id}, которая дала бы мне только по одному пункту за раз. Но в этом случае мне также нужно будет создать службу для получения элементов папки. Например, /items /? WithFolderId = 1 или даже /folders/1/items. Я вижу следующие варианты:
1) использовать JPA-ассоциаций, но отмечают список элементов (внутри папки-класса) как JSON-игнорировали для /папок/1 и принудительно вывод элементов при вызове /folders/1/items.
2) писать запросы на мой собственный
в последнем случае я спрашиваю, моя самость «почему бы я даже использовать JPA вообще?»
В то время как я смущен этим, мне также может потребоваться сказать, что все мои таблицы имеют внешний ключ для идентификатора пользователя. Так что я обычно хочу только получить папки определенного пользователя (пользователя, который в настоящий момент вошел в систему), создав службу /users/1/folders и на этом этапе, где я могу отделить данные? Я мог бы обслуживать весь мой клиент из конечной точки /users/, которая привела бы к той же проблеме, что и выше. И теперь мы можем определенно говорить о большом фрагменте данных, которые могут быть раскрыты, в зависимости от того, сколько папок у пользователя есть и сколько элементов содержатся в папках.
{
"id":1
"name":"testuser"
"password":"PW"
"folders":
[{
"id": 1,
"name": "Folder1",
"items": [
{
"id": 1,
"name": "pencil",
"item_prop": {
"id": "1",
"valueA": "example",
"valueB": "example",
"valueC": "example"
}
},....]
},....]
}
Я чувствую, что я сильно отвлекаюсь на эту проблему. Есть ли какие-либо предложения или общие способы решения этой проблемы?
Спасибо, что указали на это :) Я просто подумал об этом сам в последние несколько часов. Остается только вопрос о том, где можно отделить данные, но я думаю, что это отличается от приложения к приложению. – LLLen