On 2.2.15 3:33 , Axel Hanikel wrote:
Hi,
I’m not sure if I have enough background to participate in the discussion,
so bear with me...
I think it wouldn’t be too hard to translate oak operations to an
HTTP-based API, if we just define some URLs as “special”, i.e. they don’t
represent the corresponding node in the repo but have special semantics.
For example, /sessions could represent sessions or transactions, which have
to be committed or discarded, or which are discarded automatically after
they expire.
This would basically mean we'd expose revisions in the resource tree. I
think this could work!
Michael
Below are some example requests (responses are: status code - response
header; everything after # is a comment):
Req: GET / # Get current revision
Resp: 302 - Location: /revisions/12345678-abcd-abcd-abcd-123456789abc
Req: GET /sessions
Resp: 302 - Location: /sessions/12345678-abcd-abcd-abcd-123456789abc
# possibly several location headers if more than one session available for
the user (if we want to allow that)
204 - # No sessions
Req: POST /sessions # start a new session
Resp: 201 - Location: /sessions/12345678-abcd-abcd-abcd-123456789abc
Req: PUT /sessions/12345678-abcd-abcd-abcd-123456789abc # Commit
session
Resp: 201 - Location: /revisions/12345678-abcd-abcd-abcd-123456789abc
# Success
409 - # Merge conflict
...
Req: GET /some/path # read a node (the node’s current value)
Req: GET /sessions/12345678-abcd-abcd-abcd-123456789abc/some/path #
read the same node’s value at the time the session was created
Req: GET /some/path/@prop # read a node’s property
Req: PUT /some/path/@prop # create or replace property “prop” and
commit immediately
Req: PUT
/sessions/12345678-abcd-abcd-abcd-123456789abc/some/path/@prop # create or
replace property “prop” within the session
Req: DELETE /sessions/12345678-abcd-abcd-abcd-123456789abc # discard
a session
Req: GET
/revisions/12345678-abcd-abcd-abcd-123456789abc/path/to/node # read a
revision
Req: GET
/trees/12345678-abcd-abcd-abcd-123456789abc/path/to/root/of/subtree # read
a tree, output format can be json or anything, depending on Accept header.
Range header could limit output.
Authentication is done in the usual HTTP way.
WDYT?
Axel
PS: The "special nodes" are probably better named
"/jcr:system/remote/{sessions,revisions,trees}"