diff --git a/api/joins/index.html b/api/joins/index.html new file mode 100644 index 0000000..9313b6b --- /dev/null +++ b/api/joins/index.html @@ -0,0 +1,24 @@ + + + + ReDoc + + + + + + + + + + + + + diff --git a/api/joins/openapi.yaml b/api/joins/openapi.yaml new file mode 100644 index 0000000..6dc541c --- /dev/null +++ b/api/joins/openapi.yaml @@ -0,0 +1,845 @@ +openapi: 3.0.1 +info: + title: 'Example for OGC API - Joins - Part 1: Core service' + description: 'This is an example an API definition conforming to the OGC API - Joins - Part 1: Core candidate Standard.' + contact: + name: Pekka Latvala + email: pekka.latvala@nls.fi + license: + name: OGC License + x-logo: + url: 'https://www.ogc.org/pub/www/files/OGC_Logo_2D_Blue_x_0_0.png' + version: 1.0.0-draft20240927 +paths: + /: + get: + summary: Landing page of the OGC API - Joins + description: 'The landing page provides links to the API definition, the conformance + statements, the feature collections and to the created joins. The landing + page conforms to OGC API - Common - Part 1: Core' + operationId: landingPage + responses: + 200: + description: Links to the API definition, the conformance statements, the + feature collections and to the created joins. + content: + application/json: + schema: + $ref: '#/components/schemas/LandingPageResponseObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /conformance: + get: + summary: Declaration of conformance classes of OGC API - Joins implementation + description: 'Conformance classes of OGC API - Joins implementation. The response + conforms OGC API - Common - Part 1: Core.' + operationId: conformance + responses: + 200: + description: List of the conformance lasses that the API conforms to. + content: + application/json: + schema: + $ref: '#/components/schemas/ConformanceResponseObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /collections: + get: + summary: Get list of all available collections. + description: Get a list of all available collections. + operationId: collections + parameters: + - name: bbox + in: query + description: Filtes collections by bbox + required: false + schema: + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + style: form + explode: false + - name: datetime + in: query + description: Filter collections by datetime + required: false + schema: + type: string + style: form + explode: false + - name: limit + in: query + description: Limit the amount of returned results + required: false + schema: + type: integer + minimum: 1 + maximum: 10000 + default: 10 + style: form + explode: false + responses: + 200: + description: A list of available collections + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionsResponseObject' + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Collections not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /collections/{collectionId}: + get: + summary: Get metadata of a specific collection + description: Get metadata of a specific collection + operationId: collectionId + parameters: + - name: collectionId + in: path + required: true + schema: + type: string + responses: + 200: + description: Metadata on a specific collection + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionObject' + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Collection not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /collections/{collectionId}/keys: + get: + summary: Get key fields of specific collection + description: Get key fields of specific collection + operationId: getCollectionKeys + parameters: + - name: collectionId + in: path + required: true + schema: + type: string + responses: + 200: + description: Key fields of a specific collection + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionKeysResponseObject' + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Spatial dataset keys not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /collections/{collectionId}/keys/{keyFieldId}: + get: + summary: Get key values from a specific collection key field. + description: Get key values of a specific collection key field. + operationId: getCollectionKeyFieldKeyValues + parameters: + - name: collectionId + in: path + required: true + schema: + type: string + - name: keyFieldId + in: path + required: true + schema: + type: string + - name: key + in: query + description: Filters by specific key value + schema: + type: string + - name: limit + in: query + description: Limit the amount of returned results + required: false + schema: + type: integer + minimum: 1 + maximum: 10000 + default: 10 + style: form + explode: false + responses: + 200: + description: Key values of a specific key field of a collection. + content: + application/json: + schema: + $ref: '#/components/schemas/CollectionKeysKeyFieldResponseObject' + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Collection key field values not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /joins: + get: + summary: Get list of all available joins. + description: Get list of all available joins. + operationId: getAllJoins + parameters: + - name: limit + in: query + description: Limit the amount of returned results + required: false + schema: + type: integer + minimum: 1 + maximum: 10000 + default: 10 + style: form + explode: false + - name: datetime + in: query + description: Filter collections by datetime + required: false + schema: + type: string + style: form + explode: false + responses: + 200: + description: A list of available joins + content: + application/json: + schema: + $ref: '#/components/schemas/JoinsResponseObject' + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Joins not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + post: + summary: Joins data from an input file with a collection. + description: Joins data from an input file with a collection. + operationId: joinData + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + collection-id: + type: string + collection-key: + type: string + right-dataset-format: + type: string + enum: + - http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input/csv + right-dataset-file: + $ref: '#/components/schemas/FormDataContentDisposition' + right-dataset-url: + type: string + right-dataset-key: + type: string + right-dataset-data-value-list: + type: string + csv-file-delimiter: + type: string + csv-file-header-row-number: + type: integer + default: 1 + csv-file-data-start-row-number: + type: integer + default: 2 + output-formats: + type: string + default: http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output/geojson + enum: + - http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output/geojson + - http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/output/geojson-direct + include-join-metadata: + type: string + default: "false" + enum: + - "true" + - "false" + responses: + 200: + description: Joined dataset that is returned directly in the GeoJSON format + content: + application/geo+json: {} + 201: + description: Creates a join resource + content: + application/json: + schema: + $ref: '#/components/schemas/JoinResponseObject' + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Spatial dataset not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /joins/{joinId}: + get: + summary: Get metadata of a specific join + description: Get metadata of a specific join + operationId: getJoinId + parameters: + - name: joinId + in: path + required: true + schema: + type: string + responses: + 200: + description: Metadata on a specific join + content: + application/json: + schema: + $ref: '#/components/schemas/JoinResponseObject' + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Join not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + delete: + summary: Deletes a specific join + description: Deletes a specific join + operationId: deleteJoin + parameters: + - name: joinId + in: path + required: true + schema: + type: string + responses: + 204: + description: Join deleted + 400: + description: Bad request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 404: + description: Join not found + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + /filejoin: + post: + summary: Join data between two input files + description: Join data between two input files + operationId: filejoin + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + left-dataset-format: + type: string + enum: + - http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input/geojson + left-dataset-file: + $ref: '#/components/schemas/FormDataContentDisposition' + left-dataset-url: + type: string + left-dataset-key: + type: string + right-dataset-format: + type: string + enum: + - http://www.opengis.net/spec/ogcapi-joins-1/1.0/conf/input/csv + right-dataset-file: + $ref: '#/components/schemas/FormDataContentDisposition' + right-dataset-url: + type: string + right-dataset-key: + type: string + right-dataset-data-value-list: + type: string + csv-file-delimiter: + type: string + csv-file-header-row-number: + type: integer + default: 1 + csv-file-data-start-row-number: + type: integer + default: 2 + responses: + 200: + description: Response of the join operation + content: + application/geo+json: {} + 400: + description: Bad Request + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' + 500: + description: A server error occurred + content: + application/json: + schema: + $ref: '#/components/schemas/ExceptionObject' +components: + schemas: + CollectionObject: + required: + - id + - links + type: object + properties: + attribution: + type: string + crs: + type: array + items: + type: string + default: + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 + extent: + $ref: '#/components/schemas/ExtentObject' + description: + type: string + id: + type: string + itemType: + type: string + links: + type: array + items: + $ref: '#/components/schemas/Link' + title: + type: string + KeyObject: + required: + - key + type: object + properties: + key: + type: string + title: + type: string + ConformanceResponseObject: + required: + - conformsTo + type: object + properties: + conformsTo: + type: array + items: + type: string + SpatialExtentObject: + type: object + properties: + bbox: + type: array + minItems: 1 + items: + type: array + oneOf: + - minItems: 4 + maxItems: 4 + - minItems: 6 + maxItems: 6 + items: + type: number + crs: + type: string + default: http://www.opengis.net/def/crs/OGC/1.3/CRS84 + enum: + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 + CollectionKeysKeyFieldResponseObject: + required: + - keys + - links + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + keys: + type: array + items: + $ref: '#/components/schemas/KeyObject' + numberMatched: + type: integer + numberReturned: + type: integer + JoinsResponseObject: + required: + - joins + - links + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + joins: + type: array + items: + $ref: '#/components/schemas/JoinsObject' + numberMatched: + type: integer + numberReturned: + type: integer + timeStamp: + type: string + format: date-time + JoinResponseObject: + required: + - join + - links + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + join: + $ref: '#/components/schemas/JoinObject' + JoinsObject: + required: + - id + - links + - timeStamp + type: object + properties: + id: + type: string + timeStamp: + type: string + format: date-time + links: + type: array + items: + $ref: '#/components/schemas/Link' + JoinInputsObject: + required: + - attributeDataset + - collection + type: object + properties: + attributeDataset: + type: string + collection: + type: array + items: + $ref: '#/components/schemas/Link' + CollectionsResponseObject: + required: + - collections + - links + type: object + properties: + collections: + type: array + items: + $ref: '#/components/schemas/CollectionObject' + links: + type: array + items: + $ref: '#/components/schemas/Link' + numberMatched: + type: integer + minimum: 0 + numberReturned: + type: integer + minimum: 0 + timeStamp: + type: string + format: date-time + CollectionKeysObject: + required: + - id + - isDefault + - links + type: object + properties: + isDefault: + type: boolean + language: + type: string + id: + type: string + links: + type: array + items: + $ref: '#/components/schemas/Link' + ExceptionObject: + required: + - type + type: object + properties: + type: + type: string + title: + type: string + status: + type: integer + detail: + type: string + instance: + type: string + TemporalExtentObject: + type: object + properties: + interval: + type: array + minItems: 1 + items: + type: array + minItems: 2 + maxItems: 2 + items: + type: string + format: date-time + nullable: true + trs: + type: string + default: http://www.opengis.net/def/uom/ISO-8601/0/Gregorian + enum: + - http://www.opengis.net/def/uom/ISO-8601/0/Gregorian + CollectionKeysResponseObject: + required: + - keys + - links + type: object + properties: + links: + type: array + items: + $ref: '#/components/schemas/Link' + keys: + type: array + items: + $ref: '#/components/schemas/CollectionKeysObject' + FormDataContentDisposition: + type: object + properties: + type: + type: string + parameters: + type: object + additionalProperties: + type: string + fileName: + type: string + creationDate: + type: string + format: date-time + modificationDate: + type: string + format: date-time + readDate: + type: string + format: date-time + size: + type: integer + format: int64 + name: + type: string + JoinInformationObject: + type: object + properties: + numberOfMatchedCollectionKeys: + type: integer + numberOfUnmatchedCollectionKeys: + type: integer + numberOfAdditionalAttributeKeys: + type: integer + matchedCollectionKeys: + type: array + items: + type: string + unmatchedCollectionKeys: + type: array + items: + type: string + additionalAttributeKeys: + type: array + items: + type: string + duplicateAttributeKeys: + type: array + items: + type: string + numberOfDuplicateAttributeKeys: + type: integer + LandingPageResponseObject: + required: + - links + type: object + properties: + title: + type: string + description: + type: string + attribution: + type: string + links: + type: array + items: + $ref: '#/components/schemas/Link' + JoinObject: + required: + - id + - inputs + - outputs + - timeStamp + type: object + properties: + id: + type: string + timeStamp: + type: string + format: date-time + inputs: + $ref: '#/components/schemas/JoinInputsObject' + outputs: + type: array + items: + $ref: '#/components/schemas/Link' + joinInformation: + $ref: '#/components/schemas/JoinInformationObject' + Link: + required: + - href + - rel + type: object + properties: + href: + type: string + rel: + type: string + type: + type: string + hreflang: + type: string + title: + type: string + length: + type: integer + ExtentObject: + type: object + properties: + spatial: + $ref: '#/components/schemas/SpatialExtentObject' + temporal: + $ref: '#/components/schemas/TemporalExtentObject'