Skip to content

Commit 25ac7f4

Browse files
committed
Updated examples and more preparations for the 0.4.0 release.
1 parent 1a49346 commit 25ac7f4

17 files changed

+96
-278
lines changed

docs/arch.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ The openEO API defines a language how clients communicate to back-ends in order
1111
7. The openEO API may define *profiles* in order to group specific functionality.
1212

1313
![Architecture - openEO API shown in dark blue](img/arch.png)
14-
*Figure: Architecture - openEO API shown in dark blue*
14+
*Figure: Architecture*
1515

1616
# Microservices
1717

docs/collections.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Data Discovery (Collections)
22

3-
openEO strives for compatibility with [STAC](https://github.com/radiantearth/stac-spec) and [OGC WFS](https://github.com/opengeospatial/WFS_FES) as far as possible. Implementing the data discovery endpoints of openEO should also produce valid STAC 0.6 and WFS 3.0 responses, including an incomplete compatibility with their APIs (see below).
3+
openEO strives for compatibility with [STAC](https://github.com/radiantearth/stac-spec) and [OGC WFS](https://github.com/opengeospatial/WFS_FES) as far as possible. Implementing the data discovery endpoints of openEO should also produce valid STAC 0.6 and WFS 3.0 responses, including a partial compatibility with their APIs (see below).
44

55
**WARNING**: STAC and OGC WFS 3, as well as openEO, are still under development.
66
Therefore, it is very likely that further changes and adjustments will be made in the future.
@@ -15,7 +15,8 @@ Some commonly used extensions that are integrated in the openEO API specificatio
1515
- SAR extension
1616
- Commons extension
1717
- Scientific extension
18-
- Data Cube extension (draft)
18+
- Data Cube extension
19+
- Non-Common Properties extension
1920

2021
## Links
2122

docs/errors.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ The openEO API usually uses the following HTTP status codes for successful reque
4848

4949
The openEO API often uses the following HTTP status codes for failed requests:
5050

51-
- **400 Bad request**:
51+
- **400 Bad Request**:
5252
The back-end responds with this error code whenever the error has its origin on client side and no other HTTP status code in the 400 range is suitable.
5353

5454
- **401 Unauthorized**:
@@ -64,7 +64,7 @@ The openEO API often uses the following HTTP status codes for failed requests:
6464
- **500 Internal Server Error**:
6565
The error has its origin on server side and no other status code in the 500 range is suitable.
6666

67-
- **501 Not implemented**:
67+
- **501 Not Implemented**:
6868
An endpoint is specified in the openEO API, but is not supported.
6969

7070

docs/examples-poc.md

+19-52
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,20 @@ Deriving minimum NDVI measurements over pixel time series of Sentinel 2 imagery.
8282
"loadco1": {
8383
"process_id": "load_collection",
8484
"arguments": {
85-
"id": "Sentinel-2"
86-
}
87-
},
88-
"filter1": {
89-
"process_id": "filter_temporal",
90-
"arguments": {
91-
"data": {"from_node": "loadco1"},
92-
"start": "2017-01-01",
93-
"end": "2017-02-01"
85+
"id": "Sentinel-2",
86+
"spatial_extent": {
87+
"west": {"variable_id": "spatial_extent_west"},
88+
"east": {"variable_id": "spatial_extent_east"},
89+
"north": {"variable_id": "spatial_extent_north"},
90+
"south": {"variable_id": "spatial_extent_south"}
91+
},
92+
"temporal_extent": ["2017-01-01", "2017-02-01"]
9493
}
9594
},
9695
"ndvi1": {
9796
"process_id": "ndvi",
9897
"arguments": {
99-
"data": {"from_node": "filter1"}
98+
"data": {"from_node": "loadco1"}
10099
}
101100
},
102101
"reduce1": {
@@ -176,33 +175,20 @@ Create a monthly aggregated Sentinel 1 product from a custom Python script.
176175
"loadco1": {
177176
"process_id": "load_collection",
178177
"arguments": {
179-
"id": "Sentinel-1"
180-
}
181-
},
182-
"filter1": {
183-
"process_id": "filter_bbox",
184-
"arguments": {
185-
"data": {"from_node": "loadco1"},
186-
"extent": {
178+
"id": "Sentinel-1",
179+
"spatial_extent": {
187180
"west": 16.1,
188181
"east": 16.6,
189182
"north": 48.6,
190183
"south": 47.2
191-
}
192-
}
193-
},
194-
"filter2": {
195-
"process_id": "filter_temporal",
196-
"arguments": {
197-
"data": {"from_node": "filter1"},
198-
"start": "2017-01-01",
199-
"end": "2017-02-01"
184+
},
185+
"temporal_extent": ["2017-01-01", "2017-02-01"]
200186
}
201187
},
202188
"reduce1": {
203189
"process_id": "reduce",
204190
"arguments": {
205-
"data": {"from_node": "filter2"},
191+
"data": {"from_node": "loadco1"},
206192
"dimension": "temporal",
207193
"reducer": {
208194
"callback": {
@@ -307,40 +293,21 @@ Compute time series of zonal (regional) statistics of Sentinel 2 imagery over us
307293
"loadco1": {
308294
"process_id": "load_collection",
309295
"arguments": {
310-
"id": "Sentinel-2"
311-
}
312-
},
313-
"filter1": {
314-
"process_id": "filter_bbox",
315-
"arguments": {
316-
"data": {"from_node": "loadco1"},
317-
"extent": {
296+
"id": "Sentinel-2",
297+
"spatial_extent": {
318298
"west": 16.1,
319299
"east": 16.6,
320300
"north": 48.6,
321301
"south": 47.2
322-
}
323-
}
324-
},
325-
"filter2": {
326-
"process_id": "filter_temporal",
327-
"arguments": {
328-
"data": {"from_node": "filter1"},
329-
"start": "2017-01-01",
330-
"end": "2017-02-01"
331-
}
332-
},
333-
"filter3": {
334-
"process_id": "filter_bands",
335-
"arguments": {
336-
"data": {"from_node": "filter2"},
302+
},
303+
"temporal_extent": ["2017-01-01", "2017-02-01"],
337304
"bands": ["B8"]
338305
}
339306
},
340307
"reduce1": {
341308
"process_id": "reduce",
342309
"arguments": {
343-
"data": {"from_node": "filter3"},
310+
"data": {"from_node": "loadco1"},
344311
"dimension": "spectral"
345312
}
346313
},

docs/gettingstarted-backends.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ If your preferred technology has no back-end driver yet, you may consider writin
88

99
You certainly need to understand the [architecture](arch.md) of openEO and concepts behind [jobs](jobs.md), [processes](processes.md) and [process graphs](processgraphs.md). This helps you read and understand the [API specification](apireference.md). Technical API related documents like [CORS](cors.md) and [error handing](errors.md) should be read, too.
1010

11-
If you do not want to start from scratch, you could try to generate a server stub from the [OpenAPI 3.0](https://www.openapis.org/)-based [API specification](apireference.md) with the [Swagger code generator](https://github.com/swagger-api/swagger-codegen). If you are using Python or NodeJS to implement your driver you may re-use some common modules of existing driver implementations:
11+
If you do not want to start from scratch, you could try to generate a server stub from the [OpenAPI 3.0](https://www.openapis.org/)-based [API specification](apireference.md) with the [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator). If you are using Python implement your driver you may re-use some common modules of existing driver implementations:
1212

13-
* [Python Driver](https://github.com/Open-EO/openeo-python-driver)
14-
* [NodeJS Driver](https://github.com/Open-EO/openeo-nodejs-driver)
13+
* [Python Driver Commons](https://github.com/Open-EO/openeo-python-driver)
1514

1615
You can implement a back-end in iterations. It is recommended to start by implementing the [Capabilities](apireference.md#tag/Capabilities) microservice. [EO Data Discovery](apireference.md#tag/EO-Data-Discovery), [Process Discovery](apireference.md#tag/Process-Discovery) are important for the client libraries to be available, too. Afterwards you should implement [Batch Job Management](apireference.md#tag/Batch-Job-Management) or [synchronous data processing](apireference.md#/paths/~1result/post). All other microservices can be added later and are not strictly required to run openEO services. Keep in mind that you don't need to implement all endpoints in the first iteration and that you can specify in the Capabilities, which endpoints you are supporting.
1716

1817
For example, you could start by implementing the following endpoints in the first iteration:
1918

19+
* Well-Known Document: `GET /.well-known/openeo`
2020
* Capabilities: `GET /` and `GET /output_formats`
21-
* Data discovery: `GET /collections` and `GET /collections/{name}`
21+
* Data discovery: `GET /collections` and `GET /collections/{collection_id}`
2222
* Process discovery: `GET /processes`
2323
* Data processing: `POST /result`
2424
* Authentication (if required): `GET /credentials/basic`

docs/gettingstarted-clients.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ If your preferred programming language is not part of the [available client libr
88

99
Get started by reading the [guidelines to develop client libraries](guidelines-clients.md), which have been written to ensure the client libraries provide a consistent feel and behavior across programming languages. You certainly need to understand the concepts behind [jobs](jobs.md), [processes](processes.md) and [process graphs](processgraphs.md). This helps you understand the [API specification](apireference.md) and related documents.
1010

11-
If you do not want to start from scratch, you could try to generate a client library stub from the [OpenAPI 3.0](https://www.openapis.org/)-based [API specification](apireference.md) with the [Swagger code generator](https://github.com/swagger-api/swagger-codegen). Make sure the generated code complies to the client library guidelines mentioned above.
11+
If you do not want to start from scratch, you could try to generate a client library stub from the [OpenAPI 3.0](https://www.openapis.org/)-based [API specification](apireference.md) with the [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator). Make sure the generated code complies to the client library guidelines mentioned above.
1212

1313
*More information will follow soon, for example about client testing.*
1414

docs/glossary.md

+16-8
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ A **process graph** chains specific process calls. Similarly to scripts in the c
1919

2020
## EO data (Collections)
2121

22-
In our domain, different terms are used to describe EO data(sets). Within openEO, a **granule** (sometimes also called *item* or *asset* in the specification) typically refers to a limited area and a single overpass leading to a very short observation period (seconds) or a temporal aggregation of such data (e.g. for 16-day MODIS composites) while a **collection** is an aggregation of granules sharing the same product specification. It typically corresponds to the series of products derived from data acquired by a sensor on board a satellite and having the same mode of operation.
22+
In our domain, different terms are used to describe EO data(sets). Within openEO, a **granule** (sometimes also called *item* or *asset* in the specification) typically refers to a limited area and a single overpass leading to a very short observation period (seconds) or a temporal aggregation of such data (e.g. for 16-day MODIS composites) while a **collection** is an aggregation of granules sharing the same product specification. It typically corresponds to the series of products derived from data acquired by a sensor on board a satellite and having the same mode of operation.
2323

2424
The [CEOS OpenSearch Best Practice Document v1.2](http://ceos.org/ourwork/workinggroups/wgiss/access/opensearch/) lists synonyms used (by organizations) for:
2525

@@ -36,12 +36,12 @@ The figure below shows the data of
3636
a four-dimensional (8 x 8 x 2 x 2) raster data cube, with dimension names
3737
and values:
3838

39-
| #| dimension name | dimension values |
40-
|--|----------------|--------------------------------------|
41-
| 1| x | 288790.5, 288819, 288847.5, 288876, 288904.5, 288933, 288961.5, 288990 |
42-
| 2| y | 9120747, 9120718, 9120690, 9120661, 9120633, 9120604, 9120576, 9120547 |
43-
| 3| band | `red`, `green` |
44-
| 4| time | `2018-02-10`, `2018-02-17` |
39+
| # | dimension name | dimension values |
40+
| ---- | -------------- | ---------------- |
41+
| 1 | x | 288790.5, 288819, 288847.5, 288876, 288904.5, 288933, 288961.5, 288990 |
42+
| 2 | y | 9120747, 9120718, 9120690, 9120661, 9120633, 9120604, 9120576, 9120547 |
43+
| 3 | band | `red`, `green` |
44+
| 4 | time | `2018-02-10`, `2018-02-17` |
4545

4646
dimensions x and time are aligned along the x-axis; y and band are aligned along the y-axis.
4747

@@ -128,4 +128,12 @@ When the target grid or time series has a lower resolution (larger grid cells) o
128128

129129
### User-defined function (UDF)
130130

131-
The abbreviation **UDF** stands for **user-defined function**. With this concept, users are able to upload custom code and have it executed e.g. for every pixel of a scene, or applied to a particular dimension or set of dimensions, allowing custom server-side calculations. See the section on [UDFs](udfs.md) for more information.
131+
The abbreviation **UDF** stands for **user-defined function**. With this concept, users are able to upload custom code and have it executed e.g. for every pixel of a scene, or applied to a particular dimension or set of dimensions, allowing custom server-side calculations. See the section on [UDFs](udfs.md) for more information.
132+
133+
# Data Processing modes
134+
135+
Process graphs can be processed in three different ways:
136+
137+
1. Results can be pre-computed by creating a ***batch job*** using `POST /jobs`. They are submitted to the back-end's processing system, but will remain inactive until `POST /jobs/{job_id}/results` has been called. They will run only once and store results after execution. Results can be downloaded. Batch jobs are typically time consuming so that user interaction is not possible. This is the only mode that allows to get an estimate about time, volume and costs beforehand.
138+
2. A more dynamic way of processing and accessing data is to create a **secondary web service**. They allow web-based access using different protocols such as [OGC WMS](http://www.opengeospatial.org/standards/wms), [OGC WCS](http://www.opengeospatial.org/standards/wcs) or [XYZ tiles](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames). These protocols usually allow users to change the viewing extent or level of detail (zoom level). Therefore, computations often run *on demand* so that the requested data is calculated during the request. Back-ends should make sure to cache processed data to avoid additional/high costs and reduce waiting times for the user.
139+
3. Process graphs can also be executed **on-demand** (i.e. synchronously) by sending the process graph to `POST /result`. Results are delivered with the request itself and no job is created. Only lightweight computations, for example small previews, should be executed using this approach as timeouts are to be expected for [long-polling HTTP requests](https://www.pubnub.com/blog/2014-12-01-http-long-polling/).

docs/guidelines-api.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ In the specification the key words “MUST”, “MUST NOT”, “REQUIRED”,
1414

1515
Unless otherwise stated the API works case sensitive.
1616

17-
All names SHOULD be written in snake case, i.e. words are separated with one underscore character (_) and no spaces, with all letters lowercased. Example: `hello_world`. This applies particularly to endpoints and JSON property names. HTTP header fields follow their respective casing conventions, e.g. `Content-Type` or `OpenEO-Costs`, despite being case-insensitive according to [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2).
17+
All names SHOULD be written in snake case, i.e. words are separated with one underscore character (_) and no spaces, with all letters lowercased. Example: `hello_world`. This applies particularly to endpoints and JSON property names. HTTP header fields follow their respective casing conventions, e.g. `Content-Type` or `OpenEO-Costs`, despite being case-insensitive according to [RFC 7230](https://tools.ietf.org/html/rfc7230#section-3.2).
1818

1919
## Technical requirements
2020

2121
### HTTP
2222

23-
The API developed by the openEO project uses [HTTP REST](https://en.wikipedia.org/wiki/Representational_state_transfer)[Level 2](https://martinfowler.com/articles/richardsonMaturityModel.html#level2) for communication between client and back-end server.
23+
The API developed by the openEO project uses [HTTP REST](https://en.wikipedia.org/wiki/Representational_state_transfer) [Level 2](https://martinfowler.com/articles/richardsonMaturityModel.html#level2) for communication between client and back-end server.
2424

2525
Public APIs MUST be available via HTTPS only and all inbound calls MUST be HTTPS.
2626

0 commit comments

Comments
 (0)