Start here. This is the direct spoken answer to practice first.
Why this question matters
Approval workflows appear in content, commerce, and admin tools. The design has to keep draft changes away from public reads while preserving a clean path to review, publish, and rollback.
I would separate draft content from published content, either with explicit versions or status fields that make the read boundary clear. Editors can create and update drafts, reviewers can approve or reject, and publishing creates the version visible to users. Each transition records actor, timestamp, reason, and previous state. Public APIs read only published versions.