Jump to: navigation, search

Difference between revisions of "Zaqar/specs/api/v1/responsecodes"

(List Queues)
 
(111 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 +
* In case of error, the response body will have a message appropriate to the scenario
 +
* Any http operation , other than the specified will return a 405 (?)
 
=== '''Create Queue ''' ===  
 
=== '''Create Queue ''' ===  
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario !! HTTP Response Code
+
! Scenario !! HTTP Response Code  
 
|-
 
|-
|Request Body is Empty ||   400
+
|Success (Created) || 201
 
|-
 
|-
| Request Body has toplevel field starting with underscore ||   
+
|Success (Already exists) ||  204
 +
|-
 +
| Queue has a long name (>64 bytes)||  400
 
|-
 
|-
 
| Request header has missing fields ||  400
 
| Request header has missing fields ||  400
 
|-
 
|-
 
| Request header has invalid auth token ||  401
 
| Request header has invalid auth token ||  401
 +
|}
 +
 +
=== '''List Queues ''' ===
 +
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code !! Notes
 +
|-
 +
| Success ||  200 ||
 +
|-
 +
| Request a non existing queue ||  404 ||
 +
|-
 +
| URL has invalid param (something other than limit,marker,metadata) ||  200  ||  Extra params are ignored.
 
|-
 
|-
| Request header has Accept != "application/json" ||   
+
| Request with negative value for limit ||  400  ||
 
|-
 
|-
| Request body is >4KB ||   
+
| Request with zero value for limit ||  400  ||
 +
|-
 +
| Request with non existing value of marker || 200 or 204 || A marker always "exists" in the sense that we can always perform a range comparison with it. In other words, if you pass 'g' for the marker, Marconi will return all queue's whose names sort after 'g', lexicographically. If you pass a marker that sorts after all existing queues, you will receive "204 No Content" in response.
 +
|-
 +
| Request with non boolean value for metadata ||  400  || lowercase true/false?
 +
|-
 +
| Header has Accept != "application/json" ||  406 ||
 +
|-
 +
| Header has missing fields ||  400 ||
 +
|-
 +
| Header has invalid auth token ||  401 ||
 +
|-
 +
|}
 +
 
 +
=== '''Set Queue Metadata ''' ===
 +
 
 +
{| class="wikitable"
 +
|-
 +
| Success ||  204
 +
|-
 +
| Request Body is Empty ||  400
 +
|-
 +
| Request header has Accept != "application/json" ||  406
 +
|-
 +
| Request body is >64KB ||  400
 
|-
 
|-
 
| Request body has malformed JSON ||  400
 
| Request body has malformed JSON ||  400
 
|-
 
|-
| Queue has a long name (>512 bytes)||   
+
| Request with non JSON body||  400
 +
|-
 +
| Request with UTF-16 char JSON body|| 
 +
|}
 +
 
 +
=== '''Get Queue Metadata ''' ===
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 +
|-
 +
| No metadata exists for the queue ||  200
 +
|-
 +
| Request metadata for a non existing queue ||  404
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 +
|-
 +
|}
  
 +
=== '''Get Queue Stats ''' ===
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 +
|-
 +
| Request stats for a non existing queue ||  404
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 +
|-
 
|}
 
|}
  
=== '''List Queues ''' ===
+
=== '''Delete Queue  ''' ===
 +
{| class="wikitable"
 +
|-
 +
!  Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  204
 +
|-
 +
| Delete a non existing queue ||  204 <ref name="ref1"/>
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 +
|-
 +
|}
  
 +
