[ 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