Skip to content

Commit 15dbaf4

Browse files
authored
Add API & Processes profiles (#81)
1 parent 4d14eb5 commit 15dbaf4

File tree

5 files changed

+184
-126
lines changed

5 files changed

+184
-126
lines changed

federation/backends/api.md

+84-10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,84 @@ The general contract is the [openEO API](https://api.openeo.org) in the latest s
44

55
The aggregator that proxies the back-ends in the federation also implements the same API, but it also implements the "Federation Extension" (currently in draft state).
66

7+
## Profiles
8+
9+
In addition to the general openEO API specification and their [API Profiles](https://openeo.org/documentation/1.0/developers/profiles/api.html),
10+
openEO Platform requires to implement an additional API profile:
11+
*LP: Required for openEO Platform*, which requires the openEO profile *L2: Recommended*.
12+
The requirement to implement two of *L1A*, *L1B*, and *L1C* has been restricted for openEO Platform to always require *L1A: Synchronous Processing* and *L1B: Batch Jobs* (see req. no. 703). This means that *L1C: Secondary Web Services* is optional.
13+
14+
<figure>
15+
<img src="./profiles/api.png" alt="The hierarchy of openEO and openEO Platform API profiles.">
16+
<figcaption>An overview of the openEO and openEO Platform API profiles.</figcaption>
17+
</figure>
18+
19+
### LP: Required for openEO Platform
20+
21+
The profile only lists requirements that are not covered by the openEO profile *L2: Recommended* yet.
22+
23+
#### API fundamentals
24+
25+
| # | Functionality | Description |
26+
| -- | -- | -- |
27+
| 14 | All > Billing | Supports the openEO Platform credit system |
28+
29+
#### File Formats
30+
31+
| # | Functionality | Description |
32+
| -- | -- | -- |
33+
| 45 | `GET /file_formats` | File format names and parameters aligned with openEO Platform as defined for the pre-defined [file formats](./fileformats.md) |
34+
35+
#### Other
36+
37+
| # | Functionality | Description |
38+
| -- | -- | -- |
39+
| 90 | `GET /health` | Returns 2XX or 5XX http status code (without authentication) |
40+
41+
#### Auth
42+
43+
| # | Functionality | Description |
44+
| -- | -- | -- |
45+
| 113 | `GET /credentials/oidc` | Supports EGI as identity provider (including tokens) |
46+
| 118 | `GET /credentials/oidc` | Supports the required entitlements of the vo.openeo.cloud virtual organization, especially the claim eduperson_entitlement |
47+
48+
For more details about [Authentication and Authorization](#authentication-and-authorization), please see the corresponding chapters below.
49+
50+
#### Pre-defined Processes
51+
52+
| # | Functionality | Description |
53+
| -- | -- | -- |
54+
| 205 | `GET /processes` > processes | All processes are valid according to the specification (id, description, parameters, returns are required) |
55+
| 208 | `GET /processes` > processes | Processes are marked as experimental or deprecated if applicable |
56+
57+
#### Collections
58+
59+
| # | Functionality | Description |
60+
| -- | -- | -- |
61+
| 311 | `GET /collections` > collections | Collections are marked as experimental or deprecated if applicable |
62+
| 324 | `GET /collections/{id}` > id | IDs follow the openEO Platform naming convention |
63+
| 327 | `GET /collections/{id}` > providers | Each collection needs to expose the backend offering the data |
64+
65+
#### Data Processing
66+
67+
| # | Functionality | Description |
68+
| -- | -- | -- |
69+
| 703 | | Batch jobs and synchronous processing are implemented (secondary web services are optional) |
70+
| 704 | | Time after which batch job results get automatically deleted: 90 days or later |
71+
| 705 | | Time after which batch job metadata gets automatically deleted: 1 year or later |
72+
73+
#### Batch Jobs > Results
74+
75+
| # | Functionality | Description |
76+
| -- | -- | -- |
77+
| 873 | `GET /jobs/{id}/results` > public access link | Default expiry time of the signed URLs for results: 7 days |
78+
79+
#### Synchronous Processing
80+
81+
| # | Functionality | Description |
82+
| -- | -- | -- |
83+
| 920 | `POST /result` > timeout | The timeout for synchronous calls is: 5 minutes |
84+
785
## Authentication and authorization
886

987
This important aspect of the federation is standardized by the [AARC Blueprint Architecture](https://aarc-project.eu/architecture/). EGI Check-in is the concrete implementation that is currently in use.
@@ -12,26 +90,26 @@ This important aspect of the federation is standardized by the [AARC Blueprint A
1290

1391
The openEO platform federation standardizes on the use of [EGI Check-in](https://aai.egi.eu) as identity provider. Backends have to support the use of openID connect + PKCE, to enable this and register a client with EGI Check-in.
1492

15-
## Authorization
93+
### Authorization
1694

17-
### Entitlements
95+
#### Entitlements
1896

1997
Users of the federation are organized under the 'vo.openeo.cloud' virtual organization in EGI Check-in. Inside the virtual organization, different roles can be assigned to a user, to indicate that they have a certain subscription, or even on a more fine-grained level are entitled to specific actions or resources.
20-
The mechanism to check this, is again supported by EGI Check-in, under the 'eduperson_entitlement' claim: https://docs.egi.eu/providers/check-in/sp/#claims
98+
The mechanism to check this, is again supported by EGI Check-in, under the 'eduperson_entitlement' claim: <https://docs.egi.eu/providers/check-in/sp/#claims>
2199

22-
### Credits
100+
#### Credits
23101

24102
The second criterium for authorization is based on credits that are available to a user. Credits allow the platform to limit the volume of data access and processing operations that a user can perform during a given time frame. The amount of available credits depends on the subscription.
25103
When the credit balance of a user goes below zero, processing operations can be blocked.
26104

27-
### Aggregator rules
105+
#### Aggregator rules
28106

29107
Based on the subscription and available credits, the aggregator can implement these rules:
30108

31109
1. Credit checks to block starting of batch jobs, synchronous requests to /result and viewing services.
32110
2. Rate limiting (TBD)
33111

34-
### Backend rules
112+
#### Backend rules
35113

36114
Some authorization rules will need to be enforced by the backends themselves:
37115

@@ -40,7 +118,3 @@ Some authorization rules will need to be enforced by the backends themselves:
40118
3. Available processing resources, batch job priorities
41119
4. Batch job result data volume
42120
5. Access to restricted collections
43-
44-
45-
46-

federation/backends/collections.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Collections
2-
This page describes requirements on STAC collection metadata for backend providers in the openEO platform federation. These requirements should be considered an addition to what is already required by the [openEO API](https://api.openeo.org/#tag/EO-Data-Discovery/operation/describe-collection).
2+
This page describes requirements on STAC collection metadata for backend providers in the openEO platform federation.
3+
These requirements should be considered an addition to what is already required by the [openEO API](https://api.openeo.org/#tag/EO-Data-Discovery/operation/describe-collection) and the [API profiles](./api.md#profiles).
34

45
## Collection availability
56

federation/backends/processes.md

+98-115
Original file line numberDiff line numberDiff line change
@@ -1,123 +1,106 @@
11
# Processes
22

3-
## Core Profile
3+
The openEO project defines a large number of processes, which can be found at <https://processes.openeo.org>.
4+
Due to the number of processes, we need to define a profile (i.e. a subset of processes) that must be implemented on each back-end so that a certain level of interoperability can be achieved.
45

5-
As the openEO project defines a lot of processes, we need to define a core profile (i.e. a subset) that needs to be implemented on each back-end.
6-
All processes specifications can be found at <https://processes.openeo.org>
6+
In addition to the general openEO Processes specification and their [Processes Profiles](https://openeo.org/documentation/1.0/developers/profiles/processes.html),
7+
openEO Platform requires to implement an additional Process profile:
8+
*L2P: Required - openEO Platform*, which requires one of the openEO profiles *L2A: Recommended (Raster)* or *L2B: Recommended (Vector)*.
9+
There are two additional openEO Platform specific profiles with additional requirements: *L3P: Advanced - openEO Platform* and *L4P: Complete - openEO Platform*.
710

8-
### Data Cubes
9-
- `add_dimension`: Add a new dimension
10-
- `aggregate_spatial`: Zonal statistics for geometries
11-
- `aggregate_temporal`: Temporal aggregations
12-
- `aggregate_temporal_period`: Temporal aggregations based on calendar hierarchies
13-
- `apply`: Apply a process to each pixel
14-
- `apply_dimension`: Apply a process to pixels along a dimension
15-
- `apply_kernel`: Apply a spatial convolution with a kernel
16-
- `dimension_labels`: Get the dimension labels
17-
- `drop_dimension`: Remove a dimension
18-
- `filter_bands`: Filter the bands by names
19-
- `filter_bbox`: Spatial filter using a bounding box
20-
- `filter_spatial`: Spatial filter using geometries
21-
- `filter_temporal`: Temporal filter for temporal intervals
22-
- `load_collection`: Load a collection
23-
- `load_result`: Load batch job results - **experimental**
24-
- `mask`: Apply a raster mask
25-
- `mask_polygon`: Apply a polygon mask
26-
- `merge_cubes`: Merge two data cubes
27-
- `reduce_dimension`: Reduce dimensions
28-
- `rename_dimension`: Rename a dimension
29-
- `rename_labels`: Rename dimension labels -> needed often for apply_dimension
30-
- `resample_cube_spatial`: Resample the spatial dimensions to match a target data cube
31-
- `resample_cube_temporal`: Resample temporal dimensions to match a target data cube - **experimental**
32-
- `resample_spatial`: Resample and warp the spatial dimensions
33-
- `save_result`: Save processed data
11+
<figure>
12+
<img src="./profiles/processes.png" alt="The hierarchy of openEO and openEO Platform Processes profiles.">
13+
<figcaption>An overview of the openEO and openEO Platform Processes profiles.</figcaption>
14+
</figure>
3415

35-
### Arrays / Reducers
36-
- `array_append`: Append a value to an array - **experimental**
37-
- `array_apply`: Apply a process to each array element
38-
- `array_concat`: Merge two arrays - **experimental**
39-
- `array_contains`: Check whether the array contains a given value
40-
- `array_create`: Create an array - **experimental**
41-
- `array_element`: Get an element from an array
42-
- `array_filter`: Filter an array based on a condition
43-
- `array_find`: Get the index for a value in an array
44-
- `array_interpolate_linear`: One-dimensional linear interpolation for arrays - **experimental**
45-
- `array_labels`: Get the labels for an array
46-
- `array_modify`: Change the content of an array (insert, remove, update) - **experimental**
47-
- `count`: Count the number of elements
48-
- `extrema`: Minimum and maximum values
49-
- `first`: First element
50-
- `last`: Last element
51-
- `max`: Maximum value
52-
- `mean`: Arithmetic mean (average)
53-
- `median`: Statistical median
54-
- `min`: Minimum value
55-
- `order`: Create a permutation
56-
- `product`: Compute the product by multiplying numbers
57-
- `rearrange`: Rearrange an array based on a permutation
58-
- `sort`: Sort data
59-
- `sum`: Compute the sum by adding up numbers
16+
### Requirements per Profile
6017

61-
### Math
62-
- `absolute`: Absolute value
63-
- `add`: Addition of two numbers
64-
- `arccos`: Inverse cosine
65-
- `arcosh`: Inverse hyperbolic cosine
66-
- `arcsin`: Inverse sine
67-
- `arctan`: Inverse tangent
68-
- `arctan2`: Inverse tangent of two numbers
69-
- `arsinh`: Inverse hyperbolic sine
70-
- `artanh`: Inverse hyperbolic tangent
71-
- `ceil`: Round fractions up
72-
- `clip`: Clip a value between a minimum and a maximum
73-
- `constant`: Define a constant value -> pretty easy implementation
74-
- `cos`: Cosine
75-
- `cosh`: Hyperbolic cosine
76-
- `divide`: Division of two numbers
77-
- `e`: Euler's number
78-
- `exp`: Exponentiation to the base e
79-
- `floor`: Round fractions down
80-
- `int`: Integer part of a number
81-
- `linear_scale_range`: Linear transformation between two ranges
82-
- `ln`: Natural logarithm
83-
- `log`: Logarithm to a base
84-
- `mod`: Modulo
85-
- `multiply`: Multiplication of two numbers
86-
- `nan` - Not a Number - **experimental**
87-
- `pi`: Pi
88-
- `power`: Exponentiation
89-
- `round`: Round to a specified precision
90-
- `sgn`: Signum
91-
- `sin`: Sine
92-
- `sinh`: Hyperbolic sine
93-
- `sqrt`: Square root
94-
- `subtract`: Subtraction of two numbers
95-
- `tan`: Tangent
96-
- `tanh`: Hyperbolic tangent
18+
The profiles below only lists requirements that are not covered by the corresponding openEO profiles yet.
9719

98-
### Statistics / Indices
99-
- `ndvi`: Normalized Difference Vegetation Index
100-
- `normalized_difference`: Normalized difference
101-
- `quantiles`: Quantiles
102-
- `sd`: Standard deviation
103-
- `variance`: Variance
20+
Although in the openEO Profiles experimental processes shall only lead to a "warning", experimental processes in profiles that *L2P* depends on are required to be available (which currently are `inspect` and `nan`).
10421

105-
### Logic
106-
- `and`: Logical AND
107-
- `all`: Are all of the values true?
108-
- `any`: Is at least one value true?
109-
- `between`: Between comparison
110-
- `eq`: Equal to comparison
111-
- `gt`: Greater than comparison
112-
- `gte`: Greater than or equal to comparison
113-
- `if`: If-Then-Else conditional
114-
- `is_infinite`: Value is an infinite number - **experimental**
115-
- `is_nan`: Value is not a number
116-
- `is_nodata`: Value is a no-data value
117-
- `is_valid`: Value is valid data
118-
- `lt`: Less than comparison
119-
- `lte`: Less than or equal to comparison
120-
- `neq`: Not equal to comparison
121-
- `not`: Inverting a boolean
122-
- `or`: Logical OR
123-
- `xor`: Logical XOR (exclusive or)
22+
## L2P: Required - openEO Platform
23+
24+
Requires [openEO Profile L2: Recommended](https://openeo.org/documentation/1.0/developers/profiles/processes.html#l2-recommended) and additionally:
25+
26+
- **`add_dimension`**
27+
- has been tested on > 100x100km at 10m resolution (or equivalent)
28+
- **`aggregate_spatial`**
29+
- has been tested on > 100x100km at 10m resolution (or equivalent)
30+
- **`aggregate_temporal`**
31+
- has been tested on > 100x100km at 10m resolution (or equivalent)
32+
- **`aggregate_temporal_period`**
33+
- has been tested on > 100x100km at 10m resolution (or equivalent)
34+
- **`apply`**
35+
- has been tested on > 100x100km at 10m resolution (or equivalent)
36+
- **`apply_dimension`**
37+
- has been tested on > 100x100km at 10m resolution (or equivalent)
38+
- **`apply_kernel`**
39+
- has been tested on > 100x100km at 10m resolution (or equivalent)
40+
- **`array_contains`**
41+
- **`dimension_labels`**
42+
- has been tested on > 100x100km at 10m resolution (or equivalent)
43+
- **`drop_dimension`**
44+
- has been tested on > 100x100km at 10m resolution (or equivalent)
45+
- **`filter_bands`**
46+
- has been tested on > 100x100km at 10m resolution (or equivalent)
47+
- **`filter_bbox`**
48+
- has been tested on > 100x100km at 10m resolution (or equivalent)
49+
- **`filter_spatial`**
50+
- has been tested on > 100x100km at 10m resolution (or equivalent)
51+
- **`filter_temporal`**
52+
- has been tested on > 100x100km at 10m resolution (or equivalent)
53+
- **`load_collection`**
54+
- has been tested on > 100x100km at 10m resolution (or equivalent)
55+
- **`mask`**
56+
- has been tested on > 100x100km at 10m resolution (or equivalent)
57+
- **`mask_polygon`**
58+
- has been tested on > 100x100km at 10m resolution (or equivalent)
59+
- **`merge_cubes`**
60+
- has been tested on > 100x100km at 10m resolution (or equivalent)
61+
- **`ndvi`**
62+
- has been tested on > 100x100km at 10m resolution (or equivalent)
63+
- **`reduce_dimension`**
64+
- has been tested on > 100x100km at 10m resolution (or equivalent)
65+
- **`rename_dimension`**
66+
- has been tested on > 100x100km at 10m resolution (or equivalent)
67+
- **`rename_labels`**
68+
- has been tested on > 100x100km at 10m resolution (or equivalent)
69+
- **`resample_cube_spatial`**
70+
- has been tested on > 100x100km at 10m resolution (or equivalent)
71+
- **`resample_spatial`**
72+
- has been tested on > 100x100km at 10m resolution (or equivalent)
73+
- **`save_result`**
74+
- has been tested on > 100x100km at 10m resolution (or equivalent)
75+
76+
## L3P: Advanced - openEO Platform
77+
78+
Requires [openEO Profile L3: Advanced](https://openeo.org/documentation/1.0/developers/profiles/processes.html#l3-advanced) and additionally:
79+
80+
- **`apply_neighborhood`**
81+
- has been tested on > 100x100km at 10m resolution (or equivalent)
82+
- **`ard_surface_reflectance`** (experimental)
83+
- has been tested on > 100x100km at 10m resolution (or equivalent)
84+
- **`filter_labels`** (experimental)
85+
- has been tested on > 100x100km at 10m resolution (or equivalent)
86+
- **`load_stac (load_result)`** (experimental)
87+
- has been tested on > 100x100km at 10m resolution (or equivalent)
88+
- **`reduce_spatial`** (experimental)
89+
- has been tested on > 100x100km at 10m resolution (or equivalent)
90+
- **`resample_cube_temporal`**
91+
- has been tested on > 100x100km at 10m resolution (or equivalent)
92+
- **`run_udf`**
93+
- has been tested on > 100x100km at 10m resolution (or equivalent)
94+
95+
## L4P: Complete - openEO Platform
96+
97+
Requires [openEO Profile L4: Above and Beyond](https://openeo.org/documentation/1.0/developers/profiles/processes.html#l4-above-and-beyond) and additionally:
98+
99+
- **`atmospheric_correction`** (experimental)
100+
- has been tested on > 100x100km at 10m resolution (or equivalent)
101+
- **`load_uploaded_files`** (experimental)
102+
- has been tested on > 100x100km at 10m resolution (or equivalent)
103+
- **`load_url`** (experimental)
104+
- has been tested on > 100x100km at 10m resolution (or equivalent)
105+
- **`sar_backscatter`** (experimental)
106+
- has been tested on > 100x100km at 10m resolution (or equivalent)

federation/backends/profiles/api.png

35.2 KB
Loading
45.2 KB
Loading

0 commit comments

Comments
 (0)