Why Doesn't OSLC Fully Comply with Roy Fielding's HTTP Semantics?

Hi Mario,

My confusion is not really on the methods and how they are implemented in OSLC, but rather how they are implemented with respect to a particular path.

Given /foo/{id}, per Fielding:

  1. GET on /foo returns all foo objects. A set of query string parameters can be used to filter the underlying data set.
  2. GET on /foo/{id} returns the foo with the given id.
  3. DELETE on /foo/{id} deletes the foo with the given id
  4. POST on /foo updates a foo, the underlying semantics (create a new one? update in-place, etc.) are defined by the application, not by the specification.
  5. PUT /foo/{id} creates a new foo with the given id replacing any existing one.

I am specifically confused about why OSLC implements completely different semantics RE: 1, 4, and 5. I’ll unpack:

For 1: OSLC defines Query Capabilities, which are completely independent endpoints for filtering the data set. Why doesn’t OSLC just use query string parameters?

For 4 and 5: Creation Factories could be implemented as POST/PUT at the corresponding /foo/{id} endpoints, however OSLC says a separate endpoint must be defined to serve these.

Hope that clarifies the confusion!