Как лучше отдавать связанные данные через 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"
                }
            ]
        },
    ]`
  1. Отдавать через связанные ресурсы. Но здесь если речь идет об одной книге.
    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"
                }
            ]
        },
    ]`
  1. Отдавать по требованию. Вроде как способ лишен недостатков, но как реализовать в коде - не могу сообразить. 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"
                }
            ]
        },
    ]` 

Ответы (0 шт):