mirror of
https://github.com/Warky-Devs/ResolveSpec.git
synced 2025-05-18 20:57:29 +00:00
362 lines
8.0 KiB
YAML
362 lines
8.0 KiB
YAML
openapi: 3.0.0
|
|
info:
|
|
title: ResolveSpec API
|
|
version: '1.0'
|
|
description: A flexible REST API with GraphQL-like capabilities
|
|
|
|
servers:
|
|
- url: 'http://api.example.com/v1'
|
|
|
|
paths:
|
|
'/{schema}/{entity}':
|
|
parameters:
|
|
- name: schema
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- name: entity
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
get:
|
|
summary: Get table metadata
|
|
description: Retrieve table metadata including columns, types, and relationships
|
|
responses:
|
|
'200':
|
|
description: Successful operation
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Response'
|
|
- type: object
|
|
properties:
|
|
data:
|
|
$ref: '#/components/schemas/TableMetadata'
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
'500':
|
|
$ref: '#/components/responses/ServerError'
|
|
post:
|
|
summary: Perform operations on entities
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Request'
|
|
responses:
|
|
'200':
|
|
description: Successful operation
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Response'
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
'500':
|
|
$ref: '#/components/responses/ServerError'
|
|
|
|
'/{schema}/{entity}/{id}':
|
|
parameters:
|
|
- name: schema
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- name: entity
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- name: id
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
post:
|
|
summary: Perform operations on a specific entity
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Request'
|
|
responses:
|
|
'200':
|
|
description: Successful operation
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Response'
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
'500':
|
|
$ref: '#/components/responses/ServerError'
|
|
|
|
components:
|
|
schemas:
|
|
Request:
|
|
type: object
|
|
required:
|
|
- operation
|
|
properties:
|
|
operation:
|
|
type: string
|
|
enum:
|
|
- read
|
|
- create
|
|
- update
|
|
- delete
|
|
id:
|
|
oneOf:
|
|
- type: string
|
|
- type: array
|
|
items:
|
|
type: string
|
|
description: Optional record identifier(s) when not provided in URL
|
|
data:
|
|
oneOf:
|
|
- type: object
|
|
- type: array
|
|
items:
|
|
type: object
|
|
description: Data for single or bulk create/update operations
|
|
options:
|
|
$ref: '#/components/schemas/Options'
|
|
|
|
Options:
|
|
type: object
|
|
properties:
|
|
preload:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/PreloadOption'
|
|
columns:
|
|
type: array
|
|
items:
|
|
type: string
|
|
filters:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/FilterOption'
|
|
sort:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/SortOption'
|
|
limit:
|
|
type: integer
|
|
minimum: 0
|
|
offset:
|
|
type: integer
|
|
minimum: 0
|
|
customOperators:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CustomOperator'
|
|
computedColumns:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ComputedColumn'
|
|
|
|
PreloadOption:
|
|
type: object
|
|
properties:
|
|
relation:
|
|
type: string
|
|
columns:
|
|
type: array
|
|
items:
|
|
type: string
|
|
filters:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/FilterOption'
|
|
|
|
FilterOption:
|
|
type: object
|
|
required:
|
|
- column
|
|
- operator
|
|
- value
|
|
properties:
|
|
column:
|
|
type: string
|
|
operator:
|
|
type: string
|
|
enum:
|
|
- eq
|
|
- neq
|
|
- gt
|
|
- gte
|
|
- lt
|
|
- lte
|
|
- like
|
|
- ilike
|
|
- in
|
|
value:
|
|
type: object
|
|
|
|
SortOption:
|
|
type: object
|
|
required:
|
|
- column
|
|
- direction
|
|
properties:
|
|
column:
|
|
type: string
|
|
direction:
|
|
type: string
|
|
enum:
|
|
- asc
|
|
- desc
|
|
|
|
CustomOperator:
|
|
type: object
|
|
required:
|
|
- name
|
|
- sql
|
|
properties:
|
|
name:
|
|
type: string
|
|
sql:
|
|
type: string
|
|
|
|
ComputedColumn:
|
|
type: object
|
|
required:
|
|
- name
|
|
- expression
|
|
properties:
|
|
name:
|
|
type: string
|
|
expression:
|
|
type: string
|
|
|
|
Response:
|
|
type: object
|
|
required:
|
|
- success
|
|
properties:
|
|
success:
|
|
type: boolean
|
|
data:
|
|
type: object
|
|
metadata:
|
|
$ref: '#/components/schemas/Metadata'
|
|
error:
|
|
$ref: '#/components/schemas/Error'
|
|
|
|
Metadata:
|
|
type: object
|
|
properties:
|
|
total:
|
|
type: integer
|
|
filtered:
|
|
type: integer
|
|
limit:
|
|
type: integer
|
|
offset:
|
|
type: integer
|
|
|
|
Error:
|
|
type: object
|
|
properties:
|
|
code:
|
|
type: string
|
|
message:
|
|
type: string
|
|
details:
|
|
type: object
|
|
|
|
TableMetadata:
|
|
type: object
|
|
required:
|
|
- schema
|
|
- table
|
|
- columns
|
|
- relations
|
|
properties:
|
|
schema:
|
|
type: string
|
|
description: Schema name
|
|
table:
|
|
type: string
|
|
description: Table name
|
|
columns:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Column'
|
|
relations:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: List of relation names
|
|
|
|
Column:
|
|
type: object
|
|
required:
|
|
- name
|
|
- type
|
|
- is_nullable
|
|
- is_primary
|
|
- is_unique
|
|
- has_index
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: Column name
|
|
type:
|
|
type: string
|
|
description: Data type of the column
|
|
is_nullable:
|
|
type: boolean
|
|
description: Whether the column can contain null values
|
|
is_primary:
|
|
type: boolean
|
|
description: Whether the column is a primary key
|
|
is_unique:
|
|
type: boolean
|
|
description: Whether the column has a unique constraint
|
|
has_index:
|
|
type: boolean
|
|
description: Whether the column is indexed
|
|
|
|
responses:
|
|
BadRequest:
|
|
description: Bad request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Response'
|
|
|
|
NotFound:
|
|
description: Resource not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Response'
|
|
|
|
ServerError:
|
|
description: Internal server error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Response'
|
|
|
|
securitySchemes:
|
|
bearerAuth:
|
|
type: http
|
|
scheme: bearer
|
|
bearerFormat: JWT
|
|
|
|
security:
|
|
- bearerAuth: [] |