I'm considering the tag implementation in neutron.
Although I proposed server returns 409 in tag existing case, on the basis of the above discussion, server should return the same response code.
I will change current implementation to returning 201.

Thanks,
Hirofumi

On 2016/02/27 2:24, Akihiro Motoki wrote:
2016-02-27 1:02 GMT+09:00 Sean Dague <[email protected]>:
On 02/26/2016 10:52 AM, Chris Dent wrote:
On Fri, 26 Feb 2016, Jay Pipes wrote:
On 02/26/2016 09:02 AM, Akihiro Motoki wrote:
We can create a tag by PUT'ing an individual tag:
What status code should be returned if a requested tag already exists?

PUT /servers/1234567890/tags/qux

The guideline defines 201 (+ Location header) on success.
In the current neutron implementation proposed, 409 is returned
when a requested tag already exists.
409 Conflict.
/me gets some paint

Stricly speaking, PUT should be idempotent so every time you put a
qux tag on 123456789 it should return (the same) 2xx.

In the real world things get messy and some implementations return
201 on create and some other 2xx when it is already there. It
shouldn't be an error though.

The time a 409 might be reasonable is if via a header, like an ETag,
we have declared that qux must have a certain state before we accept
a PUT of it.

In some implementations things like 'Etag: 0' are used to say "Only
let this PUT happen if it is a create." That's a bit of a hack but
is useful.
Agree. PUT is an update. The should be no issue updating an existing
tag. That should be success
Thanks. I agree PUT should be success in general.
Honestly I am confused with a situation that a tag is created by PUT
(not by POST)
and applied the semantics around POST to PUT case.

Adding a tag should really be semantically:

POST /servers/1234567890/tags

to create tags and

PUT /servers/1234567890/tags/qux to update them
The above combination of POST and PUT is really easy to understand to me.

Do we need to use POST to create a new tag,
or can we keep using PUT to create a tag?

If we keep using PUT, what status code should be returned?
201 Created is now returned for PUT operation.
Is it okay to return 201 even when a tag already exists?

You should not PUT to any url that you can't GET. And it looks like GET
/servers/1234567890/tags/qux would be a 404 here.
Yes, I totally agree.

Akihiro

         -Sean

--
Sean Dague
http://dague.net

__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev






__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: [email protected]?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to