| Posted | Nick | Remark | |
|---|---|---|---|
| #openstack-sdks - 2018-12-13 | |||
| 16:25:49 | elmiko | sorry | |
| 16:25:53 | kmalloc | elmiko: right | |
| 16:26:13 | kmalloc | elmiko: it should be .. 200/204/2XX (not 201) | |
| 16:26:18 | elmiko | right | |
| 16:26:28 | edleafe | Generally 204 is returned from DELETE | |
| 16:26:41 | kmalloc | if delete is not allowed, e.g. the whole path is unrouted in an api | |
| 16:26:44 | edleafe | There is no response body | |
| 16:26:54 | kmalloc | XXXX/<resource> -> where XXXX is not a thing at all | |
| 16:26:56 | kmalloc | that should be 405 | |
| 16:27:03 | kmalloc | as DELETE is not supported | |
| 16:27:18 | kmalloc | but if XXXX is a thing, and there could be a resource under it | |
| 16:27:19 | edleafe | kmalloc: according to cdent, it's 404 | |
| 16:27:20 | dtantsur | what about GET XXXX? | |
| 16:27:44 | kmalloc | edleafe: in most of openstack 404 is a thing. | |
| 16:27:47 | cdent | sorry, I'm debugging a gate failure | |
| 16:27:48 | kmalloc | most of openstack is wrong | |
| 16:27:59 | kmalloc | from a standpoint of the RFC | |
| 16:28:12 | edleafe | dtantsur: GET /XXXX should also be 404 | |
| 16:28:16 | cdent | only if XXXXX/<resource> has any methods at all should it ever be a 405 on delete | |
| 16:28:26 | cdent | if it simply does not exist then it should be 404 | |
| 16:28:35 | kmalloc | hm. | |
| 16:28:43 | kmalloc | i could see that interpretation | |
| 16:28:47 | dtantsur | kmalloc: well, we're talking of taking an RFC designed for hypertext and applying it to API | |
| 16:28:51 | kmalloc | order of precidence on routing | |
| 16:28:52 | cdent | kmalloc: that interpretation is right :) | |
| 16:28:53 | edleafe | From the front page of our guidelines: "Note Where this guidance is incomplete or ambiguous, refer to the HTTP RFCs—RFC 7230, RFC 7231, RFC 7232, RFC 7233, RFC 7234, and RFC 7235—as the ultimate authority." | |
| 16:28:54 | dtantsur | this has gone wrong many times, this is no exception | |
| 16:28:58 | cdent | the URI is the primary thing | |
| 16:29:01 | kmalloc | XXX is checked before XXXX/YYYY | |
| 16:29:05 | kmalloc | so, XXX hits 404 | |
| 16:29:09 | kmalloc | sure. | |
| 16:29:10 | cdent | if there is _nothing_ that has that URI, then 404 | |
| 16:29:19 | cdent | if you can GET it, but can't delete it, then 405 | |
| 16:29:54 | kmalloc | but a 404 on a delete where a resource could exist is explictly wrong | |
| 16:30:00 | kmalloc | it's always a success if delete could work | |
| 16:30:10 | kmalloc | cdent: ++ don't have to convince me too hard on that front :P | |
| 16:30:14 | cdent | that's effectively what ed's thing say | |
| 16:30:25 | edleafe | kmalloc: that's what the point of https://review.openstack.org/#/c/616610/ is | |
| 16:30:31 | edleafe | jinx | |
| 16:30:34 | kmalloc | hehe | |
| 16:30:40 | cdent | if this is a valid uri, and there might have been a thing here, or ever will be, respond 204 on delete when it is not there, or has just been removed | |
| 16:30:48 | kmalloc | yep. | |
| 16:30:51 | cdent | but if the url is invalid because you can't even GET there, then 404 | |
| 16:30:56 | cdent | s/even/ever/ | |
| 16:30:58 | kmalloc | yes. | |
| 16:31:07 | kmalloc | i could see that, i'll have to go poke and see how flask handles it | |
| 16:31:13 | kmalloc | i think it does it the correct way | |
| 16:31:20 | kmalloc | what you just described | |
| 16:31:31 | kmalloc | because if not, i have some bugs to go open/fix | |
| 16:31:38 | elmiko | edleafe: fwiw, i'm still +1 on the review | |
| 16:31:51 | elmiko | lol | |
| 16:31:59 | elmiko | seems like dtantsur will be the -1 | |
| 16:32:03 | dtantsur | yep | |
| 16:32:28 | edleafe | One thing to keep in mind before you -1: | |
| 16:32:45 | edleafe | This is a guideline; it says what projects should ideally follow | |
| 16:33:11 | edleafe | We are trying to encourage new projects to follow them. Existing projects do not have to change | |
| 16:34:08 | kmalloc | i know if we iterate on the keystone api like I want to, we'll get to where we're more closely following the guidelines | |
| 16:34:17 | kmalloc | we just have a ton of history that... well we can't "just fix" | |
| 16:34:29 | edleafe | kmalloc: sure, that's reasonable. | |
| 16:34:31 | elmiko | kmalloc: totally understandable | |
| 16:34:54 | elmiko | to echo edleafe, these are guidelines and not laws | |
| 16:34:59 | kmalloc | also we don't have (and doesn't look like we will in the near-to-medium term) microversions :) | |
| 16:35:08 | kmalloc | also +1 on that change. I like the guidelines | |
| 16:35:19 | edleafe | kmalloc: the other purpose of the guidelines is to "settle arguments". If a change is being considered, and there are differing views, the guidelines can be used as an arbiter | |
| 16:35:22 | elmiko | imo, microversions seem less contentious. but i'm just one person | |
| 16:35:33 | edleafe | elmiko: lol | |
| 16:35:34 | elmiko | edleafe ++ | |
| 16:35:36 | kmalloc | i'd like to really outline the use of 405 in that doc. | |
| 16:35:41 | kmalloc | because it is useful. | |
| 16:35:52 | kmalloc | but that is a bigger bundle of "lots of comments" | |
| 16:35:57 | dtantsur | microversions are not contentious at all, just do them | |
| 16:36:05 | elmiko | dtantsur: LOL | |
| 16:36:14 | kmalloc | dtantsur: ok, go implement it for keystone, i think you just volunteered :) :P :P :P | |
| 16:36:20 | edleafe | kmalloc: http://specs.openstack.org/openstack/api-sig/guidelines/http/response-codes.html#failure-code-clarifications | |
| 16:36:35 | dtantsur | how many years it took us to implement proper negotiation in OSC? oh wait, it's still not there? :) | |
| 16:36:43 | edleafe | There is a paragraph there on 405 | |
| 16:36:50 | kmalloc | edleafe: yes, but i think that needs some expansion | |
| 16:37:05 | edleafe | patches welcome! :) | |
| 16:37:11 | kmalloc | yes, it's on my long long long list | |
| 16:37:14 | kmalloc | :) | |
| 16:37:21 | dtantsur | kmalloc: I'll switch keystone to SOAP | |
| 16:37:36 | kmalloc | dtantsur: if you can get people to approve it... and not break our API contracts, go for it | |
| 16:37:44 | kmalloc | dtantsur: i'll even volunteer to not -2 that change | |
| 16:37:50 | kmalloc | or even -1 it. | |
| 16:37:52 | dtantsur | SOAP never greaks contracts, it's enterprise-grade | |
| 16:37:52 | edleafe | I think we should add a guideline that recommends abandoning the term "microversions", and replaces it with "every change is a major version" | |
| 16:38:19 | dtantsur | edleafe: /me imagines $ curl https://baremetal.example.com/v56/nodes | |
| 16:38:56 | dtantsur | it's mostly kidding again, but I do feel bad that we break RESTfulness with microversions | |
| 16:40:06 | dtantsur | hehe | |
| 16:40:18 | elmiko | but then i am a smelly hippy, so there is that XD | |
| 16:40:23 | dtantsur | I got some funny experience with it | |
| 16:40:41 | elmiko | if you had "fun" anywhere near SOAP then you are doing better than most ;) | |
| 16:40:45 | dtantsur | It's supposed to be interoperable, but in fact I could not make a SOAP client in Java talk to a SOAP server in Python | |
| 16:40:53 | elmiko | ouch | |
| 16:40:54 | dtantsur | they had different SOAPs apparently | |
| 16:40:59 | elmiko | LOL | |
| 16:41:28 | edleafe | I made a python SOAP server talk with a .NET client | |
| 16:41:57 | dtantsur | nice! | |
| 16:42:34 | dtantsur | yeah, except for the problem "how to serialize a list". this one is unsolvable. something between "what's the point of life" and "where is my 2nd sock". | |
| 16:42:41 | cdent | dtantsur: which of many aspect of REST do we break with microversions. I suspect we could come up with several depending on which rules we wanted follow | |