=== '''Get Messages  ''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 
|-
 
|-
| Request a non existing queue ||
+
| Success (query matched 1 or more messages) ||200
 
|-
 
|-
| URL has invalid param (something other than limit,marker,metadata) ||
+
| Success (query has no match) ||204
 
|-
 
|-
| Request with negative value for limit ||  400
+
| Request message from a non existing queue ||  404
 
|-
 
|-
| Request with non existing value of marker ||   
+
| Request message with invalid param (something other than marker,limit,echo) ||  200
 
|-
 
|-
| Request with non boolean value for metadata ||  400
+
| Request message with limit >100 || 400
 +
|-
 +
| Request message with limit <= 0 ||  400
 +
|-
 +
| Request message with non existing marker ||  204
 +
|-
 +
| Request message with non boolean value for echo ||  400
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
|}
  
 +
=== '''Get a Specific Message''' ===
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code
 +
|-
 +
| Success (query matched the messages) ||200
 +
|-
 +
| Request message from a non existing queue ||  404
 +
|-
 +
| Request a non existing message ||  404
 +
|-
 +
| Request an expired message ||  404
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 +
|-
 
|}
 
|}
  
=== '''Set Queue Metadata ''' ===
+
=== '''Get a Set of Messages By ID''' ===
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||200
 +
|-
 +
| Partial Success|| 
 +
|-
 +
| Request  non existing messages ||  404
 +
|-
 +
| Request expired messages ||  404
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 +
|-
 +
|}
 +
=== '''Post Message(s)''' ===
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  201
 +
|-
 +
| Post multiple messages in a single request , all of them fails ||  503
 +
|-
 +
| Post multiple messages in a single request , few of them succeed ||  201 (with "partial": true) <ref name="postmsg">[https://wiki.openstack.org/wiki/Marconi/specs/api/v1#Post_Message.28s.29 postmessage api wiki]</ref>
 +
|-
 +
| Post message to a non existing queue ||  404
 +
|-
 +
| Post  > 100 messages with a single request ||  400
 +
|-
 +
|Post with request body > 4KB ||  400
 +
|-
 +
|Post with invalid JSON request body  ||  400
 +
|-
 +
|Post with non-JSON request body  ||  400
 +
|-
 +
|Post with non-JSON message  ||  400
 +
|-
 +
|Post with TTL  < 60 ||  400
 +
|-
 +
|Post with TTL  > 1209600 ||  400 
 +
|-
 +
|Post with non int value of TTL ||  400
 +
|-
 +
|Post with negative value of TTL ||  400
 +
|-
 +
|Post without TTL  in request body||  400
 +
|-
 +
|Post without "body"  in request body||  400
 +
|-
 +
|Post with no request body||  400
 +
|-
 +
|Post with messages encapsulated in multiple arrays||  400
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 +
|-
 +
|}
  
'''same as create queue ?'''
+
=== '''Delete Messages''' ===
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  204
 +
|-
 +
| Delete message from a non existing queue ||  204
 +
|-
 +
| Delete a non existing message ||  204
 +
|-
 +
| Delete with expired claim_id ||  403
 +
|-
 +
| Delete with non existing claim_id ||  403
 +
|-
 +
| Delete claimed message without providing a claim_id ||  403
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
| Header has missing fields ||  400
 +
|-
 +
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 +
|-
 +
|}
  
=== '''Get Queue Metadata ''' ===
+
=== '''Claim Messages''' ===
 +
{| class="wikitable"
 +
|-
 +
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 +
|-
 +
| Success (empty queue with no messages to claim) ||  204
 +
|-
 +
| Claim message from a non existing queue ||  204
 +
|-
 +
| Claim message with invalid value for limit (nonint, <=0) ||  400
 +
|-
 +
| Claim message with limit >100) ||  400 
 +
|-
 +
| Claim message with no request body ||  400
 +
|-
 +
| Claim message with no TTL field  ||  400
 +
|-
 +
| Claim message with invalid TTL value (non int, <=0) ||  400
 +
|-
 +
| Claim message with invalid JSON ||  400
 +
|-
 +
| Claim message with non JSON request body ||  400
 +
|-
 +
| Claim message with invalid auth token ||  401
 +
|-
 +
| Claim message with missing header fields ||  400
 +
|-
 +
| Header has Accept != "application/json" ||  406
 +
|-
 +
|}
 +
 
 +
=== '''Query Claim''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 +
|-
 +
| Query Expired Claim ||  404
 +
|-
 +
| Query Claim from a non existing queue ||  404
 +
|-
 +
| Query Claim with invalid auth token ||  401
 +
|-
 +
| Query Claim with missing header fields ||  400
 +
|-
 +
| Query Claim with invalid URL params ||  200
 
|-
 
|-
| Request metadata for a non existing queue ||   
+
| Query Claim with non existing claim_id ||  404
 +
|-
 +
| Header has Accept != "application/json" ||  406
 
|-
 
|-
 
|}
 
|}
  
=== '''Get Queue Stats ''' ===
+
=== '''Update Claim''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  204
 +
|-
 +
| Update Expired Claim ||  404
 +
|-
 +
| Update Claim on a non existing queue ||  404
 +
|-
 +
| Update a non existing claim ||  404
 +
|-
 +
| Update claim with invalid URL params||  200
 +
|-
 +
| Update claim with content-type != application/json-patch||  406
 +
|-
 +
| Update claim with no request body ||  400
 +
|-
 +
| Update claim with invalid JSON in request body || 400   
 +
|-
 +
| Update claim with non JSON  request body ||  400   
 
|-
 
|-
| Request stats for a non existing queue ||
+
| Update Claim with invalid auth token ||   401
 +
|-
 +
| Update Claim with missing header fields ||  400
 
|-
 
|-
 
|}
 
|}
  
=== '''Delete Queue  ''' ===
+
=== '''Release Claim''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  204
 
|-
 
|-
| Delete a non existing queue ||   
+
| Release Expired Claim ||  204
 +
|-
 +
| Release Claim from a non existing queue ||  404
 +
|-
 +
| Release a non existing claim ||  204
 +
|-
 +
| Release claim with invalid URL params||  200
 +
|-
 +
| Release Claim with invalid auth token ||  401
 +
|-
 +
| Release Claim with missing header fields ||  400
 +
|-
 +
| Header has Accept != "application/json" ||  406
 
|-
 
|-
 
|}
 
|}
 +
 +
<references>
 +
<ref name="ref1">DELETE is an idempotent operation.</ref>
 +
</references>

