Jump to: navigation, search

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

(Create Queue)
 
(43 intermediate revisions by 5 users not shown)
Line 1: Line 1:
* In all cases, the response body will have an error message appropriate to the scenario
+
* 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 (?)
 
* Any http operation , other than the specified will return a 405 (?)
 
=== '''Create Queue ''' ===  
 
=== '''Create Queue ''' ===  
Line 5: Line 5:
 
{| 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 ||  400
+
|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
|-
 
| Request header has Accept != "application/json" ||  406
 
|-
 
| Request body is >4KB ||  400
 
|-
 
| Request body has malformed JSON ||  400
 
|-
 
| Request with non JSON body||  400
 
|-
 
| Queue has a long name (>512 bytes)||  400
 
|-
 
| Queue that already exists ||  204
 
|-
 
| Queue did not already exist ||  201
 
 
|}
 
|}
  
Line 34: Line 22:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code !! Notes
+
! Scenario!! HTTP Response Code !! Notes
 +
|-
 +
| Success ||  200 ||
 
|-
 
|-
 
| Request a non existing queue ||  404 ||
 
| Request a non existing queue ||  404 ||
Line 44: Line 34:
 
| Request with zero value for limit ||  400  ||
 
| Request with zero value for limit ||  400  ||
 
|-
 
|-
| Request with non existing value of marker || 204 <ref name="ref2"/> ||  What does Swift do?
+
| 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?
 
| Request with non boolean value for metadata ||  400  || lowercase true/false?
Line 58: Line 48:
 
=== '''Set Queue Metadata ''' ===
 
=== '''Set Queue Metadata ''' ===
  
'''same as create queue '''
+
{| 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 with non JSON body||  400
 +
|-
 +
| Request with UTF-16 char JSON body|| 
 +
|}
  
 
=== '''Get Queue Metadata ''' ===
 
=== '''Get Queue Metadata ''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 +
|-
 +
| No metadata exists for the queue ||  200
 
|-
 
|-
 
| Request metadata for a non existing queue ||  404
 
| Request metadata for a non existing queue ||  404
Line 69: Line 78:
 
| Header has Accept != "application/json" ||  406
 
| Header has Accept != "application/json" ||  406
 
|-
 
|-
Header has missing fields ||  400
+
| Header has missing fields ||  400
 
|-
 
|-
 
| Header has invalid auth token||  401
 
| Header has invalid auth token||  401
Line 80: Line 89:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 
|-
 
|-
 
| Request stats for a non existing queue ||  404
 
| Request stats for a non existing queue ||  404
Line 97: Line 108:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  204
 
|-
 
|-
 
| Delete a non existing queue ||  204 <ref name="ref1"/>
 
| Delete a non existing queue ||  204 <ref name="ref1"/>
Line 114: Line 127:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! 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 from a non existing queue ||  404
Line 120: Line 137:
 
| Request message with invalid param (something other than marker,limit,echo) ||  200
 
| Request message with invalid param (something other than marker,limit,echo) ||  200
 
|-
 
|-
| Request message with limit >100 ||
+
| Request message with limit >100 || 400
 
|-
 
|-
 
| Request message with limit <= 0 ||  400
 
| Request message with limit <= 0 ||  400
 
|-
 
|-
| Request message with non existing marker ||   204 <ref name="ref2"/>
+
| Request message with non existing marker || 204
 
|-
 
|-
 
| Request message with non boolean value for echo ||  400
 
| Request message with non boolean value for echo ||  400
Line 136: Line 153:
 
|}
 
|}
  
=== '''Get Actions  ''' ===
+
=== '''Get a Specific Message''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 
|-
 
|-
| Request actions for a non existing queue || 404
+
| Success (query matched the messages) ||200
 
|-
 
|-
| Request actions with invalid param (something other than marker,limit) ||  200
+
| Request message from a non existing queue ||  404
 
|-
 
|-
| Request message with limit >100 ||   
+
| Request a non existing message ||  404
 
|-
 
|-
| Request message with limit <= 0 || 400
+
| Request an expired message ||   404
|-
 
| Request message with non existing marker ||  204 <ref name="ref2"/>
 
 
|-
 
|-
 
| Header has Accept != "application/json" ||  406
 
| Header has Accept != "application/json" ||  406
Line 156: Line 171:
 
|-
 
|-
 
| Header has invalid auth token||  401
 
| Header has invalid auth token||  401
 +
|-
 +
| URL has invalid params ||200
 
|-
 
|-
 
|}
 
|}
  
