dpending how you transport there is another common pattern that is
used over http. It is common that a client may not have the ability or
its really to annoying to generate an id (javascript with a uuid as
example). In this case post without an id. Redirect the request to an
idempotent one off uri that includes an id in it.
eg:
>> POST newshitbird -> /data/shitbirds
<< TEMP REDIRECT /data/shitbirds/incoming/43452
>> POST newshitbird -> /data/shitbirds/incoming/43452
//note you can post as many times as you want this uri is unique and idempotent
<< 201 CREATED location:/data/shitbirds/43452
This pattern is used in conjunction with atom in the event store api
as well if you want to check it out in practice.
Cheers,
Greg