Replies: 3 comments 13 replies
-
|
@m-mohr I think that there is a fundamental system design challenge that this hierarchical proposal introduces: The complexity of "Write" operations in a Graph. The hierarchy described in this RFC makes perfect sense in a Read-Only context (like a Static Catalog on S3). In that world, the "Truth" is the file structure, and links are generated offline or in batch processes. However, a STAC API is often a Read-Write system. If we encourage complex hierarchies (e.g., Relying on "Manual Link Maintenance" (forcing the client to 1. Lack of Atomicity (The "Broken Link" Risk)In a standard REST API, requests are independent.
2. The Orphan Problem (Referential Integrity)
3. Concurrency & Race Conditions
4. Scale & Refactoring
ConclusionWhile describing the hierarchy via If we want to standardize hierarchical STAC APIs, we implicitly need to standardize the Transactional Behaviors (Create, Move, Cascade Delete) required to maintain that hierarchy safely. Without that, we risk defining a spec that works great for readers but is brittle for writers. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
I wanted to link some of the things I have been working on related to this RFC:
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
The following is a proposal, how STAC APIs could implement a grouping for Collections as the flat list of Collections is considered not very user-friendly by many.
Proposal
STAC API - Core, including its Landing Page, can have links with relation type
childanditemthat point to other STAC Catalogs, Collections, and Items. This can be used to create arbitrarily complex hierarchies similar to static STAC catalogs.Thus arbitrarily complex hierarchies can be served via STAC APIs. The traversal can lead to a lot of requests, as such it is recommended to implement STAC API - Children for more efficient data retrieval.
Generally, the STAC APIs implementing Core can flexibly choose how the hierchical STAC structure looks like, it's pretty much like a static STAC catalog, just powered by an API server in the background. Nevertheless, many STAC APIs implement STAC API - Collections / Features. It offers rich functionalities to provide and filter Collections and Items through a flat interface the hierarchy is Landing Page -> Collections -> Items. With the growing number of Collections, providers want to group/structure their Collections to avoid overly long lists of Collections.
A combination of STAC API - Core, Children, and Collections / Features can support such as usecase. The general idea is to add the
childlink relation to the landing page, to create a structure that links to the existing STAC Collections provided via STAC API - Collections while still keeping the abilities of STAC API - Collections and Collection Search.An open point up for discussion is, how these structures could be created by be the API implementation.
keywordsin Collections. The keywords / concepts could imply a hierarchy.Example
This provides a nice way to structure collections in various ways (e.g. SKOSMOS), multiple paths can lead to the same Collection.
Collection Search and a hierarchical way to browse through the magnitute of collections can lead to a much better UX than the plain collection lists.
Related Extensions and Issues
Children
The Landing Page, and all subsequent catalogs (Providers, ESA, NASA, My Drone Company, Flight Type, Satellite, etc.) could all implement the proposed update to STAC API - Children and provide a link with relation type
childrento reduce the number of API requests significantly.Browseable
Please note that item links from Collections in this case can be found via the
itemsrelation type, not via theitemrelation type. As such it does not fullfill the requirements of STAC API - Browseable.This is due to the fact the STAC API - Browsable requires
itemrelation types to be present, which is not the case here. Insteaditemsis provided, to keep the implementation overhead small and allow search on the/collections/{collectionId}/itemsendpoint.Catalogs Endpoint
The extension Catalogs endpoint is somewhat similar, but catered more towards serviing multiple APIs from the same API instance. it only allows a single level of depth, but in principle the two extensions can be used together. It might not integrate as well with existing implementations as it defines new endpoints.
Related issues
Implementations
I'd assume that many implementations can already handle this if they are aware of static STAC and STAC APIs as it resuses the link relation types of existing specifications.
For instance, STAC Browser would support such a usecase out of the box. By default it would show both the list of Collections and the newly added child links combined, but setting the config option
apiCatalogPrioritytochildswould hide the list of collections and only show the more user-friendly STAC hierarchy that is defined throughchildlinks. It still keeps the advantages of Collection Search for example.Beta Was this translation helpful? Give feedback.
All reactions