Я не думаю, что есть какое-то эмпирическое правило, и мне не нравится идея возврата данных, которые не нужны клиенту. Ваш дизайн сервиса должен зависеть от бизнес-функциональности, предоставляемой клиентам. Поэтому, если вы ожидаете, что клиенту часто понадобится только Автомобиль, вам следует определить операцию, которая будет возвращать только Автомобиль. Если клиенту иногда также может понадобиться Car with Drivers, вам нужно определить вторую операцию, которая вернет Car with Drivers.
Если ваш сервис работает в основном как CRUD высокого уровня, тогда может быть разумно вернуть хотя бы первый уровень связанных объектов, но опять же, это только обобщение, основанное на предоставленной функциональности. Другим полезным методом могут быть агрегаты. В совокупности связанная сущность не имеет смысла без родительской сущности. Например, Автомобиль с Водителем не является совокупным, потому что Водитель - это отдельная сущность. Но Invoice и InvoiceLine являются совокупными, потому что вы не можете определить InvoiceLine без Invoice. В этом случае может быть полезно вернуть Invoice со всеми InvoiceLines. Опять же, это не так во всех ситуациях. Я работал над приложением подтверждения, где пользователям было разрешено просматривать и утверждать только заголовок Invoice и InvoiceLines из своего центра затрат, поэтому, если Invoice содержал более 50 InvoiceLines, но пользователю было разрешено видеть только одну строку, не было причин для их передачи.
Подумайте о функциональности, предоставляемой вашим сервисом, и необходимая сложность передаваемых объектов будет намного понятнее.