This sounds more like a complex attribute or a child resource. The attributes control a discrete piece of functionality and
you need to be able to turn that on/off as a unit. The attributes are required if that functionality is turned on.
Agreed, but how do you handle scenario where you just add resource that has 30 attributes all in attribute groups.
You call :add() without any parameters as you plan to add/edit attributes that are part of attribute group in next step.
you than call :write-attribute(name=non-require-attribute-that-is-part-of-group-that-has-few-required, value="some-value") and this should fail, as attribute is part of attribute group.
It is a tricky thing to address, as we have not atomic way to write/update more than one attribute at ones.
maybe have extra operation to do write-attribute-group(name="first-attribute-group", attr1=value,attr2=value) similar to :add semantics.
otherwise I don't see any good way to do atomic updates of whole attribute group.