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

Reply via email to