From the JSON:API spec: https://jsonapi.org/format/#document-meta
Where specified, a meta member can be used to include non-standard meta-information. The value of each meta member MUST be an object (a “meta object”).
Any members MAY be specified within meta objects.
Handling of metadata in the JSON:API normalizers already exists.
RelationshipNormalizer
return CacheableNormalization::aggregate([
'data' => $this->serializer->normalize($object->getData(), $format, $context),
'links' => $this->serializer->normalize($object->getLinks(), $format, $context)->omitIfEmpty(),
'meta' => CacheableNormalization::permanent($object->getMeta())->omitIfEmpty(),
]);
ResourceIdentifierNormalizer
if ($object->getMeta()) {
$normalization['meta'] = $this->serializer->normalize($object->getMeta(), $format, $context);
}
The problem is there's no way to add meta information to these objects. See ResourceObjectNormalizer::serializeField
if ($field instanceof EntityReferenceFieldItemListInterface) {
// Build the relationship object based on the entity reference and
// normalize that object instead.
assert(!empty($context['resource_object']) && $context['resource_object'] instanceof ResourceObject);
$resource_object = $context['resource_object'];
$relationship = Relationship::createFromEntityReferenceField($resource_object, $field);
$normalized_field = $this->serializer->normalize($relationship, $format, $context);
}
createFromEntityReferenceField takes a meta and links parameter. But there's no way to add information.
This is useful for building a headless application on Drupal to provide context about the information.