This all depends on what kind of effect are you going to achieve.
There is vast difference between dynamic water (flooding, etc.) and static water (ponds, lakes, ocean, rivers, puddles, etc.). I assume you want the latter - focusing on rivers, ocean, etc. You will find out that (if possible) you will need a separate solution for each case (at least in my engine it has been separated), each using a bit different shaders and maps - ends up in acceptable result. There is no solution that would 'rule them all'.
Generally each water surface will have refrection & reflection. For larger water surfaces you will need to calculate also color (greenish/blueish effect that depends on depth of water), some will require large waves (ocean - I believe tessellated FFT based ocean is still state of the art), smaller just bump maps. Rivers will also require flow maps and particles. Fluid dynamics can make this more alive.
For reflection you want to use cubemaps (puddles, rivers) and plannar reflections (ponds, lakes, ocean) ... or raytraced/voxel based if you can afford those (cheap screen space ray tracing works too).
For refraction - just render your scene without all water, that should be enough for refraction - use camera matrix to project this to water surfaces when rendering those, and with help of normal/dudv/flow maps - do a distortion.
Mixing between refraction and reflection should be based on fresnel.
If you have any particular question - feel free to ask specifically (i.e.'How to do reflection' or 'How to animate rivers'). I'll try to answer in detail.