A workaround, as was suggested by an other poster, is that the client interrogates the system for a valid identifier and then proceeds. This especially makes sense when, as noted, you are dealing with resources that belong to no collection.
However, in the case where the Id is the nature key (e.g. SSN), the Id can be known from the user input. Creating an employee is just a matter of PUT his full record along with his SSN as the Id.
1) Encryption (and then indexing) becomes harder.
2) SSN's can change, for many reasons. (eg: http://consumerist.com/2008/11/can-i-change-my-social-securi..., data entry error, etc)
It is ok to use data entered by users to assure the uniqueness of a record (unique indexes/constraints).
You have to use PUT to enable creating something only when the server URL that the resource will be available at is not known to the client.
And I assume you mean POST for paragraph 2?
I did mean "POST" in paragraph 2, yes. Thanks. :)