[ 
https://issues.apache.org/jira/browse/QPID-6438?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14377567#comment-14377567
 ] 

Alex Rudyy commented on QPID-6438:
----------------------------------

Keith,
I addressed some of your review comments in commit under revision 
[r1668828|https://svn.apache.org/r1668828]:
# I do not thing that it can NPE in CO#getName() as checks in constructor 
prevents CO creation with null name and validation checks prevents from 
changing object name to null
# RestServlet#createOrUpdate is refactored to make it simpler and easier to read
# RestServlet#equalParents is renamed into RestServlet#sameOtherParents and 
fixed issue if the otherParents is null or empty. "true" is only returned when 
object has one parent.

Please, review the changes

> [Java Broker] Extend REST interfaces to result in errors when object already 
> exist on create and when object does not exist on update
> -------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: QPID-6438
>                 URL: https://issues.apache.org/jira/browse/QPID-6438
>             Project: Qpid
>          Issue Type: Improvement
>          Components: Java Broker
>            Reporter: Alex Rudyy
>            Assignee: Alex Rudyy
>             Fix For: 6.0 [Java]
>
>
> At the moment PUT method requests are used for both configured object 
> creation and their updates. Our REST layer looks for ID or name( coupled with 
> object parent) in order to decide whether it is an update request or not. 
> Update is made when object with the same id or the same name and parent is 
> found. Otherwise a new object is created.
> We need to extend existing REST API to return errors in the following cases
> * when object with the same name/id already exists on create 
> * when  object does not  exists on update
> The existing REST interfaces should not be affected by the change and should 
> continue working as expected keeping backward compatibility.
> The REST interfaces will be changed as depicted below
> h2. CO creation
> Methods PUT or POST can be used to create CO.
> CO can be created by submitting PUT request to CO URI with body containing 
> object json or by submitting PUT/POST request to parent URI.
> The request encoding should be json (application/json) and request body 
> should contain a CO json object.
> On successful completion of operation a response code 201 should be returned  
> and response header "Location" should be set to CO URI. 
> If object with a such name/id already exist and parent URI is used to create 
> object, an error response with response code 409 (conflict) and body 
> containing json with the reason of operation failure should be returned. On 
> any other error, response with response code 400 (bad request) or  422 
> (validation error) and body containing json with the reason of operation 
> failure should be returned.
> If object with a such name/id already exist and object URI is used, then CO 
> update should be performed.
> For example, if Queue with name "my-queue" needs to be created on a virtual 
> host with name "vh" (which is contained within virtual host node with name 
> "vhn") either of the following requests should be made
> {noformat}
> PUT /api/latest/queue/vhn/vh HTTP/1.1
> {noformat}
> {noformat}
> POST /api/latest/queue/vhn/vh HTTP/1.1
> {noformat}
> {noformat}
> PUT /api/latest/queue/vhn/vh/my-queue HTTP/1.1
> {noformat}
> Response code 201 should be returned on successful queue creation. Response 
> header "Location" should be set to "/api/latest/queue/test/my-queue".  If 
> queue with a such name already exist with either of 2 first requests above, 
> an error response with response code 409 (conflict) and body containing json 
> message that queue exists should be returned. If queue with a such name 
> already and last request is used, then CO update should occur.
> h2. CO update
> Methods PUT or POST can be used to update CO. Update request should be made 
> against CO URI.
> If CO does not exists and PUT method is used, such object should be created
> If CO does not exists and POST method is used, an error should occur and 
> response with error code 404 and json with error message should be returned.
> The request encoding should be json (application/json) and request body 
> should contain a CO json object (with all or changed only attributes)
> On successful completion of operation a response code 200 should be returned. 
> If any error occur on update, a response with response code 400 or 422 or 404 
> should be sent back to the client containing json body with error details.
>  For example, if Queue with name "my-queue" is required to be updated on a 
> virtual host with name "vh" (contained in virtual host node with name "vhn") 
> either of the following requests should be made:
> {noformat}
> POST /api/latest/queue/vhn/vh/my-queue HTTP/1.1
> {noformat}
> {noformat}
> POST /api/latest/queue/vhn/vh/my-queue HTTP/1.1
> {noformat}
> We need to change REST documentation to cover the changes



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to