Reading and writing to blockchains today are unique challenges and each often require unique context to do well. Recognizing and accounting for a staking transaction on-chain can involve making multiple RPC requests and combining the results of multiple data models. Constructing a staking transaction may require fetching a collection of on-chain data and an understanding of a particular SDK used to construct transactions for that particular network.
In Rosetta, a single abstraction is used to represent on-chain activity and to construct transactions. If you know how to read transactions, you can construct transactions. If you know how to construct transactions, you can read transactions.
Single Set of Types for Data API and Construction API
In Rosetta, there is only one notion of an account, transaction, and transaction operation for both reading and writing from a blockchain. Not to mention, this single notion is used for all blockchains with Rosetta implementations. This means you could (not that you should), take a stream of operations you saw occur in a block and pass them to the Construction API to construct an identical transaction.