solid / solid/specification

What does an append operation imply?

Open
#118 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

doc: Protocol topic: resource access
Dominant language
HTML
Stars
563
Forks
108
Avg merge
4d 13h
Merged PRs (30d)
3

Description

Appending to a resource is a central tenet of Solid, and I'm not sure we have issues open already to address it sufficiently, thus this issue. This is of relevance in discussing #108 . LDP doesn't discuss append, AFAICS, so we have to.

It is founded in the acl:Append access mode in the current WAC document, which states:

acl:Append gives a more limited ability to write to a resource -- Append-Only. This generally includes the HTTP verb POST, although some implementations may also extend this mode to cover non-overwriting PUTs, as well as the INSERT-only portion of SPARQL-based PATCHes. A typical example of Append mode usage would be a user's Inbox -- other agents can write (append) notifications to the inbox, but cannot alter or read existing ones.

For LDP-RS, it seems straightforward, as it eventually boils down to an RDF Merge, either through POST, non-overwriting PUT (seems awkward to define to me), or an SPARQL INSERT through PATCH.

For LDP-C, there are two interpretations, AFAICS: it could be argued that creating a resource in a container is an append operation on the container. So, we need to figure out whether acl:Append on a container is sufficient to create a new resource in a container, or if you need acl:Write to do it. There is a slight difference in wording in the definition of POST between RFC2616 and RFC7231 on this, the former says:

Extending a database through an append operation.

which could support the notion that creating a resource in a container is extending a database and so an append operation, but the latest RFC does not support that (at least to the same extent).

For LDP-NR, it seems quite a lot harder, since it depends on the media type whether it is possible to append to it. We could define some general rules around what you'd do if your media type does not support appending, or we could just be strict for now and say that LDP-NR cannot be appended to.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reading the linked WAC acl:Append definition, issue #108, and the referenced LDP, RDF Merge, and HTTP RFC material. Compare the LDP-RS, LDP-C, and LDP-NR interpretations; done means the specification records agreed append semantics and access requirements for each resource type.

Written by the indexing model from the issue text.

Assessment

Domain
backend-api-design
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.