JSON: функция API Sparse Fieldsets позволяет запрашивать только определенные c поля ресурса:
Клиент МОЖЕТ запросить, чтобы конечная точка возвратила только указанные c поля в ответе для каждого типа путем включения параметра fields [TYPE].
https://jsonapi.org/format/#fetching -sparse-fieldsets
Поле является либо атрибутом, либо отношение в JSON: API:
Атрибуты объекта ресурса и его отношения вместе называются его «полями».
https://jsonapi.org/format/#document -resource-object- поля
Разреженные наборы полей не должны влиять на значение атрибута или отношения. Если у вас есть такая необходимость, вы не должны моделировать данные как комплексное значение, а представлять их как отдельный ресурс.
Обратите внимание, что нет необходимости в том, чтобы схема базы данных и ресурсы, предоставляемые вашим API, были то же. На самом деле часто имеет смысл не иметь отношения 1: 1 между таблицами базы данных и ресурсами в вашем JSON: API.
Не бойтесь иметь несколько ресурсов. Часто в долгосрочной перспективе это гораздо лучше, чем иметь один ресурс со сложными объектами:
- Вы можете включить связанный ресурс (например,
dog-bodies
, dog-legs
, dog-furs
в вашем случае) с помощью по умолчанию. - Вы можете автоматически сгенерировать идентификаторы для этих ресурсов на основе постоянного идентификатора родительского ресурса.
- При наличии отдельных ресурсов у вас могут быть гораздо более строгие ограничения и более простая документация для API.
- Вы можете уменьшить риск коллизий, поскольку можете поддерживать обновление определенных c частей (например,
color
атрибут dog-furs
) вместо замены полного значения body
ресурса dogs
.
Главный недостаток, который я вижу в настоящее время - наличие нескольких ресурсов вместо одного - это ограничение на то, что вы не можете создавать или обновлять более одного ресурса в одном запросе с помощью JSON: API v1.0
. Но очень вероятно, что у предстоящего v1.1
этого ограничения больше не будет. Официальный существующий под названием Atomi c Operations предлагается для этого варианта использования членом основной команды, работающим над spe c.