I've played with this problem before. (Edit: Everything its named PBR River because that's the shader I started using, but ultimately, the Material shader handled the transparency characteristics MUCH more predictably. I don't know why. Also, I think the structure of the Material could be simplified a LOT - I think I reversed the Eye mask more than I ultimately needed to. )
The PBR River texture uses the Eye property of the State Node A LOT - so that when you look at the surface head-on, it becomes more transparent, while it is similarly used to amplify the reflective and specular characteristics of the ripples. The layer of stones is another Plane object below the river Plane, and I deliberately modified its texture to include an Emissive property (using the bump map) to make the rocks more visible beneath the River texture.
The ripple texture is just a Fractal node scaled in the Z direction.
I have not animated this texture, but I'm using the Time property of the State Node to handle the position of the Fractal texture, so pulling out a single component of the time vector (using the Vec2Float Node, and probably the X property instead of the full Time property) will probably slide the ripples up or down the river. If I get really obsessive, I'd probably introduce a new Fractal Node, scale it differently, animate it at a different speed and direction, and mix it with the old one to get more complex ripples.