@DWS11

Как лучше отдавать связанные данные через rest api laravel?

Приветствую!
Вопрос составной:
- подскажите/поделитесь, кто как отдает связанные данные через rest api, какие есть лучшие практики;
- как это реализовать в laravel.

Полигоном пусть будет интернет-магазин, который продает книги.
Имеем сущность Книга у которой может быть несколько жанров, к ней можно оставлять комментарии.

Как я это представляю:
1) Отдавать все сразу. Но, если нам потребуются только книги списком (без жанров, к примеру), то ответ получится избыточным.
url /api/v0.1/books
"book": [
    {
        "id": "1",
        "author_id": "3",
        "genres": [
            {
                "id": "1",
                "name": "Fantasy"
            },
            {
                "id": "2",
                "name": "Drama"
            }
        ],
        "comments": [
            {
                "id": "1",
                "user_id": "35",
                "text": "Lorem ipsum"
            }
        ]
    },
]


2) Отдавать через связанные ресурсы. Но здесь если речь идет об одной книге.
url /api/v0.1/books/1/genres /api/v0.1/books/1/comments
"book": [
    {
        "id": "1",
        "author_id": "3",
        "genres": [
            {
                "id": "1",
                "name": "Fantasy"
            },
            {
                "id": "2",
                "name": "Drama"
            }
        ]
    },
]


3) Отдавать по требованию. Вроде как способ лишен недостатков, но как реализовать в коде - не могу сообразить.
url /api/v0.1/books?expand=genres&comments
"book": [
    {
        "id": "1",
        "author_id": "3",
        "genres": [
            {
                "id": "1",
                "name": "Fantasy"
            },
            {
                "id": "2",
                "name": "Drama"
            }
        ],
        "comments": [
            {
                "id": "1",
                "user_id": "35",
                "text": "Lorem ipsum"
            }
        ]
    },
]
  • Вопрос задан
  • 222 просмотра
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Можно вместо ресурсов Лары использовать Fractal, там третий вариант поддерживается из коробки.
Ну или вообще GraphQL использовать.
Ответ написан
Комментировать
@d-sem
Посмотрите в сторону https://github.com/spatie/laravel-query-builder
И фильтры по полям, и связи по требованию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы