This is an automated email from the ASF dual-hosted git repository.
bdelacretaz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
The following commit(s) were added to refs/heads/master by this push:
new 1827ed8 API planes prototype, just the spec for now
1827ed8 is described below
commit 1827ed8773a613ef203f68e67848d5cd77e2766d
Author: Bertrand Delacretaz <[email protected]>
AuthorDate: Thu Jun 3 15:31:37 2021 +0200
API planes prototype, just the spec for now
---
remote-content-api/api-planes-prototype/README.md | 45 +++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/remote-content-api/api-planes-prototype/README.md
b/remote-content-api/api-planes-prototype/README.md
new file mode 100644
index 0000000..afdbd06
--- /dev/null
+++ b/remote-content-api/api-planes-prototype/README.md
@@ -0,0 +1,45 @@
+API Planes prototype
+---
+
+The goal of this prototype is to explore a self-describing and cacheable HTTP
API based on
+GraphQL schemas and queries.
+
+It takes advantage of the Sling GraphQL Core "any resource can be a GraphQL
endpoint"
+feature to offer cacheable server-side queries as well as the usual
client-driven queries
+which are useful at the development stage.
+
+Several GraphQL schemas are available in a number of independent "API planes",
providing
+multiple ways to look at the Sling Resources in a modular way.
+
+## API Planes
+
+An API Plane exposes a Sling Resource to the API from a specific angle. The
concept is
+similar to a geometrical plane, we're not talking flying metal tubes here.
+
+For example, _/mycontent/mydocument.N.json_ is a GraphQL endpoint for the "N
plane" used
+for navigation. Any Sling Resource can be addressed with "N" as the first URL
selector
+to address that plane, ignoring any other scripts or servlets that might be
mounted on the
+same Resource for other purposes. Those remain active in the other API planes,
when
+the first N selector (or another plane selector) is not used.
+
+The GraphQL schema of such an API plane is simple and isolated from other
planes. In this
+case the N plane schema is about navigating the content tree in terms of
folders and
+document summaries, to discover content and generate navigation UIs. A
document summary
+typically contains the document's title, description, and useful hypertext
links, which
+might be generated by the sibling `document-aggregator` module in "summary"
mode.
+
+For this prototype we might start with:
+ * The N plane to navigate in folder and document summaries
+ * The D plane for document details, generated using the sibling
`document-aggregator` module
+ * Maybe a C plane for commands, similar to the "repoinit" command example
from the sibling [sample GraphQL API](../sample-graphql-api/) module.
+
+## Selector-driven prepared queries
+
+To make the "important" GraphQL queries cacheable, once they are defined we
save them for
+server-side execution, driven by URL selectors.
+
+For example, _/mycontent/myfolder.N.tree.json_ executes the N plane GraphQL
prepared query named "tree",
+using an HTTP GET request for cacheability.
+
+Using selectors avoids having to use special paths for the stored queries,
which helps provide
+a fully resource-oriented view with meaningful hypertext links.
\ No newline at end of file