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: []