There is no REST principle against one resource update that updates other resources, but you should inform the client of updated resources in the response.
Consider the following (I'm quoting the lines from RESTful principles by Fielding):
"A resource is a conceptual mapping to a set of entities, not the entity that corresponds to the mapping at any particular point in time."
Imagine a resource /last_user
that returns information about the last user that requested information from another resource /book_info
. Now as soon as a client uses /book_info
, the resource /last_user
is updated and this update was not even done via the /last_user
resource.
Concerning the design of a resource update that updates other resources, consider the following:
- "Any information that can be named can be a resource" including "a collection of other resources".
- "REST concentrates all of the control state into the representations received in response to interactions."
- "By default, the response to a retrieval request is cacheable and the responses to other requests are non-cacheable." "A component can override these defaults by including control data that marks the interaction as cacheable, non-cacheable or cacheable for only a limited time."
In practical terms, include the (full) details of updated resources (e.g. created account and user) in the post-response and indicate "cacheable". For more information about this practice, have a look at this answer and related question.
The single transaction requirement is a server-side implementation detail and I imagine that in most cases creation and/or update of a resource will result in a single database transaction involving the creation and/or update of several (related) database records (e.g. audit records).