According to the Quantum API doc regarding the remove_router_interface API, the Normal Response code is 200 and the request "does not return a response body."
However, a successful execute of the "quantum router-interface-delete <router> <subnet>" command results in a response that have the string 'null' in it.
stack@ubuntu-2:/tmp$ QUANTUMCLIENT_DEBUG=1 quantum router-interface-delete t1-router t1-sub
.
.
.
REQ: curl -i http://10.133.10.219:9696/v2.0/routers/8bf5fbad-18d7-43c2-9a87-1819cca6ebe4/remove_router_interface.json -X PUT -H "User-Agent: python-quantumclient" -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: MIILhAYJKoZIhvcNAQcCoIILdTCCC3ECAQExCTAHBgUrDgMCGjCCCl0GCSqGSIb3DQEHAaCCCk4EggpKeyJhY2Nlc3MiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxMy0wNC0yNlQxNjozNjoxNi4yNzEwODIiLCAiZXhwaXJlcyI6ICIyMDEzLTA0LTI3VDE2OjM2OjE2WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogbnVsbCwgImVuYWJsZWQiOiB0cnVlLCAiaWQiOiAiNTAyNTZkYTRkMDFhNDY2ODgyMTdhYzY4YjY0YTU5MTciLCAibmFtZSI6ICJ0ZW5hbnQtMSJ9fSwgInNlcnZpY2VDYXRhbG9nIjogW3siZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cDovLzEwLjEzMy4xMC4yMTk6ODc3NC92Mi81MDI1NmRhNGQwMWE0NjY4ODIxN2FjNjhiNjRhNTkxNyIsICJyZWdpb24iOiAiUmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5Ojg3NzQvdjIvNTAyNTZkYTRkMDFhNDY2ODgyMTdhYzY4YjY0YTU5MTciLCAiaWQiOiAiMGIyYzNmNWZkNmQyNDVmYzk0MjAyZmE4MWFhOTA3NzQiLCAicHVibGljVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5Ojg3NzQvdjIvNTAyNTZkYTRkMDFhNDY2ODgyMTdhYzY4YjY0YTU5MTcifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiY29tcHV0ZSIsICJuYW1lIjogIm5vdmEifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo5Njk2LyIsICJyZWdpb24iOiAiUmVnaW9uT25lIiwgImludGVybmFsVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5Ojk2OTYvIiwgImlkIjogIjEyZjRkMTYzMDVlOTQ5ZjFhMzQxMDQ5MjM3YWEwZWJlIiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo5Njk2LyJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJuZXR3b3JrIiwgIm5hbWUiOiAicXVhbnR1bSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5OjMzMzMiLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTozMzMzIiwgImlkIjogIjZkMmM0YTM3NzQ2NjRjZDA5OWNiNGVkMjVhNWE4YmFjIiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTozMzMzIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogInMzIiwgIm5hbWUiOiAiczMifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo5MjkyIiwgInJlZ2lvbiI6ICJSZWdpb25PbmUiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovLzEwLjEzMy4xMC4yMTk6OTI5MiIsICJpZCI6ICIzMmM2ZmYxMmFmMGY0ZjQ5ODkxODVkZjdhYTMyYTk0MSIsICJwdWJsaWNVUkwiOiAiaHR0cDovLzEwLjEzMy4xMC4yMTk6OTI5MiJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpbWFnZSIsICJuYW1lIjogImdsYW5jZSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5Ojg3NzYvdjEvNTAyNTZkYTRkMDFhNDY2ODgyMTdhYzY4YjY0YTU5MTciLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo4Nzc2L3YxLzUwMjU2ZGE0ZDAxYTQ2Njg4MjE3YWM2OGI2NGE1OTE3IiwgImlkIjogIjI2MWNiZDZjOTQwZTQyODVhNDQ3MzdiY2FmMTNhZDI5IiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo4Nzc2L3YxLzUwMjU2ZGE0ZDAxYTQ2Njg4MjE3YWM2OGI2NGE1OTE3In1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogInZvbHVtZSIsICJuYW1lIjogImNpbmRlciJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5Ojg3NzMvc2VydmljZXMvQWRtaW4iLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo4NzczL3NlcnZpY2VzL0Nsb3VkIiwgImlkIjogIjEyMTFlZGRiOWZjYzQwNzliNzBjZjEzODkwOTYxMGYyIiwgInB1YmxpY1VSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo4NzczL3NlcnZpY2VzL0Nsb3VkIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogImVjMiIsICJuYW1lIjogImVjMiJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5OjM1MzU3L3YyLjAiLCAicmVnaW9uIjogIlJlZ2lvbk9uZSIsICJpbnRlcm5hbFVSTCI6ICJodHRwOi8vMTAuMTMzLjEwLjIxOTo1MDAwL3YyLjAiLCAiaWQiOiAiODdkOTUwYjlhMjdhNDVlZGI2N2YxMTEwZDdkMjZlMGEiLCAicHVibGljVVJMIjogImh0dHA6Ly8xMC4xMzMuMTAuMjE5OjUwMDAvdjIuMCJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpZGVudGl0eSIsICJuYW1lIjogImtleXN0b25lIn1dLCAidXNlciI6IHsidXNlcm5hbWUiOiAidXNlci0xIiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICJlMDhkNmExYmVhZDY0YmIyYmM4ZjkxNDNiZTVjMzA2NiIsICJyb2xlcyI6IFt7Im5hbWUiOiAiX21lbWJlcl8ifV0sICJuYW1lIjogInVzZXItMSJ9LCAibWV0YWRhdGEiOiB7ImlzX2FkbWluIjogMCwgInJvbGVzIjogWyI5ZmUyZmY5ZWU0Mzg0YjE4OTRhOTA4NzhkM2U5MmJhYiJdfX19MYH-MIH8AgEBMFwwVzELMAkGA1UEBhMCVVMxDjAMBgNVBAgTBVVuc2V0MQ4wDAYDVQQHEwVVbnNldDEOMAwGA1UEChMFVW5zZXQxGDAWBgNVBAMTD3d3dy5leGFtcGxlLmNvbQIBATAHBgUrDgMCGjANBgkqhkiG9w0BAQEFAASBgFrti+qiwY25JAYyB98DqE1b0LLTvheQRnQr7wk7X38VRALTed5vVsf+HfvRUK-ymK+F6+c2PqSMaxZpIrB029JUQQ0yDoRCw0kNsxZJyPBNNsMTyUbV9dYt-pPOHnDnq3JRjvCNmd1lZBQedHZJtmIkyiCP2fdtYq8O8Ynzm6ju" -d '{"subnet_id": "f5259d72-f534-46d1-a9a7-319dcb45d837"}'
RESP:{'date': 'Fri, 26 Apr 2013 16:36:16 GMT', 'status': '200', 'content-length': '4', 'content-type': 'application/json; charset=UTF-8'} null
Removed interface from router t1-router
stack@ubuntu-2:/tmp$
Note: before executing the command: both router "t1-router" and the subnet "t1-sub" exists.
Should the normal response code for remove_router_interface be 204?
Sorry, accidental click :)
I confirm that null is returned, when in fact no response body is more appropriate.
The API should indeed return 204 and even though this would break the current API contract, this sounds like a valid bug.
If this bug is accepted, I would suggest to raise another bug for updating the doc.