Correct way of using Replication C++

I am implementing movement for my characters and I have tried different ways of doing it which both seem to work. Now I wonder which is more optimal/correct way of doing it.

The first attempt I created a Server RPC and a NetMultiCast RPC where the client would call the Server RPC if he wants to move and then the server would call the NetMultiCast RPC to update all the clients and actually make him move.

The second approach I made a Server RPC and replicated the motion variable. So the client would call the Server RPC which would do the movement and that property would be replicated so the calling client would also be moving.
(the replicated prop is a float that represents the direction)

Is any of these 2 ways the correct way and if so, which one?