From 11246851978360e5b29ee84b02dfdf88fbedca59 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Sun, 10 Nov 2024 11:15:26 -0800 Subject: [PATCH 01/21] initial draft TAP-1.1 OpenAPI spec --- openapi/openapi.yaml | 35 +++++++++++++++++ openapi/parameters/dali-maxrec.yaml | 6 +++ openapi/parameters/dali-responseformat.yaml | 5 +++ openapi/parameters/tap-format.yaml | 5 +++ openapi/parameters/tap-lang.yaml | 6 +++ openapi/parameters/tap-params.yaml | 39 +++++++++++++++++++ openapi/parameters/tap-query.yaml | 6 +++ openapi/parameters/tap-upload.yaml | 5 +++ openapi/tap-async.yaml | 28 ++++++++++++++ openapi/tap-load.yaml | 39 +++++++++++++++++++ openapi/tap-responses.yaml | 7 ++++ openapi/tap-sync.yaml | 43 +++++++++++++++++++++ 12 files changed, 224 insertions(+) create mode 100644 openapi/openapi.yaml create mode 100644 openapi/parameters/dali-maxrec.yaml create mode 100644 openapi/parameters/dali-responseformat.yaml create mode 100644 openapi/parameters/tap-format.yaml create mode 100644 openapi/parameters/tap-lang.yaml create mode 100644 openapi/parameters/tap-params.yaml create mode 100644 openapi/parameters/tap-query.yaml create mode 100644 openapi/parameters/tap-upload.yaml create mode 100644 openapi/tap-async.yaml create mode 100644 openapi/tap-load.yaml create mode 100644 openapi/tap-responses.yaml create mode 100644 openapi/tap-sync.yaml diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml new file mode 100644 index 0000000..9342b7b --- /dev/null +++ b/openapi/openapi.yaml @@ -0,0 +1,35 @@ +openapi: 3.1.0 +info: + title: TAP service endpoints + version: "1.1" + description: This is more or less the current TAP-1.1 standard. +servers: +- url: /example +paths: +# notes: the tap openapi components are included here; +# the uws- and vosi- components are not included here and would have to +# use the $ref: {URL} style or be pulled in when building the complete +# stand-alone spec/document structure (TBD) + /sync: + $ref: ./tap-sync.yaml + + /async: + $ref: ./tap-async.yaml + /async/{jobID}: + $ref: ./include/UWS/uws-job.yaml + #$ref: https://ivoa.net/std/UWS/uws-job.yaml + ## TODO: more resources under /async/{jobID} here... + + /tables: + $ref: ./include/VOSI/vosi-tableset.yaml + #$ref: https://ivoa.net/std/VOSI/vosi-tableset.yaml + /tables/{name}: + $ref: ./include/VOSI/vosi-table.yaml + #$ref: https://ivoa.net/std/VOSI/vosi-table.yaml + + /availability: + $ref: ./include/VOSI/vosi-availability.yaml + #$ref: https://ivoa.net/std/VOSI/vosi-availability.yaml + /capabilities: + $ref: ./include/VOSI/vosi-capabilities.yaml + #$ref: https://ivoa.net/std/VOSI/vosi-capabilities.yaml diff --git a/openapi/parameters/dali-maxrec.yaml b/openapi/parameters/dali-maxrec.yaml new file mode 100644 index 0000000..9260433 --- /dev/null +++ b/openapi/parameters/dali-maxrec.yaml @@ -0,0 +1,6 @@ +name: MAXREC +in: query +description: request a specific limit on number of rows to return +schema: + type: integer + format: int64 diff --git a/openapi/parameters/dali-responseformat.yaml b/openapi/parameters/dali-responseformat.yaml new file mode 100644 index 0000000..202eee4 --- /dev/null +++ b/openapi/parameters/dali-responseformat.yaml @@ -0,0 +1,5 @@ +name: RESPONSEFORMAT +in: query +description: select output table format +schema: + type: string diff --git a/openapi/parameters/tap-format.yaml b/openapi/parameters/tap-format.yaml new file mode 100644 index 0000000..40c253b --- /dev/null +++ b/openapi/parameters/tap-format.yaml @@ -0,0 +1,5 @@ +name: FORMAT +in: query +description: "supported for backwards compatibility to 1.0 (see: RESPONSEFORMAT)" +schema: + type: string diff --git a/openapi/parameters/tap-lang.yaml b/openapi/parameters/tap-lang.yaml new file mode 100644 index 0000000..c432ae7 --- /dev/null +++ b/openapi/parameters/tap-lang.yaml @@ -0,0 +1,6 @@ +name: LANG +in: query +description: specify the query language used in the QUERY parameter +required: true +schema: + type: string diff --git a/openapi/parameters/tap-params.yaml b/openapi/parameters/tap-params.yaml new file mode 100644 index 0000000..6ab3791 --- /dev/null +++ b/openapi/parameters/tap-params.yaml @@ -0,0 +1,39 @@ + LANG: + name: LANG + in: query + description: specify the query language used in the QUERY parameter + required: true + schema: + type: string + QUERY: + name: QUERY + in: query + description: specify the query + required: true + schema: + type: string + FORMAT: + name: FORMAT + in: query + description: "supported for backwards compatibility to 1.0 (see: RESPONSEFORMAT)" + schema: + type: string + RESPONSEFORMAT: + name: RESPONSEFORMAT + in: query + description: select output table format + schema: + type: string + MAXREC: + name: MAXREC + in: query + description: request a specific limit on number of rows to return + schema: + type: integer + format: int64 + UPLOAD: + name: UPLOAD + in: query + description: specify name,location pair for a table to be uploaded and used in the query + schema: + type: string diff --git a/openapi/parameters/tap-query.yaml b/openapi/parameters/tap-query.yaml new file mode 100644 index 0000000..92e9c20 --- /dev/null +++ b/openapi/parameters/tap-query.yaml @@ -0,0 +1,6 @@ +name: QUERY +in: query +description: specify the query +required: true +schema: + type: string diff --git a/openapi/parameters/tap-upload.yaml b/openapi/parameters/tap-upload.yaml new file mode 100644 index 0000000..27302d6 --- /dev/null +++ b/openapi/parameters/tap-upload.yaml @@ -0,0 +1,5 @@ +name: UPLOAD +in: query +description: specify name,location pair for a table to be uploaded and used in the query +schema: + type: string diff --git a/openapi/tap-async.yaml b/openapi/tap-async.yaml new file mode 100644 index 0000000..473631d --- /dev/null +++ b/openapi/tap-async.yaml @@ -0,0 +1,28 @@ +get: + summary: UWS 1.1 + description: async job listing + parameters: + responses: + 200: + $ref: ./include/UWS/uws-responses.yaml#/job-listing + 401: + $ref: ./include/VOSI/std-responses.yaml#/not-authenticated + 403: + $ref: ./include/VOSI/std-responses.yaml#/permission-denied +post: + summary: TAP-async 1.1 + description: TAP asynchronous query endpoint (create UWS Job) + parameters: + - $ref: ./parameters/tap-lang.yaml + - $ref: ./parameters/tap-query.yaml + - $ref: ./parameters/tap-upload.yaml + - $ref: ./parameters/tap-format.yaml + - $ref: ./parameters/dali-maxrec.yaml + - $ref: ./parameters/dali-responseformat.yaml + responses: + 303: + $ref: ./include/UWS/uws-responses.yaml#/created + 401: + $ref: ./include/VOSI/std-responses.yaml#/not-authenticated + 403: + $ref: ./include/VOSI/std-responses.yaml#/permission-denied diff --git a/openapi/tap-load.yaml b/openapi/tap-load.yaml new file mode 100644 index 0000000..710fa86 --- /dev/null +++ b/openapi/tap-load.yaml @@ -0,0 +1,39 @@ +post: + summary: bulk load or row data + description: TAP synchronous bulk load endpoint + parameters: + - name: name + in: path + description: a single table name as provided in tap_schema + required: true + schema: + type: string + requestBody: + required: true + $ref: '#/components/schemas/tableRows' + + responses: + "200": + description: | + rows loaded; + TBD: both partial or complete are possible + +components: + schemas: + tableRows: + content: + text/tab-separated-values: + schema: + type: string + text/csv: + schema: + type: string + application/fits: + application/x-votable+xml: + schema: + type: object + xml: + name: VOTABLE + namespace: http://www.ivoa.net/xml/VOTable/v1.3 + + \ No newline at end of file diff --git a/openapi/tap-responses.yaml b/openapi/tap-responses.yaml new file mode 100644 index 0000000..cc11415 --- /dev/null +++ b/openapi/tap-responses.yaml @@ -0,0 +1,7 @@ +# UWS create job response +invalid-query: + description: the requested TAP query job is invalid; this is usually the ADQL query + content: + text/plain: + schema: + type: string diff --git a/openapi/tap-sync.yaml b/openapi/tap-sync.yaml new file mode 100644 index 0000000..037382b --- /dev/null +++ b/openapi/tap-sync.yaml @@ -0,0 +1,43 @@ +get: + summary: TAP-sync 1.1 + description: TAP synchronous query endpoint + parameters: + - $ref: ./parameters/tap-lang.yaml + - $ref: ./parameters/tap-query.yaml + - $ref: ./parameters/tap-upload.yaml + - $ref: ./parameters/tap-format.yaml + - $ref: ./parameters/dali-maxrec.yaml + - $ref: ./parameters/dali-responseformat.yaml + responses: + 200: + description: successful response + 303: + description: redirect to the job result (optional) + 400: + $ref: ./tap-responses.yaml#/invalid-query + 401: + $ref: ./include/VOSI/std-responses.yaml#/not-authenticated + 403: + $ref: ./include/VOSI/std-responses.yaml#/permission-denied +post: + summary: TAP-sync 1.1 + description: TAP synchronous query endpoint + parameters: + - $ref: ./parameters/tap-lang.yaml + - $ref: ./parameters/tap-query.yaml + - $ref: ./parameters/tap-upload.yaml + - $ref: ./parameters/tap-format.yaml + - $ref: ./parameters/dali-maxrec.yaml + - $ref: ./parameters/dali-responseformat.yaml + responses: + 200: + description: successful response + 303: + description: redirect to the job result (optional) + 400: + $ref: ./tap-responses.yaml#/invalid-query + 401: + $ref: ./include/VOSI/std-responses.yaml#/not-authenticated + 403: + $ref: ./include/VOSI/std-responses.yaml#/permission-denied + From 043fe3790436cf9a60aa854ab7eaea87a7c9d895 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Sun, 10 Nov 2024 11:21:26 -0800 Subject: [PATCH 02/21] remove cruft --- openapi/parameters/tap-params.yaml | 39 ------------------------------ 1 file changed, 39 deletions(-) delete mode 100644 openapi/parameters/tap-params.yaml diff --git a/openapi/parameters/tap-params.yaml b/openapi/parameters/tap-params.yaml deleted file mode 100644 index 6ab3791..0000000 --- a/openapi/parameters/tap-params.yaml +++ /dev/null @@ -1,39 +0,0 @@ - LANG: - name: LANG - in: query - description: specify the query language used in the QUERY parameter - required: true - schema: - type: string - QUERY: - name: QUERY - in: query - description: specify the query - required: true - schema: - type: string - FORMAT: - name: FORMAT - in: query - description: "supported for backwards compatibility to 1.0 (see: RESPONSEFORMAT)" - schema: - type: string - RESPONSEFORMAT: - name: RESPONSEFORMAT - in: query - description: select output table format - schema: - type: string - MAXREC: - name: MAXREC - in: query - description: request a specific limit on number of rows to return - schema: - type: integer - format: int64 - UPLOAD: - name: UPLOAD - in: query - description: specify name,location pair for a table to be uploaded and used in the query - schema: - type: string From 2999b2872bcbad4d691e5d7a61752b238c6f6a09 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Sun, 10 Nov 2024 11:22:46 -0800 Subject: [PATCH 03/21] remove youcat bulk load spec --- openapi/tap-load.yaml | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 openapi/tap-load.yaml diff --git a/openapi/tap-load.yaml b/openapi/tap-load.yaml deleted file mode 100644 index 710fa86..0000000 --- a/openapi/tap-load.yaml +++ /dev/null @@ -1,39 +0,0 @@ -post: - summary: bulk load or row data - description: TAP synchronous bulk load endpoint - parameters: - - name: name - in: path - description: a single table name as provided in tap_schema - required: true - schema: - type: string - requestBody: - required: true - $ref: '#/components/schemas/tableRows' - - responses: - "200": - description: | - rows loaded; - TBD: both partial or complete are possible - -components: - schemas: - tableRows: - content: - text/tab-separated-values: - schema: - type: string - text/csv: - schema: - type: string - application/fits: - application/x-votable+xml: - schema: - type: object - xml: - name: VOTABLE - namespace: http://www.ivoa.net/xml/VOTable/v1.3 - - \ No newline at end of file From 0cc0c35d0536e0fdb354ac7c78090272ccce310b Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Wed, 13 Nov 2024 23:52:10 -0800 Subject: [PATCH 04/21] add comments to tap-async --- openapi/tap-async.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/openapi/tap-async.yaml b/openapi/tap-async.yaml index 473631d..11e8887 100644 --- a/openapi/tap-async.yaml +++ b/openapi/tap-async.yaml @@ -2,6 +2,7 @@ get: summary: UWS 1.1 description: async job listing parameters: + # UWS job listing control specified here responses: 200: $ref: ./include/UWS/uws-responses.yaml#/job-listing @@ -13,6 +14,7 @@ post: summary: TAP-async 1.1 description: TAP asynchronous query endpoint (create UWS Job) parameters: + # TAP job definition specified here - $ref: ./parameters/tap-lang.yaml - $ref: ./parameters/tap-query.yaml - $ref: ./parameters/tap-upload.yaml @@ -21,6 +23,7 @@ post: - $ref: ./parameters/dali-responseformat.yaml responses: 303: + # UWS respoonse code $ref: ./include/UWS/uws-responses.yaml#/created 401: $ref: ./include/VOSI/std-responses.yaml#/not-authenticated From ed1ac6c95a7b30c26d8071b7731174c79e43a60a Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Thu, 14 Nov 2024 00:02:54 -0800 Subject: [PATCH 05/21] rename tap-upload param to dali-upload --- openapi/parameters/dali-upload.yaml | 5 +++++ openapi/parameters/tap-upload.yaml | 5 ----- openapi/tap-async.yaml | 2 +- openapi/tap-sync.yaml | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 openapi/parameters/dali-upload.yaml delete mode 100644 openapi/parameters/tap-upload.yaml diff --git a/openapi/parameters/dali-upload.yaml b/openapi/parameters/dali-upload.yaml new file mode 100644 index 0000000..ba5cb20 --- /dev/null +++ b/openapi/parameters/dali-upload.yaml @@ -0,0 +1,5 @@ +name: UPLOAD +in: query +description: specify name,location pair for a resource to be uploaded and used in the query +schema: + type: string diff --git a/openapi/parameters/tap-upload.yaml b/openapi/parameters/tap-upload.yaml deleted file mode 100644 index 27302d6..0000000 --- a/openapi/parameters/tap-upload.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: UPLOAD -in: query -description: specify name,location pair for a table to be uploaded and used in the query -schema: - type: string diff --git a/openapi/tap-async.yaml b/openapi/tap-async.yaml index 11e8887..e3b165c 100644 --- a/openapi/tap-async.yaml +++ b/openapi/tap-async.yaml @@ -17,10 +17,10 @@ post: # TAP job definition specified here - $ref: ./parameters/tap-lang.yaml - $ref: ./parameters/tap-query.yaml - - $ref: ./parameters/tap-upload.yaml - $ref: ./parameters/tap-format.yaml - $ref: ./parameters/dali-maxrec.yaml - $ref: ./parameters/dali-responseformat.yaml + - $ref: ./parameters/dali-upload.yaml responses: 303: # UWS respoonse code diff --git a/openapi/tap-sync.yaml b/openapi/tap-sync.yaml index 037382b..8875775 100644 --- a/openapi/tap-sync.yaml +++ b/openapi/tap-sync.yaml @@ -4,10 +4,10 @@ get: parameters: - $ref: ./parameters/tap-lang.yaml - $ref: ./parameters/tap-query.yaml - - $ref: ./parameters/tap-upload.yaml - $ref: ./parameters/tap-format.yaml - $ref: ./parameters/dali-maxrec.yaml - $ref: ./parameters/dali-responseformat.yaml + - $ref: ./parameters/dali-upload.yaml responses: 200: description: successful response @@ -25,10 +25,10 @@ post: parameters: - $ref: ./parameters/tap-lang.yaml - $ref: ./parameters/tap-query.yaml - - $ref: ./parameters/tap-upload.yaml - $ref: ./parameters/tap-format.yaml - $ref: ./parameters/dali-maxrec.yaml - $ref: ./parameters/dali-responseformat.yaml + - $ref: ./parameters/dali-upload.yaml responses: 200: description: successful response From 480eb6eaa4eb7e555bd09c4a224f3d4ffbf5d102 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Fri, 9 May 2025 13:29:25 -0700 Subject: [PATCH 06/21] OpenAPI components for TAP endpoints and parameters --- openapi/tap-async.yaml | 34 ++++++++++++++++++++++++ openapi/tap-format.yaml | 5 ++++ openapi/tap-lang.yaml | 6 +++++ openapi/tap-load.yaml | 44 +++++++++++++++++++++++++++++++ openapi/tap-query.yaml | 6 +++++ openapi/tap-responses.yaml | 7 +++++ openapi/tap-sync.yaml | 49 +++++++++++++++++++++++++++++++++++ openapi/tap-table-update.yaml | 46 ++++++++++++++++++++++++++++++++ openapi/tap-upload.yaml | 5 ++++ 9 files changed, 202 insertions(+) create mode 100644 openapi/tap-async.yaml create mode 100644 openapi/tap-format.yaml create mode 100644 openapi/tap-lang.yaml create mode 100644 openapi/tap-load.yaml create mode 100644 openapi/tap-query.yaml create mode 100644 openapi/tap-responses.yaml create mode 100644 openapi/tap-sync.yaml create mode 100644 openapi/tap-table-update.yaml create mode 100644 openapi/tap-upload.yaml diff --git a/openapi/tap-async.yaml b/openapi/tap-async.yaml new file mode 100644 index 0000000..be6b3a9 --- /dev/null +++ b/openapi/tap-async.yaml @@ -0,0 +1,34 @@ +get: + operationId: query-job-list + tags: + - TAP Query + summary: list async queries + description: TAP asynchronous query endpoint (list UWS Jobs) + parameters: + responses: + 200: + $ref: ../uws/uws-responses.yaml#/job-listing + 401: + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + 403: + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied +post: + operationId: query-job-create + tags: + - TAP Query + summary: create async query + description: TAP asynchronous query endpoint (create UWS Job) + parameters: + - $ref: ./tap-lang.yaml + - $ref: ./tap-query.yaml + - $ref: ./tap-upload.yaml + - $ref: ./tap-format.yaml + - $ref: ../dali/dali-maxrec.yaml + - $ref: ../dali/dali-responseformat.yaml + responses: + 303: + $ref: ../uws/uws-responses.yaml#/created + 401: + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + 403: + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied diff --git a/openapi/tap-format.yaml b/openapi/tap-format.yaml new file mode 100644 index 0000000..40c253b --- /dev/null +++ b/openapi/tap-format.yaml @@ -0,0 +1,5 @@ +name: FORMAT +in: query +description: "supported for backwards compatibility to 1.0 (see: RESPONSEFORMAT)" +schema: + type: string diff --git a/openapi/tap-lang.yaml b/openapi/tap-lang.yaml new file mode 100644 index 0000000..c432ae7 --- /dev/null +++ b/openapi/tap-lang.yaml @@ -0,0 +1,6 @@ +name: LANG +in: query +description: specify the query language used in the QUERY parameter +required: true +schema: + type: string diff --git a/openapi/tap-load.yaml b/openapi/tap-load.yaml new file mode 100644 index 0000000..4db5104 --- /dev/null +++ b/openapi/tap-load.yaml @@ -0,0 +1,44 @@ +post: + operationId: tap-bulk-load + summary: bulk load or row data + description: TAP synchronous bulk load endpoint + parameters: + - name: name + in: path + description: a single table name as provided in tap_schema + required: true + schema: + type: string + requestBody: + required: true + $ref: '#/components/schemas/tableRows' + + responses: + 200: + description: | + rows loaded; + TBD: both partial or complete are possible + 401: + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + 403: + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied + +components: + schemas: + tableRows: + content: + text/tab-separated-values: + schema: + type: string + text/csv: + schema: + type: string + application/fits: + application/x-votable+xml: + schema: + type: object + xml: + name: VOTABLE + namespace: http://www.ivoa.net/xml/VOTable/v1.3 + + diff --git a/openapi/tap-query.yaml b/openapi/tap-query.yaml new file mode 100644 index 0000000..92e9c20 --- /dev/null +++ b/openapi/tap-query.yaml @@ -0,0 +1,6 @@ +name: QUERY +in: query +description: specify the query +required: true +schema: + type: string diff --git a/openapi/tap-responses.yaml b/openapi/tap-responses.yaml new file mode 100644 index 0000000..cc11415 --- /dev/null +++ b/openapi/tap-responses.yaml @@ -0,0 +1,7 @@ +# UWS create job response +invalid-query: + description: the requested TAP query job is invalid; this is usually the ADQL query + content: + text/plain: + schema: + type: string diff --git a/openapi/tap-sync.yaml b/openapi/tap-sync.yaml new file mode 100644 index 0000000..1096760 --- /dev/null +++ b/openapi/tap-sync.yaml @@ -0,0 +1,49 @@ +get: + operationId: sync-query-job-get + tags: + - TAP Query + summary: execute sync query + description: TAP synchronous query endpoint + parameters: + - $ref: ./tap-lang.yaml + - $ref: ./tap-query.yaml + - $ref: ./tap-upload.yaml + - $ref: ./tap-format.yaml + - $ref: ../dali/dali-maxrec.yaml + - $ref: ../dali/dali-responseformat.yaml + responses: + 200: + description: successful response + 303: + description: redirect to the job result (optional) + 400: + $ref: ./tap-responses.yaml#/invalid-query + 401: + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + 403: + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied +post: + operationId: sync-query-job-create + tags: + - TAP Query + summary: execute sync query + description: TAP synchronous query endpoint + parameters: + - $ref: ./tap-lang.yaml + - $ref: ./tap-query.yaml + - $ref: ./tap-upload.yaml + - $ref: ./tap-format.yaml + - $ref: ../dali/dali-maxrec.yaml + - $ref: ../dali/dali-responseformat.yaml + responses: + 200: + description: successful response + 303: + description: redirect to the job result (optional) + 400: + $ref: ./tap-responses.yaml#/invalid-query + 401: + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + 403: + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied + diff --git a/openapi/tap-table-update.yaml b/openapi/tap-table-update.yaml new file mode 100644 index 0000000..960aba3 --- /dev/null +++ b/openapi/tap-table-update.yaml @@ -0,0 +1,46 @@ +get: + operationId: table-update-job-list + tags: + - Table Update Operations + summary: list async table update jobs + description: async job listing + parameters: + responses: + 200: + $ref: ../uws/uws-responses.yaml#/job-listing + 401: + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + 403: + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied +post: + operationId: table-update-job-create + tags: + - Table Update Operations + summary: create async table update job + description: TAP asynchronous table update (create UWS Job); can only specify one operation + parameters: + - name: TABLE + in: query + description: a single table name as provided in tap_schema + required: true + schema: + type: string + - name: INDEX + in: query + description: create index operation; value is a column name in the table + required: false + schema: + type: string + - name: UNIQUE + in: query + description: qualifier for INDEX to create a unique index + required: false + schema: + type: boolean + responses: + 303: + $ref: ../uws/uws-responses.yaml#/created + 401: + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + 403: + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied diff --git a/openapi/tap-upload.yaml b/openapi/tap-upload.yaml new file mode 100644 index 0000000..27302d6 --- /dev/null +++ b/openapi/tap-upload.yaml @@ -0,0 +1,5 @@ +name: UPLOAD +in: query +description: specify name,location pair for a table to be uploaded and used in the query +schema: + type: string From cf89ce376fed64b7657f868f3fa0d508ffeeb660 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Tue, 13 May 2025 10:33:10 -0700 Subject: [PATCH 07/21] moved upload param component to DALI --- openapi/tap-async.yaml | 2 +- openapi/tap-sync.yaml | 4 ++-- openapi/tap-upload.yaml | 5 ----- 3 files changed, 3 insertions(+), 8 deletions(-) delete mode 100644 openapi/tap-upload.yaml diff --git a/openapi/tap-async.yaml b/openapi/tap-async.yaml index be6b3a9..7659c9e 100644 --- a/openapi/tap-async.yaml +++ b/openapi/tap-async.yaml @@ -21,10 +21,10 @@ post: parameters: - $ref: ./tap-lang.yaml - $ref: ./tap-query.yaml - - $ref: ./tap-upload.yaml - $ref: ./tap-format.yaml - $ref: ../dali/dali-maxrec.yaml - $ref: ../dali/dali-responseformat.yaml + - $ref: ../dali/dali-upload.yaml responses: 303: $ref: ../uws/uws-responses.yaml#/created diff --git a/openapi/tap-sync.yaml b/openapi/tap-sync.yaml index 1096760..0099cb0 100644 --- a/openapi/tap-sync.yaml +++ b/openapi/tap-sync.yaml @@ -7,10 +7,10 @@ get: parameters: - $ref: ./tap-lang.yaml - $ref: ./tap-query.yaml - - $ref: ./tap-upload.yaml - $ref: ./tap-format.yaml - $ref: ../dali/dali-maxrec.yaml - $ref: ../dali/dali-responseformat.yaml + - $ref: ../dali/dali-upload.yaml responses: 200: description: successful response @@ -31,10 +31,10 @@ post: parameters: - $ref: ./tap-lang.yaml - $ref: ./tap-query.yaml - - $ref: ./tap-upload.yaml - $ref: ./tap-format.yaml - $ref: ../dali/dali-maxrec.yaml - $ref: ../dali/dali-responseformat.yaml + - $ref: ../dali/dali-upload.yaml responses: 200: description: successful response diff --git a/openapi/tap-upload.yaml b/openapi/tap-upload.yaml deleted file mode 100644 index 27302d6..0000000 --- a/openapi/tap-upload.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: UPLOAD -in: query -description: specify name,location pair for a table to be uploaded and used in the query -schema: - type: string From 34dc85af09c787c265c4ed1325abb39549226183 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Fri, 16 May 2025 12:24:39 -0700 Subject: [PATCH 08/21] move table-update out move root openapi.yaml out of openapi components dir --- openapi.yaml | 31 +++++++++++++++++++++++ openapi/tap-table-update.yaml | 46 ----------------------------------- 2 files changed, 31 insertions(+), 46 deletions(-) create mode 100644 openapi.yaml delete mode 100644 openapi/tap-table-update.yaml diff --git a/openapi.yaml b/openapi.yaml new file mode 100644 index 0000000..5f366cd --- /dev/null +++ b/openapi.yaml @@ -0,0 +1,31 @@ +openapi: 3.1.0 +info: + title: prototype TAP-1.2 with user managed tables + #version: "1.2" + description: | + This is the WD-TAP-1.2 API specification with components imported from + VOSI, UWS, and DALI. +servers: +- url: /tapBase + +## any of the $ref values below can be URLs to external (standard) OpenAPI components + +paths: + /capabilities: + $ref: ./openapi/vosi/vosi-capabilities.yaml + + /sync: + $ref: ./openapi/tap/tap-sync.yaml + /async: + $ref: ./openapi/tap/tap-async.yaml + /async/{jobID}: + $ref: ./openapi/uws/uws-job.yaml + /async/{jobID}/phase: + $ref: ./openapi/uws/uws-job-phase.yaml + + /tables: + $ref: ./openapi/vosi/vosi-tableset.yaml + /tables/{name}: + $ref: ./openapi/vosi/vosi-table.yaml + + diff --git a/openapi/tap-table-update.yaml b/openapi/tap-table-update.yaml deleted file mode 100644 index 960aba3..0000000 --- a/openapi/tap-table-update.yaml +++ /dev/null @@ -1,46 +0,0 @@ -get: - operationId: table-update-job-list - tags: - - Table Update Operations - summary: list async table update jobs - description: async job listing - parameters: - responses: - 200: - $ref: ../uws/uws-responses.yaml#/job-listing - 401: - $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated - 403: - $ref: ../vosi/vosi-std-responses.yaml#/permission-denied -post: - operationId: table-update-job-create - tags: - - Table Update Operations - summary: create async table update job - description: TAP asynchronous table update (create UWS Job); can only specify one operation - parameters: - - name: TABLE - in: query - description: a single table name as provided in tap_schema - required: true - schema: - type: string - - name: INDEX - in: query - description: create index operation; value is a column name in the table - required: false - schema: - type: string - - name: UNIQUE - in: query - description: qualifier for INDEX to create a unique index - required: false - schema: - type: boolean - responses: - 303: - $ref: ../uws/uws-responses.yaml#/created - 401: - $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated - 403: - $ref: ../vosi/vosi-std-responses.yaml#/permission-denied From 67188cfd268e20852a7285eaec1eed325e28c9f2 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Fri, 16 May 2025 12:30:22 -0700 Subject: [PATCH 09/21] remove duplicate param components --- openapi/parameters/dali-maxrec.yaml | 6 ------ openapi/parameters/dali-responseformat.yaml | 5 ----- openapi/parameters/dali-upload.yaml | 5 ----- openapi/parameters/tap-format.yaml | 5 ----- openapi/parameters/tap-lang.yaml | 6 ------ openapi/parameters/tap-query.yaml | 6 ------ 6 files changed, 33 deletions(-) delete mode 100644 openapi/parameters/dali-maxrec.yaml delete mode 100644 openapi/parameters/dali-responseformat.yaml delete mode 100644 openapi/parameters/dali-upload.yaml delete mode 100644 openapi/parameters/tap-format.yaml delete mode 100644 openapi/parameters/tap-lang.yaml delete mode 100644 openapi/parameters/tap-query.yaml diff --git a/openapi/parameters/dali-maxrec.yaml b/openapi/parameters/dali-maxrec.yaml deleted file mode 100644 index 9260433..0000000 --- a/openapi/parameters/dali-maxrec.yaml +++ /dev/null @@ -1,6 +0,0 @@ -name: MAXREC -in: query -description: request a specific limit on number of rows to return -schema: - type: integer - format: int64 diff --git a/openapi/parameters/dali-responseformat.yaml b/openapi/parameters/dali-responseformat.yaml deleted file mode 100644 index 202eee4..0000000 --- a/openapi/parameters/dali-responseformat.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: RESPONSEFORMAT -in: query -description: select output table format -schema: - type: string diff --git a/openapi/parameters/dali-upload.yaml b/openapi/parameters/dali-upload.yaml deleted file mode 100644 index ba5cb20..0000000 --- a/openapi/parameters/dali-upload.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: UPLOAD -in: query -description: specify name,location pair for a resource to be uploaded and used in the query -schema: - type: string diff --git a/openapi/parameters/tap-format.yaml b/openapi/parameters/tap-format.yaml deleted file mode 100644 index 40c253b..0000000 --- a/openapi/parameters/tap-format.yaml +++ /dev/null @@ -1,5 +0,0 @@ -name: FORMAT -in: query -description: "supported for backwards compatibility to 1.0 (see: RESPONSEFORMAT)" -schema: - type: string diff --git a/openapi/parameters/tap-lang.yaml b/openapi/parameters/tap-lang.yaml deleted file mode 100644 index c432ae7..0000000 --- a/openapi/parameters/tap-lang.yaml +++ /dev/null @@ -1,6 +0,0 @@ -name: LANG -in: query -description: specify the query language used in the QUERY parameter -required: true -schema: - type: string diff --git a/openapi/parameters/tap-query.yaml b/openapi/parameters/tap-query.yaml deleted file mode 100644 index 92e9c20..0000000 --- a/openapi/parameters/tap-query.yaml +++ /dev/null @@ -1,6 +0,0 @@ -name: QUERY -in: query -description: specify the query -required: true -schema: - type: string From cd0766dfcfe804525dfef5ba2469eeea66860630 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Fri, 16 May 2025 12:31:03 -0700 Subject: [PATCH 10/21] remove duplicate openapi.yaml --- openapi/openapi.yaml | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 openapi/openapi.yaml diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml deleted file mode 100644 index 9342b7b..0000000 --- a/openapi/openapi.yaml +++ /dev/null @@ -1,35 +0,0 @@ -openapi: 3.1.0 -info: - title: TAP service endpoints - version: "1.1" - description: This is more or less the current TAP-1.1 standard. -servers: -- url: /example -paths: -# notes: the tap openapi components are included here; -# the uws- and vosi- components are not included here and would have to -# use the $ref: {URL} style or be pulled in when building the complete -# stand-alone spec/document structure (TBD) - /sync: - $ref: ./tap-sync.yaml - - /async: - $ref: ./tap-async.yaml - /async/{jobID}: - $ref: ./include/UWS/uws-job.yaml - #$ref: https://ivoa.net/std/UWS/uws-job.yaml - ## TODO: more resources under /async/{jobID} here... - - /tables: - $ref: ./include/VOSI/vosi-tableset.yaml - #$ref: https://ivoa.net/std/VOSI/vosi-tableset.yaml - /tables/{name}: - $ref: ./include/VOSI/vosi-table.yaml - #$ref: https://ivoa.net/std/VOSI/vosi-table.yaml - - /availability: - $ref: ./include/VOSI/vosi-availability.yaml - #$ref: https://ivoa.net/std/VOSI/vosi-availability.yaml - /capabilities: - $ref: ./include/VOSI/vosi-capabilities.yaml - #$ref: https://ivoa.net/std/VOSI/vosi-capabilities.yaml From 459cbf691a952a0a0ce2c7ab5b0eceae10ec56be Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Tue, 20 May 2025 14:03:39 -0700 Subject: [PATCH 11/21] added reference to vosi-table-ops.yaml --- openapi.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 5f366cd..8fe471e 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -28,4 +28,11 @@ paths: /tables/{name}: $ref: ./openapi/vosi/vosi-table.yaml +# optional endpoint: allowed to return 404 or 405 + /table-ops: + $ref: ./openapi/vosi/vosi-table-ops.yaml + /table-ops/{jobID}: + $ref: ./openapi/uws/uws-job.yaml + /table-ops/{jobID}/phase: + $ref: ./openapi/uws/uws-job-phase.yaml From 01aa54e7dbfe5ab4262fbe8be0b6d0044832b99e Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Tue, 20 May 2025 14:33:04 -0700 Subject: [PATCH 12/21] from TAP-1.2 the core API specification is provided using OpenAPI VOSI-availability removed --- Makefile | 2 +- TAP.tex | 38 +++++++++++++++++++++++++------------- sample-capability.xml | 8 -------- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/Makefile b/Makefile index 022f830..718ca0b 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ DOCNAME = TAP DOCVERSION = 1.2 # Publication date, ISO format; update manually for "releases" -DOCDATE = 2024-11-11 +DOCDATE = 2025-05-20 # What is it you're writing: NOTE, WD, PR, or REC DOCTYPE = WD diff --git a/TAP.tex b/TAP.tex index 01d4f3e..c0b6590 100644 --- a/TAP.tex +++ b/TAP.tex @@ -8,6 +8,7 @@ \lstset{flexiblecolumns=true,basicstyle=\small,tagstyle=\ttfamily, showstringspaces=False} \usepackage[utf8]{inputenc} +\usepackage{todonotes} \hyphenation{asyn-chro-n-ous-ly} @@ -151,8 +152,8 @@ \subsection{Role within the VO Architecture} Language. \item[VOSI \citep{2017ivoa.spec.0524G}] The VO Support Interfaces standard -defines endpoints for metadata discovery; for TAP, this is the tables, -capabilities, and availability endpoints. Note that while TAP 1.1 does not +defines endpoints for metadata discovery; for TAP, this is the tables and +capabilities endpoints. Note that while TAP 1.1 does not require the use of any particular minor version of the VOSI standard, the VOSI-tables resource in VOSI 1.1 provides important usability features, and implementors of TAP 1.1 are encouraged to support VOSI 1.1 or later. @@ -278,7 +279,15 @@ \section{Resources} \label{sec:resources} An implementation of a TAP service provides the following RESTful resources -under the base URL. +under the base URL. As of TAP-1.2, these endpoints are defined using OpenAPI +(in yaml syntax) and depend on OpenAPI components imported from other standards: +VOSI, UWS, and DALI. The OpenAPI specification is considered the definitive +specification of the TAP API; the text below is intended to clarify and provide +examples, but it may provide details that go beyond the OpenAPI description when +describing behaviour or content. +\todo{decide if the aggregate OpenAPI specification of TAP is static or dynamic aka +do we refer to a specific version of a component? or can services implement the latest +in some range?} \medskip \begin{inlinetable} @@ -288,7 +297,6 @@ \section{Resources} \sptablerule TAP-sync & /sync & must \\ TAP-async & /async & must \\ -VOSI-availability & service specific & must (must be anonymous) \\ VOSI-capabilities & /capabilities & must (must be anonymous) \\ VOSI-tables & /tables & should \\ DALI-examples & /examples & should \\ @@ -299,11 +307,11 @@ \section{Resources} A TAP service provides a single base URL with child resources for the various features in the table above. As required by DALI \citep{2017ivoa.spec.0517D}, all resources (including the optional VOSI-tables -resource) except the VOSI-availability must be siblings of the VOSI-capabilities resource. +resource) must be siblings of the VOSI-capabilities resource. -The fixed name resources above (async, sync, tables, and examples) are used for both anonymous and +The fixed name resources above (async, sync, capabilities, tables, and examples) are used for both anonymous and authenticated access to the service; the consequences of having a single base URL are detailed below in -section~\ref{sec:vosi-capabilities}. The VOSI-availability and VOSI-capabilities resources must allow anonymous access as they can be used by clients to determine if the service is available and which resources to use with +section~\ref{sec:vosi-capabilities}. The VOSI-capabilities resources must allow anonymous access as they can be used by clients to determine if the service is available and which resources to use with available security (authentication) methods. The web resource at the root of the tree represents the service as a whole. @@ -403,11 +411,6 @@ \subsection{TAP-async} data rows. Details on interacting with these resources are specified in the UWS standard; for examples specific to TAP see section~\ref{sec:examples} below. -\subsection{VOSI-availability} -\label{sec:vosi-availability} - -The use of the VOSI-availability resource is described in DALI. - \subsection{VOSI-capabilities} \label{sec:vosi-capabilities} @@ -460,7 +463,7 @@ \subsection{VOSI-capabilities} As a consequence of using a single base URL with fixed name child resources, all supported authentication methods must be able to co-exist on the same URL. -In the example above, the VOSI-availability and VOSI-capabilities interfaces are anonymous (no securityMethod). +In the example above, the VOSI-capabilities interface is anonymous (no securityMethod). The VOSI-tables interface is typically also anonymous-only, but in the example we show that it may also support anonymous and/or authenticated access. In general, clients that support authentication should be prepared to discover and use anonymous-only endpoints for some requests. @@ -1360,6 +1363,15 @@ \subsection{Example: DALI-examples Document} \appendix +\section{Changes from TAP-1.1 to TAP-1.2} +\begin{itemize} + +\item Core API specification is provided as using OpenAPI (yaml syntax). + +\item VOSI-availability removed. + +\end{itemize} + \section{Changes from TAP-1.0 to TAP-1.1} \subsection{General Improvements and Clarifications} diff --git a/sample-capability.xml b/sample-capability.xml index 1f32794..45f11be 100644 --- a/sample-capability.xml +++ b/sample-capability.xml @@ -27,14 +27,6 @@ - - - - https://example.net/srv/availability - - - - From fcc690253a74d1944e08116ac3a8b90ecd69dd0a Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Tue, 27 May 2025 07:24:50 -0700 Subject: [PATCH 13/21] move capabilities down for better API doc rendering --- openapi.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 8fe471e..c7cc2d3 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -10,11 +10,7 @@ servers: ## any of the $ref values below can be URLs to external (standard) OpenAPI components -paths: - /capabilities: - $ref: ./openapi/vosi/vosi-capabilities.yaml - - /sync: +paths:/sync: $ref: ./openapi/tap/tap-sync.yaml /async: $ref: ./openapi/tap/tap-async.yaml @@ -28,6 +24,9 @@ paths: /tables/{name}: $ref: ./openapi/vosi/vosi-table.yaml + /capabilities: + $ref: ./openapi/vosi/vosi-capabilities.yaml + # optional endpoint: allowed to return 404 or 405 /table-ops: $ref: ./openapi/vosi/vosi-table-ops.yaml From 4ce8e590412028b69bd2b5be4398fc024f4e6cbb Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Wed, 25 Feb 2026 16:04:06 -0800 Subject: [PATCH 14/21] add openapi tap-result, improve openapi compliance --- openapi/tap-async.yaml | 16 +++++------ openapi/tap-lang.yaml | 1 + openapi/tap-query.yaml | 1 + openapi/tap-responses.yaml | 14 ++++++++-- openapi/tap-result.yaml | 57 ++++++++++++++++++++++++++++++++++++++ openapi/tap-sync.yaml | 24 ++++++++-------- 6 files changed, 91 insertions(+), 22 deletions(-) create mode 100644 openapi/tap-result.yaml diff --git a/openapi/tap-async.yaml b/openapi/tap-async.yaml index 7659c9e..d42e0c9 100644 --- a/openapi/tap-async.yaml +++ b/openapi/tap-async.yaml @@ -2,21 +2,21 @@ get: operationId: query-job-list tags: - TAP Query - summary: list async queries + summary: list queries (UWS jobs) description: TAP asynchronous query endpoint (list UWS Jobs) parameters: responses: - 200: + '200': $ref: ../uws/uws-responses.yaml#/job-listing - 401: + '401': $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated - 403: + '403': $ref: ../vosi/vosi-std-responses.yaml#/permission-denied post: operationId: query-job-create tags: - TAP Query - summary: create async query + summary: create async query (UWS job) description: TAP asynchronous query endpoint (create UWS Job) parameters: - $ref: ./tap-lang.yaml @@ -26,9 +26,9 @@ post: - $ref: ../dali/dali-responseformat.yaml - $ref: ../dali/dali-upload.yaml responses: - 303: + '303': $ref: ../uws/uws-responses.yaml#/created - 401: + '401': $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated - 403: + '403': $ref: ../vosi/vosi-std-responses.yaml#/permission-denied diff --git a/openapi/tap-lang.yaml b/openapi/tap-lang.yaml index c432ae7..99d3bb4 100644 --- a/openapi/tap-lang.yaml +++ b/openapi/tap-lang.yaml @@ -4,3 +4,4 @@ description: specify the query language used in the QUERY parameter required: true schema: type: string + example: ADQL diff --git a/openapi/tap-query.yaml b/openapi/tap-query.yaml index 92e9c20..934213a 100644 --- a/openapi/tap-query.yaml +++ b/openapi/tap-query.yaml @@ -4,3 +4,4 @@ description: specify the query required: true schema: type: string + example: select * from tap_schema.tables diff --git a/openapi/tap-responses.yaml b/openapi/tap-responses.yaml index cc11415..14ccd46 100644 --- a/openapi/tap-responses.yaml +++ b/openapi/tap-responses.yaml @@ -2,6 +2,16 @@ invalid-query: description: the requested TAP query job is invalid; this is usually the ADQL query content: - text/plain: + application/x-votable+xml: schema: - type: string + type: object + xml: + name: VOTABLE + namespace: http://www.ivoa.net/xml/VOTable/v1.3 + example: | + + + Table 'Y' is not found in TAP schema + + diff --git a/openapi/tap-result.yaml b/openapi/tap-result.yaml new file mode 100644 index 0000000..b1cba58 --- /dev/null +++ b/openapi/tap-result.yaml @@ -0,0 +1,57 @@ +get: + operationId: tap-result + tags: + - TAP Query + summary: async query result + description: download async query result for a completed job + parameters: + - name: jobID + in: path + description: unique job identifier generated by the server + required: true + type: string + example: a1b2c3 + responses: + '200': + $ref: '#/components/schemas/queryResult' + '303': + description: redirect to the stored result (optional) + '401': + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + '403': + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied + '404': + $ref: ../vosi/vosi-std-responses.yaml#/not-found + +components: + schemas: + queryResult: + description: query result (table) + content: + application/x-votable+xml: + schema: + type: object + xml: + name: VOTABLE + namespace: http://www.ivoa.net/xml/VOTable/v1.3 + example: | + + + + + schema name for reference to tap_schema.schemas + + + lists the utypes of schemas in the tableset + + + describes schemas in the tableset + + + recommended sort order when listing schemas + + +
+
+
diff --git a/openapi/tap-sync.yaml b/openapi/tap-sync.yaml index 0099cb0..d385a2d 100644 --- a/openapi/tap-sync.yaml +++ b/openapi/tap-sync.yaml @@ -12,15 +12,15 @@ get: - $ref: ../dali/dali-responseformat.yaml - $ref: ../dali/dali-upload.yaml responses: - 200: - description: successful response - 303: + '200': + $ref: './tap-result.yaml#/components/schemas/queryResult' + '303': description: redirect to the job result (optional) - 400: + '400': $ref: ./tap-responses.yaml#/invalid-query - 401: + '401': $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated - 403: + '403': $ref: ../vosi/vosi-std-responses.yaml#/permission-denied post: operationId: sync-query-job-create @@ -36,14 +36,14 @@ post: - $ref: ../dali/dali-responseformat.yaml - $ref: ../dali/dali-upload.yaml responses: - 200: - description: successful response - 303: + '200': + $ref: './tap-result.yaml#/components/schemas/queryResult' + '303': description: redirect to the job result (optional) - 400: + '400': $ref: ./tap-responses.yaml#/invalid-query - 401: + '401': $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated - 403: + '403': $ref: ../vosi/vosi-std-responses.yaml#/permission-denied From 2d60002a4b574d2cf6d03b01abbffdec5cd2ca3a Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Wed, 25 Feb 2026 16:53:25 -0800 Subject: [PATCH 15/21] update and re-rg OpenAPI components add scripts to sync external files from DALI and VOSI added minimal UWS components --- README.md | 11 ++++- openapi-linter | 8 ++++ openapi.yaml | 27 ++++++++---- openapi/{ => tap}/tap-async.yaml | 0 openapi/{ => tap}/tap-format.yaml | 0 openapi/{ => tap}/tap-lang.yaml | 0 openapi/{ => tap}/tap-load.yaml | 0 openapi/{ => tap}/tap-query.yaml | 0 openapi/{ => tap}/tap-responses.yaml | 0 openapi/{ => tap}/tap-result.yaml | 0 openapi/{ => tap}/tap-sync.yaml | 0 openapi/uws/uws-job-phase.yaml | 55 +++++++++++++++++++++++++ openapi/uws/uws-job.yaml | 28 +++++++++++++ openapi/uws/uws-responses.yaml | 61 ++++++++++++++++++++++++++++ rsync-openapi-components.sh | 11 +++++ 15 files changed, 192 insertions(+), 9 deletions(-) create mode 100755 openapi-linter rename openapi/{ => tap}/tap-async.yaml (100%) rename openapi/{ => tap}/tap-format.yaml (100%) rename openapi/{ => tap}/tap-lang.yaml (100%) rename openapi/{ => tap}/tap-load.yaml (100%) rename openapi/{ => tap}/tap-query.yaml (100%) rename openapi/{ => tap}/tap-responses.yaml (100%) rename openapi/{ => tap}/tap-result.yaml (100%) rename openapi/{ => tap}/tap-sync.yaml (100%) create mode 100644 openapi/uws/uws-job-phase.yaml create mode 100644 openapi/uws/uws-job.yaml create mode 100644 openapi/uws/uws-responses.yaml create mode 100755 rsync-openapi-components.sh diff --git a/README.md b/README.md index cd14455..fe6ebaf 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,16 @@ # Table Access Protocol +## State of Development +The current content is WD-TAP-1.2 with an OpenAPI 3.1 specification and is a work in progress. + +The DALI and VOSI OpenAPI components (yaml files) can be copied in with `rsync-openapi-components.sh`, +but source locations are hard-coded so check it and use with care. + +If you have docker available, the OpenAPI can be validated with `openapi-linter`. + - Creative Commons License + Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. diff --git a/openapi-linter b/openapi-linter new file mode 100755 index 0000000..c4b88e3 --- /dev/null +++ b/openapi-linter @@ -0,0 +1,8 @@ +#!/bin/bash + +if [[ "$1" == "-it" ]]; then + docker run -it --rm -v $PWD:/work:ro dshanley/vacuum /bin/bash +else + docker run --rm -v $PWD:/work:ro dshanley/vacuum lint --no-clip -d openapi.yaml +fi + diff --git a/openapi.yaml b/openapi.yaml index 8fe471e..e50569f 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1,14 +1,23 @@ openapi: 3.1.0 info: title: prototype TAP-1.2 with user managed tables - #version: "1.2" + version: "1.2" description: | This is the WD-TAP-1.2 API specification with components imported from - VOSI, UWS, and DALI. + DALI and VOSI. + servers: - url: /tapBase +tags: + - name: VOSI Capabilities + - name: VOSI Table Metadata + - name: TAP Query + ## any of the $ref values below can be URLs to external (standard) OpenAPI components +## openapi/dali and openapi/vosi need to be copied from ivoa-std/DALI and ivoa-std/VOSI +## openapi/uws is currently here in ivoa-std/TAP -- TBD +## openapi/tap is here in ivoa-std/TAP paths: /capabilities: @@ -22,6 +31,8 @@ paths: $ref: ./openapi/uws/uws-job.yaml /async/{jobID}/phase: $ref: ./openapi/uws/uws-job-phase.yaml + /async/{jobID}/results/result: + $ref: ./openapi/tap/tap-result.yaml /tables: $ref: ./openapi/vosi/vosi-tableset.yaml @@ -29,10 +40,10 @@ paths: $ref: ./openapi/vosi/vosi-table.yaml # optional endpoint: allowed to return 404 or 405 - /table-ops: - $ref: ./openapi/vosi/vosi-table-ops.yaml - /table-ops/{jobID}: - $ref: ./openapi/uws/uws-job.yaml - /table-ops/{jobID}/phase: - $ref: ./openapi/uws/uws-job-phase.yaml + #/table-ops: + # $ref: ./openapi/vosi/vosi-table-ops.yaml + #/table-ops/{jobID}: + # $ref: ./openapi/uws/uws-job.yaml + #/table-ops/{jobID}/phase: + # $ref: ./openapi/uws/uws-job-phase.yaml diff --git a/openapi/tap-async.yaml b/openapi/tap/tap-async.yaml similarity index 100% rename from openapi/tap-async.yaml rename to openapi/tap/tap-async.yaml diff --git a/openapi/tap-format.yaml b/openapi/tap/tap-format.yaml similarity index 100% rename from openapi/tap-format.yaml rename to openapi/tap/tap-format.yaml diff --git a/openapi/tap-lang.yaml b/openapi/tap/tap-lang.yaml similarity index 100% rename from openapi/tap-lang.yaml rename to openapi/tap/tap-lang.yaml diff --git a/openapi/tap-load.yaml b/openapi/tap/tap-load.yaml similarity index 100% rename from openapi/tap-load.yaml rename to openapi/tap/tap-load.yaml diff --git a/openapi/tap-query.yaml b/openapi/tap/tap-query.yaml similarity index 100% rename from openapi/tap-query.yaml rename to openapi/tap/tap-query.yaml diff --git a/openapi/tap-responses.yaml b/openapi/tap/tap-responses.yaml similarity index 100% rename from openapi/tap-responses.yaml rename to openapi/tap/tap-responses.yaml diff --git a/openapi/tap-result.yaml b/openapi/tap/tap-result.yaml similarity index 100% rename from openapi/tap-result.yaml rename to openapi/tap/tap-result.yaml diff --git a/openapi/tap-sync.yaml b/openapi/tap/tap-sync.yaml similarity index 100% rename from openapi/tap-sync.yaml rename to openapi/tap/tap-sync.yaml diff --git a/openapi/uws/uws-job-phase.yaml b/openapi/uws/uws-job-phase.yaml new file mode 100644 index 0000000..0531f9e --- /dev/null +++ b/openapi/uws/uws-job-phase.yaml @@ -0,0 +1,55 @@ +get: + operationId: job-phase-get + tags: + - TAP Query + summary: get a UWS job phase + description: job phase resource + parameters: + - name: jobID + in: path + description: unique job identifier generated by the server + required: true + type: string + example: a1b2c3 + responses: + '200': + description: successful response + content: + text/plain: + schema: + type: string + example: "PENDING" +post: + operationId: job-phase-update + tags: + - TAP Query + summary: change a UWS job phase + description: update job + parameters: + - name: jobID + in: path + description: unique job identifier generated by the server + required: true + type: string + example: a1b2c3 + - name: PHASE + in: query + description: attempt to change the phase + required: true + schema: + type: string + enum: [ABORT, RUN] + example: RUN + + responses: + '200': + description: phase change successful + '400': + $ref: ./uws-responses.yaml#/invalid-phase-change + '401': + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + '403': + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied + '404': + $ref: ../vosi/vosi-std-responses.yaml#/not-found + diff --git a/openapi/uws/uws-job.yaml b/openapi/uws/uws-job.yaml new file mode 100644 index 0000000..682b6ef --- /dev/null +++ b/openapi/uws/uws-job.yaml @@ -0,0 +1,28 @@ +get: + operationId: job-get + tags: + - TAP Query + summary: get a UWS job description + description: job resource + parameters: + - name: jobID + in: path + description: unique job identifier generated by the server + required: true + type: string + example: a1b2c3 + - name: WAIT + in: query + description: wait for the specified time in seconds or until the phase changes + required: false + type: integer + example: WAIT=60 + responses: + '200': + $ref: ./uws-responses.yaml#/job + '401': + $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated + '403': + $ref: ../vosi/vosi-std-responses.yaml#/permission-denied + '404': + $ref: ../vosi/vosi-std-responses.yaml#/not-found diff --git a/openapi/uws/uws-responses.yaml b/openapi/uws/uws-responses.yaml new file mode 100644 index 0000000..e4515cc --- /dev/null +++ b/openapi/uws/uws-responses.yaml @@ -0,0 +1,61 @@ +# UWS create job response +created: + description: standard UWS 1.1 redirect to the created job URL + headers: + location: + schema: + type: string + format: uri +invalid-phase-change: + description: the requested phase change is invalid + content: + text/plain: + schema: + type: string +job-listing: + description: list of jobs owned by the caller + content: + text/xml: + schema: + type: object + xml: + name: jobs + prefix: uws + namespace: http://www.ivoa.net/xml/UWS/v1.0 + example: | + + + PENDING + TEST + somebody + 2024-07-16T16:38:33.090Z + + ... + + +job: + description: a single UWS Job + content: + text/xml: + schema: + type: object + xml: + name: job + prefix: uws + namespace: http://www.ivoa.net/xml/UWS/v1.0 + example: | + + loqqxg8jlah0r8wp + somebody + PENDING + 2024-07-17T16:38:33.089Z + 2024-07-16T16:38:33.090Z + + + 28800 + 2024-07-23T16:38:33.089Z + + + + + diff --git a/rsync-openapi-components.sh b/rsync-openapi-components.sh new file mode 100755 index 0000000..9beb2be --- /dev/null +++ b/rsync-openapi-components.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# source locations for external components +VOSI=$HOME/work/dev/ivoa-std/VOSI.git +DALI=$HOME/work/dev/ivoa-std/DALI.git + +ARGS="$1 -avc --delete" + +rsync $ARGS $VOSI/openapi/vosi openapi/ +rsync $ARGS $DALI/openapi/dali openapi/ + From 01df59400430e8581148d5e288d4de6a0a924f42 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Wed, 25 Feb 2026 16:57:13 -0800 Subject: [PATCH 16/21] fix error after merge --- openapi.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 68e74c5..46906b4 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -1,13 +1,13 @@ openapi: 3.1.0 info: - title: prototype TAP-1.2 with user managed tables + title: Draft TAP-1.2 with user managed tables version: "1.2" description: | This is the WD-TAP-1.2 API specification with components imported from DALI and VOSI. servers: -- url: /tapBase +- url: /tap-service tags: - name: VOSI Capabilities @@ -19,7 +19,8 @@ tags: ## openapi/uws is currently here in ivoa-std/TAP -- TBD ## openapi/tap is here in ivoa-std/TAP -paths:/sync: +paths: + /sync: $ref: ./openapi/tap/tap-sync.yaml /async: $ref: ./openapi/tap/tap-async.yaml From 67f31f0dd47d0dcc52cff24ba5f01b3d61393b6e Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Mon, 30 Mar 2026 14:51:35 -0700 Subject: [PATCH 17/21] remove accidental file addition --- .gitignore | 2 ++ openapi/tap/tap-load.yaml | 44 --------------------------------------- 2 files changed, 2 insertions(+), 44 deletions(-) create mode 100644 .gitignore delete mode 100644 openapi/tap/tap-load.yaml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..51b3436 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +openapi/dali +openapi/vosi diff --git a/openapi/tap/tap-load.yaml b/openapi/tap/tap-load.yaml deleted file mode 100644 index 4db5104..0000000 --- a/openapi/tap/tap-load.yaml +++ /dev/null @@ -1,44 +0,0 @@ -post: - operationId: tap-bulk-load - summary: bulk load or row data - description: TAP synchronous bulk load endpoint - parameters: - - name: name - in: path - description: a single table name as provided in tap_schema - required: true - schema: - type: string - requestBody: - required: true - $ref: '#/components/schemas/tableRows' - - responses: - 200: - description: | - rows loaded; - TBD: both partial or complete are possible - 401: - $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated - 403: - $ref: ../vosi/vosi-std-responses.yaml#/permission-denied - -components: - schemas: - tableRows: - content: - text/tab-separated-values: - schema: - type: string - text/csv: - schema: - type: string - application/fits: - application/x-votable+xml: - schema: - type: object - xml: - name: VOTABLE - namespace: http://www.ivoa.net/xml/VOTable/v1.3 - - From 541e3dbd3152b578c33fc266ac6615f91cc0bbed Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Mon, 30 Mar 2026 15:47:28 -0700 Subject: [PATCH 18/21] tweak rsync script to assume relative paths to VOSI and DALI --- rsync-openapi-components.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/rsync-openapi-components.sh b/rsync-openapi-components.sh index 9beb2be..dc68816 100755 --- a/rsync-openapi-components.sh +++ b/rsync-openapi-components.sh @@ -1,11 +1,16 @@ #!/bin/bash # source locations for external components -VOSI=$HOME/work/dev/ivoa-std/VOSI.git -DALI=$HOME/work/dev/ivoa-std/DALI.git +VOSI=../VOSI +DALI=../DALI +test -d $VOSI || VOSI=../VOSI.git +test -d $DALI || DALI=../DALI.git ARGS="$1 -avc --delete" +echo "found VOSI: $VOSI" rsync $ARGS $VOSI/openapi/vosi openapi/ + +echo "found DALI: $DALI" rsync $ARGS $DALI/openapi/dali openapi/ From c29776220956835b159d3d43d05ef12c9aa3ab97 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Tue, 31 Mar 2026 16:36:16 -0700 Subject: [PATCH 19/21] augment openapi.yaml with VOSI table-ops endpoint move and customise uws-job and uws-job-phase --- openapi.yaml | 20 ++++++++++--------- .../tap-async-job-phase.yaml} | 2 +- .../uws-job.yaml => tap/tap-async-job.yaml} | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) rename openapi/{uws/uws-job-phase.yaml => tap/tap-async-job-phase.yaml} (95%) rename openapi/{uws/uws-job.yaml => tap/tap-async-job.yaml} (94%) diff --git a/openapi.yaml b/openapi.yaml index 46906b4..87ea014 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -10,9 +10,11 @@ servers: - url: /tap-service tags: + - name: TAP Query - name: VOSI Capabilities - name: VOSI Table Metadata - - name: TAP Query + - name: VOSI Table Operations + ## any of the $ref values below can be URLs to external (standard) OpenAPI components ## openapi/dali and openapi/vosi need to be copied from ivoa-std/DALI and ivoa-std/VOSI @@ -25,9 +27,9 @@ paths: /async: $ref: ./openapi/tap/tap-async.yaml /async/{jobID}: - $ref: ./openapi/uws/uws-job.yaml + $ref: ./openapi/tap/tap-async-job.yaml /async/{jobID}/phase: - $ref: ./openapi/uws/uws-job-phase.yaml + $ref: ./openapi/tap/tap-async-job-phase.yaml /async/{jobID}/results/result: $ref: ./openapi/tap/tap-result.yaml @@ -40,10 +42,10 @@ paths: $ref: ./openapi/vosi/vosi-capabilities.yaml # optional endpoint: allowed to return 404 or 405 - #/table-ops: - # $ref: ./openapi/vosi/vosi-table-ops.yaml - #/table-ops/{jobID}: - # $ref: ./openapi/uws/uws-job.yaml - #/table-ops/{jobID}/phase: - # $ref: ./openapi/uws/uws-job-phase.yaml + /table-ops: + $ref: ./openapi/vosi/vosi-table-ops.yaml + /table-ops/{jobID}: + $ref: ./openapi/vosi/vosi-table-ops-job.yaml + /table-ops/{jobID}/phase: + $ref: ./openapi/vosi/vosi-table-ops-job-phase.yaml diff --git a/openapi/uws/uws-job-phase.yaml b/openapi/tap/tap-async-job-phase.yaml similarity index 95% rename from openapi/uws/uws-job-phase.yaml rename to openapi/tap/tap-async-job-phase.yaml index 0531f9e..3e8edb9 100644 --- a/openapi/uws/uws-job-phase.yaml +++ b/openapi/tap/tap-async-job-phase.yaml @@ -45,7 +45,7 @@ post: '200': description: phase change successful '400': - $ref: ./uws-responses.yaml#/invalid-phase-change + $ref: ../uws/uws-responses.yaml#/invalid-phase-change '401': $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated '403': diff --git a/openapi/uws/uws-job.yaml b/openapi/tap/tap-async-job.yaml similarity index 94% rename from openapi/uws/uws-job.yaml rename to openapi/tap/tap-async-job.yaml index 682b6ef..82313f4 100644 --- a/openapi/uws/uws-job.yaml +++ b/openapi/tap/tap-async-job.yaml @@ -19,7 +19,7 @@ get: example: WAIT=60 responses: '200': - $ref: ./uws-responses.yaml#/job + $ref: ../uws/uws-responses.yaml#/job '401': $ref: ../vosi/vosi-std-responses.yaml#/not-authenticated '403': From 1a84966d77058bb133d634e3848a7d2bc32f084c Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Tue, 31 Mar 2026 16:45:43 -0700 Subject: [PATCH 20/21] tap-async operationId uniqueness --- openapi/tap/tap-async-job-phase.yaml | 4 ++-- openapi/tap/tap-async-job.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/openapi/tap/tap-async-job-phase.yaml b/openapi/tap/tap-async-job-phase.yaml index 3e8edb9..3d9031a 100644 --- a/openapi/tap/tap-async-job-phase.yaml +++ b/openapi/tap/tap-async-job-phase.yaml @@ -1,5 +1,5 @@ get: - operationId: job-phase-get + operationId: tap-job-phase-get tags: - TAP Query summary: get a UWS job phase @@ -20,7 +20,7 @@ get: type: string example: "PENDING" post: - operationId: job-phase-update + operationId: tap-job-phase-update tags: - TAP Query summary: change a UWS job phase diff --git a/openapi/tap/tap-async-job.yaml b/openapi/tap/tap-async-job.yaml index 82313f4..1f7fb9c 100644 --- a/openapi/tap/tap-async-job.yaml +++ b/openapi/tap/tap-async-job.yaml @@ -1,5 +1,5 @@ get: - operationId: job-get + operationId: tap-job-get tags: - TAP Query summary: get a UWS job description From dc3a05c1823ef6ace2755e7680ba2a20d9ceb0f6 Mon Sep 17 00:00:00 2001 From: Patrick Dowler Date: Thu, 9 Apr 2026 10:02:23 -0700 Subject: [PATCH 21/21] get reusable uws components from VOSI and $ref them removed local copy of re-usable UWS yaml --- .gitignore | 1 + openapi/tap/tap-async-job-phase.yaml | 24 ++--------- openapi/tap/tap-async-job.yaml | 14 +------ openapi/tap/tap-async.yaml | 3 ++ openapi/tap/tap-result.yaml | 7 +--- openapi/uws/uws-responses.yaml | 61 ---------------------------- rsync-openapi-components.sh | 3 ++ 7 files changed, 13 insertions(+), 100 deletions(-) delete mode 100644 openapi/uws/uws-responses.yaml diff --git a/.gitignore b/.gitignore index 51b3436..4a68050 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ openapi/dali openapi/vosi +openapi/uws diff --git a/openapi/tap/tap-async-job-phase.yaml b/openapi/tap/tap-async-job-phase.yaml index 3d9031a..79ca646 100644 --- a/openapi/tap/tap-async-job-phase.yaml +++ b/openapi/tap/tap-async-job-phase.yaml @@ -5,12 +5,7 @@ get: summary: get a UWS job phase description: job phase resource parameters: - - name: jobID - in: path - description: unique job identifier generated by the server - required: true - type: string - example: a1b2c3 + - $ref: ../uws/uws-jobid-param.yaml responses: '200': description: successful response @@ -26,21 +21,8 @@ post: summary: change a UWS job phase description: update job parameters: - - name: jobID - in: path - description: unique job identifier generated by the server - required: true - type: string - example: a1b2c3 - - name: PHASE - in: query - description: attempt to change the phase - required: true - schema: - type: string - enum: [ABORT, RUN] - example: RUN - + - $ref: ../uws/uws-jobid-param.yaml + - $ref: ../uws/uws-phase-change-param.yaml responses: '200': description: phase change successful diff --git a/openapi/tap/tap-async-job.yaml b/openapi/tap/tap-async-job.yaml index 1f7fb9c..aeba4de 100644 --- a/openapi/tap/tap-async-job.yaml +++ b/openapi/tap/tap-async-job.yaml @@ -5,18 +5,8 @@ get: summary: get a UWS job description description: job resource parameters: - - name: jobID - in: path - description: unique job identifier generated by the server - required: true - type: string - example: a1b2c3 - - name: WAIT - in: query - description: wait for the specified time in seconds or until the phase changes - required: false - type: integer - example: WAIT=60 + - $ref: ../uws/uws-jobid-param.yaml + - $ref: ../uws/uws-wait-param.yaml responses: '200': $ref: ../uws/uws-responses.yaml#/job diff --git a/openapi/tap/tap-async.yaml b/openapi/tap/tap-async.yaml index d42e0c9..78ccf60 100644 --- a/openapi/tap/tap-async.yaml +++ b/openapi/tap/tap-async.yaml @@ -5,6 +5,9 @@ get: summary: list queries (UWS jobs) description: TAP asynchronous query endpoint (list UWS Jobs) parameters: + - $ref: ../uws/uws-phase-param.yaml + - $ref: ../uws/uws-after-param.yaml + - $ref: ../uws/uws-last-param.yaml responses: '200': $ref: ../uws/uws-responses.yaml#/job-listing diff --git a/openapi/tap/tap-result.yaml b/openapi/tap/tap-result.yaml index b1cba58..7b70047 100644 --- a/openapi/tap/tap-result.yaml +++ b/openapi/tap/tap-result.yaml @@ -5,12 +5,7 @@ get: summary: async query result description: download async query result for a completed job parameters: - - name: jobID - in: path - description: unique job identifier generated by the server - required: true - type: string - example: a1b2c3 + - $ref: ../uws/uws-jobid-param.yaml responses: '200': $ref: '#/components/schemas/queryResult' diff --git a/openapi/uws/uws-responses.yaml b/openapi/uws/uws-responses.yaml deleted file mode 100644 index e4515cc..0000000 --- a/openapi/uws/uws-responses.yaml +++ /dev/null @@ -1,61 +0,0 @@ -# UWS create job response -created: - description: standard UWS 1.1 redirect to the created job URL - headers: - location: - schema: - type: string - format: uri -invalid-phase-change: - description: the requested phase change is invalid - content: - text/plain: - schema: - type: string -job-listing: - description: list of jobs owned by the caller - content: - text/xml: - schema: - type: object - xml: - name: jobs - prefix: uws - namespace: http://www.ivoa.net/xml/UWS/v1.0 - example: | - - - PENDING - TEST - somebody - 2024-07-16T16:38:33.090Z - - ... - - -job: - description: a single UWS Job - content: - text/xml: - schema: - type: object - xml: - name: job - prefix: uws - namespace: http://www.ivoa.net/xml/UWS/v1.0 - example: | - - loqqxg8jlah0r8wp - somebody - PENDING - 2024-07-17T16:38:33.089Z - 2024-07-16T16:38:33.090Z - - - 28800 - 2024-07-23T16:38:33.089Z - - - - - diff --git a/rsync-openapi-components.sh b/rsync-openapi-components.sh index dc68816..f6a4c5e 100755 --- a/rsync-openapi-components.sh +++ b/rsync-openapi-components.sh @@ -11,6 +11,9 @@ ARGS="$1 -avc --delete" echo "found VOSI: $VOSI" rsync $ARGS $VOSI/openapi/vosi openapi/ +echo "get UWS from $VOSI" +rsync $ARGS $VOSI/openapi/uws openapi/ + echo "found DALI: $DALI" rsync $ARGS $DALI/openapi/dali openapi/