spec/rest-service-open-api.yaml (211 lines of code) (raw):
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
openapi: 3.0.3
info:
title: XTable REST Service API
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
version: 0.0.1
description: |
A REST API for initiating metadata conversion using Apache XTable. Note this spec is still under active development and is subject to changes.
servers:
- url: "{scheme}://{host}/{prefix}"
description: Server URL when the port can be inferred from the scheme
variables:
scheme:
description: The scheme of the URI, either http or https.
default: https
host:
description: The host address for the specified server
default: localhost
prefix:
description: Optional prefix to be appended to all routes
default: ""
- url: "{scheme}://{host}:{port}/{prefix}"
description: Generic base server URL, with all parts configurable
variables:
scheme:
description: The scheme of the URI, either http or https.
default: https
host:
description: The host address for the specified server
default: localhost
port:
description: The port used when addressing the host
default: "8080"
prefix:
description: Optional prefix to be appended to all routes
default: ""
paths:
/v1/conversion/table:
post:
tags:
- XTable Service API
summary: Initiate XTable's runSync process to convert a source table format to the requested target table formats.
description: |
Reads the source table metadata from storage, converts it to the requested
target formats.
operationId: convertTable
parameters:
- in: header
name: Prefer
description: Use 'respond-async' to request asynchronous processing.
required: false
schema:
type: string
enum:
- respond-async
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConvertTableRequest'
responses:
'200':
$ref: '#/components/responses/ConvertTableResponse'
'202':
$ref: '#/components/responses/SubmittedConversionResponse'
'403':
$ref: '#/components/responses/ForbiddenResponse'
'503':
$ref: '#/components/responses/ServiceUnavailableResponse'
default:
$ref: '#/components/responses/ErrorResponse'
/v1/conversion/table/{conversion-id}:
get:
tags:
- XTable Service API
summary: Polls on a conversion-id to see if converting a table has finished.
operationId: getConversionStatus
parameters:
- in: path
name: conversion-id
required: true
schema:
type: string
responses:
'200':
$ref: '#/components/responses/ConvertTableResponse'
'202':
description: Still processing; conversion has not yet finished.
'403':
$ref: '#/components/responses/ForbiddenResponse'
'503':
$ref: '#/components/responses/ServiceUnavailableResponse'
default:
$ref: '#/components/responses/ErrorResponse'
components:
schemas:
ConvertTableRequest:
type: object
required:
- source-format
- source-table-name
- source-table-path
- target-formats
properties:
source-format:
type: string
description: Name of the source table format (e.g., "ICEBERG", "HUDI", "DELTA")
source-table-name:
type: string
description: Name of the source table
source-table-path:
type: string
description: Path to the source table's metadata
target-formats:
type: array
items:
type: string
description: List of desired output table formats (e.g., "ICEBERG", "HUDI", "DELTA")
configurations:
type: object
description: Additional configuration key/value pairs (e.g., storage credentials or other service configs)
additionalProperties:
type: string
TargetTable:
type: object
required:
- target-format
- target-metadata-path
properties:
target-format:
type: string
description: Name of the target format (e.g., "ICEBERG", "HUDI", "DELTA")
target-metadata-path:
type: string
description: Path where the converted metadata was written
target-schema:
type: string
description: Schema definition of the converted table
ConvertTableResponse:
type: object
required:
- conversions
properties:
conversions:
type: array
description: A list of converted tables, one per requested format
items:
$ref: '#/components/schemas/TargetTable'
SubmittedConversionResponse:
type: object
properties:
conversion-id:
type: string
description: ID to use when polling for the final result
ErrorModel:
type: object
description: JSON error payload returned in a response with further details on the error
required:
- message
- type
- code
properties:
message:
type: string
description: Human-readable error message
type:
type: string
description: Internal type definition of the error
code:
type: integer
minimum: 400
maximum: 600
description: HTTP response code
stack:
type: array
description: Optional stack trace elements for debugging
items:
type: string
responses:
ConvertTableResponse:
description: Successful conversion result
content:
application/json:
schema:
$ref: '#/components/schemas/ConvertTableResponse'
SubmittedConversionResponse:
description: Request accepted for asynchronous processing
content:
application/json:
schema:
$ref: '#/components/schemas/SubmittedConversionResponse'
ForbiddenResponse:
description: Caller does not have permission to perform this operation
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorModel'
ServiceUnavailableResponse:
description: Conversion service is temporarily unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorModel'
ErrorResponse:
description: Unexpected error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorModel'