openapi: 3.0.3 info: title: DeBros Gateway API version: 0.40.0 description: REST API over the DeBros Network client for storage, database, and pubsub. servers: - url: http://localhost:6001 security: - ApiKeyAuth: [] - BearerAuth: [] components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-API-Key BearerAuth: type: http scheme: bearer schemas: Error: type: object properties: error: type: string QueryRequest: type: object required: [sql] properties: sql: type: string args: type: array items: {} QueryResponse: type: object properties: columns: type: array items: type: string rows: type: array items: type: array items: {} count: type: integer format: int64 TransactionRequest: type: object required: [statements] properties: statements: type: array items: type: string CreateTableRequest: type: object required: [schema] properties: schema: type: string DropTableRequest: type: object required: [table] properties: table: type: string TopicsResponse: type: object properties: topics: type: array items: type: string paths: /v1/health: get: summary: Gateway health responses: "200": { description: OK } /v1/storage/put: post: summary: Store a value by key parameters: - in: query name: key schema: { type: string } required: true requestBody: required: true content: application/octet-stream: schema: type: string format: binary responses: "201": { description: Created } "400": { description: Bad Request, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } "401": { description: Unauthorized } "500": { description: Error, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } /v1/storage/get: get: summary: Get a value by key parameters: - in: query name: key schema: { type: string } required: true responses: "200": description: OK content: application/octet-stream: schema: type: string format: binary "404": { description: Not Found, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } /v1/storage/exists: get: summary: Check key existence parameters: - in: query name: key schema: { type: string } required: true responses: "200": description: OK content: application/json: schema: type: object properties: exists: type: boolean /v1/storage/list: get: summary: List keys by prefix parameters: - in: query name: prefix schema: { type: string } responses: "200": description: OK content: application/json: schema: type: object properties: keys: type: array items: type: string /v1/storage/delete: post: summary: Delete a key requestBody: required: true content: application/json: schema: type: object required: [key] properties: key: { type: string } responses: "200": { description: OK } /v1/rqlite/create-table: post: summary: Create tables via SQL DDL requestBody: required: true content: application/json: schema: { $ref: "#/components/schemas/CreateTableRequest" } responses: "201": { description: Created } "400": { description: Bad Request, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } "500": { description: Error, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } /v1/rqlite/drop-table: post: summary: Drop a table requestBody: required: true content: application/json: schema: { $ref: "#/components/schemas/DropTableRequest" } responses: "200": { description: OK } /v1/rqlite/query: post: summary: Execute a single SQL query requestBody: required: true content: application/json: schema: { $ref: "#/components/schemas/QueryRequest" } responses: "200": description: OK content: application/json: schema: { $ref: "#/components/schemas/QueryResponse" } "400": { description: Bad Request, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } "500": { description: Error, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } /v1/rqlite/transaction: post: summary: Execute multiple SQL statements atomically requestBody: required: true content: application/json: schema: { $ref: "#/components/schemas/TransactionRequest" } responses: "200": { description: OK } "400": { description: Bad Request, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } "500": { description: Error, content: { application/json: { schema: { $ref: "#/components/schemas/Error" } }, }, } /v1/rqlite/schema: get: summary: Get current database schema responses: "200": { description: OK } /v1/pubsub/publish: post: summary: Publish to a topic requestBody: required: true content: application/json: schema: type: object required: [topic, data_base64] properties: topic: { type: string } data_base64: { type: string } responses: "200": { description: OK } /v1/pubsub/topics: get: summary: List topics in caller namespace responses: "200": description: OK content: application/json: schema: { $ref: "#/components/schemas/TopicsResponse" }