Henning, Thanks for the quick fix!
Shishir On Tue, Jan 13, 2009 at 4:25 PM, Paul Lindner <[email protected]> wrote: > Indeed, this is a bug. Thanks Henning/Shishir! > > > On Jan 12, 2009, at 5:14 PM, Henning Schmiedehausen wrote: > > You are correct, but this bug is 'fixed' by another bug a few lines up: >> >> private static final Set<String> CREATE_SYNONYMS = >> Sets.newHashSet("put", "create"); >> private static final Set<String> UPDATE_SYNONYMS = >> Sets.newHashSet("post", "update"); >> >> that should actually be >> >> private static final Set<String> CREATE_SYNONYMS = >> Sets.newHashSet("post", "create"); >> private static final Set<String> UPDATE_SYNONYMS = >> Sets.newHashSet("put", "update"); >> >> and UPDATE_SYNONYMS and CREATE_SYNONYMS swapped. See SHINDIG-842. >> Thanks for spotting. >> >> Ciao >> Henning >> >> >> >> On Sun, Jan 11, 2009 at 22:01, Shishir Birmiwal <[email protected]> >> wrote: >> >>> Dear shindig-dev, >>> >>> I have a query about a snippet of code in DataRequestHandler. Apparently, >>> it >>> invokes PUT for create and POST for update. Also, RPC create / update get >>> mapped to PUT / POST respectively. This should really be the other way. >>> As >>> per the RESTful spec, POST -> create new and PUT -> update in place. >>> >>> Is this a bug, or is this something that I am missing? >>> >>> Thanks, >>> Shishir >>> >>> .. >>> private static final Set<String> GET_SYNONYMS = Sets.newHashSet("get"); >>> private static final Set<String> *CREATE_SYNONYMS* = >>> Sets.newHashSet("*put >>> *", "*create*"); >>> private static final Set<String> *UPDATE_SYNONYMS* = Sets.newHashSet("* >>> post*", "*update*"); >>> private static final Set<String> DELETE_SYNONYMS = >>> Sets.newHashSet("delete"); >>> >>> public Future<?> handleItem(RequestItem request) { >>> if (request.getOperation() == null) { >>> return ImmediateFuture.errorInstance(new >>> SocialSpiException(ResponseError.NOT_IMPLEMENTED, >>> "Unserviced operation")); >>> } >>> String operation = request.getOperation().toLowerCase(); >>> Future<?> responseItem; >>> try { >>> if (GET_SYNONYMS.contains(operation)) { >>> responseItem = handleGet(request); >>> } else if (UPDATE_SYNONYMS.contains(operation)) { >>> responseItem = *handlePost*(request); >>> } else if (CREATE_SYNONYMS.contains(operation)) { >>> responseItem = *handlePut*(request); >>> } else if (DELETE_SYNONYMS.contains(operation)) { >>> responseItem = handleDelete(request); >>> } else { >>> .. >>> >>> >>> As per, >>> >>> http://www.opensocial.org/Technical-Resources/opensocial-spec-v081/restful-protocol >>> < >>> http://www.google.com/url?sa=D&q=http%3A//www.opensocial.org/Technical-Resources/opensocial-spec-v081/restful-protocol >>> >, >>> section 3 - Operations: >>> >>> 3. Operations >>> >>> OpenSocial uses standard HTTP methods: GET to retrieve, PUT to update in >>> place, POST to create new, and DELETE to remove. POST is special; it >>> operates on collections and creates new activities, persons, or app data >>> within those collections, and returns the base URI for the created >>> resource >>> in the Location: header, per AtomPub semantics. >>> >>> Restricted clients, or clients behind restricted clients, which cannot >>> use >>> PUT or DELETE SHOULD translate PUT and DELETE to POST operations with an >>> additional X-HTTP-Method-Override: header: POST /... HTTP/1.1 ... >>> X-HTTP-Method-Override: PUT >>> >>> > -- Diogenes - "What I like to drink most is wine that belongs to others."