=== '''Get a Specific Message''' ===
+
=== '''Get a Set of Messages By ID''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||200
 
|-
 
|-
| Request message from a non existing queue ||  404
+
| Partial Success||   
 
|-
 
|-
| Request a non existing message ||  404
+
| Request non existing messages ||  404
 
|-
 
|-
| Request an expired message ||  404
+
| Request expired messages ||  404
 
|-
 
|-
 
| Header has Accept != "application/json" ||  406
 
| Header has Accept != "application/json" ||  406
Line 179: Line 198:
 
|-
 
|-
 
|}
 
|}
 
 
=== '''Post Message(s)''' ===
 
=== '''Post Message(s)''' ===
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! 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 , all of them fails ||  503
Line 191: Line 211:
 
| Post message to a non existing queue ||  404
 
| Post message to a non existing queue ||  404
 
|-
 
|-
| Post  > 100 messages with a single request ||   
+
| Post  > 100 messages with a single request ||  400
 
|-
 
|-
|Post with request body > 4KB ||   
+
|Post with request body > 4KB ||  400
 
|-
 
|-
 
|Post with invalid JSON request body  ||  400
 
|Post with invalid JSON request body  ||  400
Line 201: Line 221:
 
|Post with non-JSON message  ||  400
 
|Post with non-JSON message  ||  400
 
|-
 
|-
|Post with TTL  < 60 ||   
+
|Post with TTL  < 60 ||  400
 
|-
 
|-
|Post with TTL  > 1209600 ||   
+
|Post with TTL  > 1209600 || 400    
 
|-
 
|-
|Post with non int value of TTL ||  
+
|Post with non int value of TTL || 400
 
|-
 
|-
|Post with negative value of TTL ||  same as < 60
+
|Post with negative value of TTL ||  400
 
|-
 
|-
 
|Post without TTL  in request body||  400
 
|Post without TTL  in request body||  400
Line 230: Line 250:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  204
 
|-
 
|-
 
| Delete message from a non existing queue ||  204
 
| Delete message from a non existing queue ||  204
Line 236: Line 258:
 
| Delete a non existing message ||  204
 
| Delete a non existing message ||  204
 
|-
 
|-
| Delete with expired claim_id ||   
+
| Delete with expired claim_id ||  403
 
|-
 
|-
| Delete with non existing claim_id ||   
+
| Delete with non existing claim_id ||  403
 +
|-
 +
| Delete claimed message without providing a claim_id ||  403
 
|-
 
|-
 
| Header has Accept != "application/json" ||  406
 
| Header has Accept != "application/json" ||  406
Line 253: Line 277:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 +
|-
 +
| Success (empty queue with no messages to claim) ||  204
 
|-
 
|-
| Claim message from a non existing queue ||  404
+
| Claim message from a non existing queue ||  204
 
|-
 
|-
| Claim message with invalid value for limit (nonint, <=0) ||   
+
| Claim message with invalid value for limit (nonint, <=0) ||  400
 
|-
 
|-
| Claim message with limit >100)||   
+
| Claim message with limit >100) || 400    
 
|-
 
|-
 
| Claim message with no request body ||  400
 
| Claim message with no request body ||  400
 
|-
 
|-
| Claim message with no TTL field  ||   
+
| Claim message with no TTL field  ||  400
 
|-
 
|-
| Claim message with invalid TTL value (non int, <=0) ||   
+
| Claim message with invalid TTL value (non int, <=0) ||  400
 
|-
 
|-
| Claim message with invalid JSON ||   
+
| Claim message with invalid JSON ||  400
 
|-
 
|-
| Claim message with non JSON request body ||   
+
| Claim message with non JSON request body ||  400
 
|-
 
|-
 
| Claim message with invalid auth token ||  401
 
| Claim message with invalid auth token ||  401
Line 282: Line 310:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  200
 
|-
 
|-
| Query Expired Claim ||   
+
| Query Expired Claim ||  404
 
|-
 
|-
 
| Query Claim from a non existing queue ||  404
 
| Query Claim from a non existing queue ||  404
Line 294: Line 324:
 
| Query Claim with invalid URL params ||  200
 
| Query Claim with invalid URL params ||  200
 
|-
 
|-
| Query Claim with non existing claim_id ||   
+
| Query Claim with non existing claim_id ||  404
 
|-
 
|-
 
| Header has Accept != "application/json" ||  406
 
| Header has Accept != "application/json" ||  406
Line 303: Line 333:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 
|-
 
|-
| Update Expired Claim ||   
+
| Success ||  204
 +
|-
 +
| Update Expired Claim ||  404
 
|-
 
|-
 
| Update Claim on a non existing queue ||  404
 
| Update Claim on a non existing queue ||  404
Line 330: Line 362:
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! Error Scenario!! HTTP Response Code
+
! Scenario!! HTTP Response Code
 +
|-
 +
| Success ||  204
 
|-
 
|-
| Release Expired Claim ||   
+
| Release Expired Claim ||  204
 
|-
 
|-
 
| Release Claim from a non existing queue ||  404
 
| Release Claim from a non existing queue ||  404
Line 350: Line 384:
 
<references>
 
<references>
 
<ref name="ref1">DELETE is an idempotent operation.</ref>
 
<ref name="ref1">DELETE is an idempotent operation.</ref>
<ref name="ref2">A marker is an opaque string which relates to no resource
 
from the user's point of view, so markers are not differentiated by "existing"
 
or "non existing", they are either "giving more messages" and "giving no
 
messages".</ref>
 
 
</references>
 
</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