Я могу думать о двух способах справиться с этим.
Пользовательский тип носителя
Вы можете использовать один из следующих (или обоих) типов мультимедиа для получения полного представления продукта:
GET /api/products/1 HTTP/1.1
Host: example.com
Accept: application/json
GET /api/products/1 HTTP/1.1
Host: example.com
Accept: application/vnd.company.full+json
И следующий тип носителя для получения только краткого представления продукта:
GET /api/products/1 HTTP/1.1
Host: example.com
Accept: application/vnd.company.short+json
Параметр строки запроса
Кроме того, вы можете поддержать выбор полей для извлечения с параметром строки запроса.
Используйте следующее, чтобы получить полное представление о продукте:
GET /api/products/1 HTTP/1.1
Host: example.com
Accept: application/json
И следующее, чтобы получить только название и цену продукта:
GET /api/products/1?fields=name,price HTTP/1.1
Host: example.com
Accept: application/json
Для удобства, несмотря на перечисленные поля, вы всегда можете вернуть идентификатор продукта.
Описанные выше подходы также могут быть применены к коллекциям ресурсов, таким как /api/products
.
Как указал Эверт в комментариях, ", возможно, стоило бы исследовать, действительно ли отправка всего в любом случае приводит к снижению производительности или пропускной способности. Иногда бывает более приятным иметь более точные модели для ясности, если нет значительных затрат. «
Пойдем дальше и процитируем Дональда Кнута: "преждевременная оптимизация - корень всего зла" . То есть отсутствие проблем производительности, связанных с измерением , не следует оптимизировать, поскольку вы думаете, что вы получите прирост производительности. Можно выполнить некоторые очевидные оптимизации, но следует избегать всего, что не является достаточно четкой оптимизацией, пока ее не измерить.