...
The URIs that take a parameter can be used directly from the browser or a HTML type form (this includes javascript). On a slightly tangential note, I have marked the createUser() @Path("/cu/{param}") method with a GET, even though it's actually a POST under HTTP definitions, this because if you attempt to inoke this method from the browser's URL field, the browser will send a GET and not a POST command. Marking the method as a POST will cause the server to return a HTTP 405 - method not allowed.
Using both <base url>/user/xx/{param} and <base url>/user/xx is not necessary. I have done this so I can test the service's methods without having to write a Java client. When I program the client side I will only be using the <base url>/user/xx URI form.
The URIs that don't have a parameter are used in service to service interactions passing JSON strings. For each of these interactions, the simplest way to specify the contract is through a Java class. For example the @POST /cu entry point has the following Java class
...