Latest revision as of 18:42, 7 August 2014

  • In case of error, the response body will have a message appropriate to the scenario
  • Any http operation , other than the specified will return a 405 (?)

Create Queue

Scenario HTTP Response Code
Success (Created) 201
Success (Already exists) 204
Queue has a long name (>64 bytes) 400
Request header has missing fields 400
Request header has invalid auth token 401

List Queues

Scenario HTTP Response Code Notes
Success 200
Request a non existing queue 404
URL has invalid param (something other than limit,marker,metadata) 200 Extra params are ignored.
Request with negative value for limit 400
Request with zero value for limit 400
Request with non existing value of marker 200 or 204 A marker always "exists" in the sense that we can always perform a range comparison with it. In other words, if you pass 'g' for the marker, Marconi will return all queue's whose names sort after 'g', lexicographically. If you pass a marker that sorts after all existing queues, you will receive "204 No Content" in response.
Request with non boolean value for metadata 400 lowercase true/false?
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401

Set Queue Metadata

Success 204
Request Body is Empty 400
Request header has Accept != "application/json" 406
Request body is >64KB 400
Request body has malformed JSON 400
Request with non JSON body 400
Request with UTF-16 char JSON body

Get Queue Metadata

Scenario HTTP Response Code
Success 200
No metadata exists for the queue 200
Request metadata for a non existing queue 404
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401
URL has invalid params 200

Get Queue Stats

Scenario HTTP Response Code
Success 200
Request stats for a non existing queue 404
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401
URL has invalid params 200

Delete Queue

Scenario HTTP Response Code
Success 204
Delete a non existing queue 204 [1]
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401
URL has invalid params 200

Get Messages

Scenario HTTP Response Code
Success (query matched 1 or more messages) 200
Success (query has no match) 204
Request message from a non existing queue 404
Request message with invalid param (something other than marker,limit,echo) 200
Request message with limit >100 400
Request message with limit <= 0 400
Request message with non existing marker 204
Request message with non boolean value for echo 400
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401

Get a Specific Message

Scenario HTTP Response Code
Success (query matched the messages) 200
Request message from a non existing queue 404
Request a non existing message 404
Request an expired message 404
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401
URL has invalid params 200

Get a Set of Messages By ID

Scenario HTTP Response Code
Success 200
Partial Success
Request non existing messages 404
Request expired messages 404
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401
URL has invalid params 200

Post Message(s)

Scenario HTTP Response Code
Success 201
Post multiple messages in a single request , all of them fails 503
Post multiple messages in a single request , few of them succeed 201 (with "partial": true) [2]
Post message to a non existing queue 404
Post > 100 messages with a single request 400
Post with request body > 4KB 400
Post with invalid JSON request body 400
Post with non-JSON request body 400
Post with non-JSON message 400
Post with TTL < 60 400
Post with TTL > 1209600 400
Post with non int value of TTL 400
Post with negative value of TTL 400
Post without TTL in request body 400
Post without "body" in request body 400
Post with no request body 400
Post with messages encapsulated in multiple arrays 400
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401
URL has invalid params 200

Delete Messages

Scenario HTTP Response Code
Success 204
Delete message from a non existing queue 204
Delete a non existing message 204
Delete with expired claim_id 403
Delete with non existing claim_id 403
Delete claimed message without providing a claim_id 403
Header has Accept != "application/json" 406
Header has missing fields 400
Header has invalid auth token 401
URL has invalid params 200

Claim Messages

Scenario HTTP Response Code
Success 200
Success (empty queue with no messages to claim) 204
Claim message from a non existing queue 204
Claim message with invalid value for limit (nonint, <=0) 400
Claim message with limit >100) 400
Claim message with no request body 400
Claim message with no TTL field 400
Claim message with invalid TTL value (non int, <=0) 400
Claim message with invalid JSON 400
Claim message with non JSON request body 400
Claim message with invalid auth token 401
Claim message with missing header fields 400
Header has Accept != "application/json" 406

Query Claim

Scenario HTTP Response Code
Success 200
Query Expired Claim 404
Query Claim from a non existing queue 404
Query Claim with invalid auth token 401
Query Claim with missing header fields 400
Query Claim with invalid URL params 200
Query Claim with non existing claim_id 404
Header has Accept != "application/json" 406

Update Claim

Scenario HTTP Response Code
Success 204
Update Expired Claim 404
Update Claim on a non existing queue 404
Update a non existing claim 404
Update claim with invalid URL params 200
Update claim with content-type != application/json-patch 406
Update claim with no request body 400
Update claim with invalid JSON in request body 400
Update claim with non JSON request body 400
Update Claim with invalid auth token 401
Update Claim with missing header fields 400

Release Claim

Scenario HTTP Response Code
Success 204
Release Expired Claim 204
Release Claim from a non existing queue 404
Release a non existing claim 204
Release claim with invalid URL params 200
Release Claim with invalid auth token 401
Release Claim with missing header fields 400
Header has Accept != "application/json" 406
  1. DELETE is an idempotent operation.
  2. postmessage api wiki