forked from tsai/budibase
11 changed files with 567 additions and 43 deletions
@ -0,0 +1,160 @@ |
|||
openapi: 3.0.0 |
|||
info: |
|||
title: Budibase API |
|||
description: The public API for Budibase apps and its services. |
|||
version: 1.0.0 |
|||
servers: |
|||
- url: http://budibase.app/api/public/v1 |
|||
description: Budibase Cloud API |
|||
- url: "{protocol}://{hostname}:10000/api/public/v1" |
|||
description: Budibase self hosted API |
|||
components: |
|||
examples: |
|||
row: |
|||
value: |
|||
_id: ro_ta_5b1649e42a5b41dea4ef7742a36a7a70_e6dc7e38cf1343b2b56760265201cda4 |
|||
type: row |
|||
tableId: ta_5b1649e42a5b41dea4ef7742a36a7a70 |
|||
name: Mike |
|||
age: 30 |
|||
relationship: |
|||
- primaryDisplay: Joe |
|||
_id: ro_ta_... |
|||
table: |
|||
value: |
|||
_id: ta_5b1649e42a5b41dea4ef7742a36a7a70 |
|||
name: People |
|||
schema: |
|||
name: |
|||
type: string |
|||
name: name |
|||
age: |
|||
type: number |
|||
name: age |
|||
relationship: |
|||
type: link |
|||
name: relationship |
|||
tableId: ta_... |
|||
fieldName: relatedColumn |
|||
relationshipType: many-to-many |
|||
paths: |
|||
"/row/{tableId}/search": |
|||
post: |
|||
summary: Allows searching for rows within a table. |
|||
parameters: |
|||
- in: path |
|||
name: tableId |
|||
required: true |
|||
description: The ID of the table which contains the rows which are being |
|||
searched for. |
|||
schema: |
|||
type: string |
|||
requestBody: |
|||
required: true |
|||
content: |
|||
application/json: |
|||
schema: |
|||
type: object |
|||
properties: |
|||
query: |
|||
type: object |
|||
properties: |
|||
string: |
|||
type: object |
|||
example: |
|||
columnName1: value |
|||
columnName2: value |
|||
description: A map of field name to the string to search for, this will look for |
|||
rows that have a value starting with the string value. |
|||
additionalProperties: |
|||
type: string |
|||
description: The value to search for in the column. |
|||
fuzzy: |
|||
type: object |
|||
description: A fuzzy search, only supported by internal tables. |
|||
range: |
|||
type: object |
|||
description: Searches within a range, the format of this must be columnName -> |
|||
[low, high]. |
|||
equal: |
|||
type: object |
|||
description: Searches for rows that have a column value that is exactly the |
|||
value set. |
|||
notEqual: |
|||
type: object |
|||
description: Searches for any row which does not contain the specified column |
|||
value. |
|||
empty: |
|||
type: object |
|||
description: Searches for rows which do not contain the specified column. The |
|||
object should simply contain keys of the column names, |
|||
these can map to any value. |
|||
notEmpty: |
|||
type: object |
|||
description: Searches for rows which have the specified column. |
|||
oneOf: |
|||
type: object |
|||
description: Searches for rows which have a column value that is any of the |
|||
specified values. The format of this must be columnName |
|||
-> [value1, value2]. |
|||
paginate: |
|||
type: boolean |
|||
description: Enables pagination, by default this is disabled. |
|||
bookmark: |
|||
oneOf: |
|||
- type: string |
|||
- type: integer |
|||
description: If retrieving another page, the bookmark from the previous request |
|||
must be supplied. |
|||
limit: |
|||
type: integer |
|||
description: The maximum number of rows to return, useful when paginating, for |
|||
internal tables this will be limited to 1000, for SQL tables |
|||
it will be 5000. |
|||
sort: |
|||
type: object |
|||
description: A set of parameters describing the sort behaviour of the search. |
|||
properties: |
|||
order: |
|||
type: string |
|||
enum: |
|||
- ascending |
|||
- descending |
|||
description: The order of the sort, by default this is ascending. |
|||
column: |
|||
type: string |
|||
description: The name of the column by which the rows will be sorted. |
|||
type: |
|||
type: string |
|||
enum: |
|||
- string |
|||
- number |
|||
description: Defines whether the column should be treated as a string or as |
|||
numbers when sorting. |
|||
responses: |
|||
"200": |
|||
description: The response will contain an array of rows that match the search |
|||
parameters. |
|||
content: |
|||
application/json: |
|||
schema: |
|||
type: object |
|||
properties: |
|||
rows: |
|||
description: An array of rows, these will each contain an _id field which can be |
|||
used to update or delete them. |
|||
type: array |
|||
items: |
|||
type: object |
|||
example: |
|||
$ref: "#/components/examples/row" |
|||
bookmark: |
|||
oneOf: |
|||
- type: string |
|||
- type: integer |
|||
description: If pagination in use, this should be provided |
|||
hasNextPage: |
|||
description: If pagination in use, this will determine if there is another page |
|||
to fetch. |
|||
type: boolean |
|||
tags: [] |
|||
@ -0,0 +1,24 @@ |
|||
/* |
|||
* Contains pass through functions for all of the public API, make sure |
|||
* parameters are in correct format for the main controllers. |
|||
*/ |
|||
|
|||
exports.search = () => { |
|||
|
|||
} |
|||
|
|||
exports.create = () => { |
|||
|
|||
} |
|||
|
|||
exports.singleRead = () => { |
|||
|
|||
} |
|||
|
|||
exports.update = () => { |
|||
|
|||
} |
|||
|
|||
exports.delete = () => { |
|||
|
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
const Router = require("@koa/router") |
|||
|
|||
const router = Router() |
|||
|
|||
module.exports = router |
|||
@ -0,0 +1,25 @@ |
|||
const appRoute = require("./applications") |
|||
const queryRoute = require("./queries") |
|||
const tableRoute = require("./tables") |
|||
const rowRoute = require("./rows") |
|||
const userRoute = require("./users") |
|||
const Router = require("@koa/router") |
|||
|
|||
const PREFIX = "/api/public/v1" |
|||
const ROUTES = [ |
|||
appRoute, |
|||
queryRoute, |
|||
tableRoute, |
|||
rowRoute, |
|||
userRoute |
|||
] |
|||
|
|||
const router = new Router({ |
|||
prefix: PREFIX, |
|||
}) |
|||
for (let route of ROUTES) { |
|||
router.use(route.routes()) |
|||
router.use(route.allowedMethods()) |
|||
} |
|||
|
|||
module.exports = router |
|||
@ -0,0 +1,5 @@ |
|||
const Router = require("@koa/router") |
|||
|
|||
const router = Router() |
|||
|
|||
module.exports = router |
|||
@ -0,0 +1,130 @@ |
|||
const Router = require("@koa/router") |
|||
const controller = require("../../controllers/public") |
|||
|
|||
const router = Router() |
|||
|
|||
/** |
|||
* @openapi |
|||
* /row/{tableId}/search: |
|||
* post: |
|||
* summary: Allows searching for rows within a table. |
|||
* parameters: |
|||
* - in: path |
|||
* name: tableId |
|||
* required: true |
|||
* description: The ID of the table which contains the rows |
|||
* which are being searched for. |
|||
* schema: |
|||
* type: string |
|||
* requestBody: |
|||
* required: true |
|||
* content: |
|||
* application/json: |
|||
* schema: |
|||
* type: object |
|||
* properties: |
|||
* query: |
|||
* type: object |
|||
* properties: |
|||
* string: |
|||
* type: object |
|||
* example: |
|||
* columnName1: value |
|||
* columnName2: value |
|||
* description: A map of field name to the string to search for, |
|||
* this will look for rows that have a value starting with the |
|||
* string value. |
|||
* additionalProperties: |
|||
* type: string |
|||
* description: The value to search for in the column. |
|||
* fuzzy: |
|||
* type: object |
|||
* description: A fuzzy search, only supported by internal tables. |
|||
* range: |
|||
* type: object |
|||
* description: Searches within a range, the format of this must be |
|||
* columnName -> [low, high]. |
|||
* equal: |
|||
* type: object |
|||
* description: Searches for rows that have a column value that is |
|||
* exactly the value set. |
|||
* notEqual: |
|||
* type: object |
|||
* description: Searches for any row which does not contain the specified |
|||
* column value. |
|||
* empty: |
|||
* type: object |
|||
* description: Searches for rows which do not contain the specified column. |
|||
* The object should simply contain keys of the column names, these |
|||
* can map to any value. |
|||
* notEmpty: |
|||
* type: object |
|||
* description: Searches for rows which have the specified column. |
|||
* oneOf: |
|||
* type: object |
|||
* description: Searches for rows which have a column value that is any |
|||
* of the specified values. The format of this must be columnName -> [value1, value2]. |
|||
* paginate: |
|||
* type: boolean |
|||
* description: Enables pagination, by default this is disabled. |
|||
* bookmark: |
|||
* oneOf: |
|||
* - type: string |
|||
* - type: integer |
|||
* description: If retrieving another page, the bookmark from the previous request must be supplied. |
|||
* limit: |
|||
* type: integer |
|||
* description: The maximum number of rows to return, useful when paginating, for internal tables this |
|||
* will be limited to 1000, for SQL tables it will be 5000. |
|||
* sort: |
|||
* type: object |
|||
* description: A set of parameters describing the sort behaviour of the search. |
|||
* properties: |
|||
* order: |
|||
* type: string |
|||
* enum: [ascending, descending] |
|||
* description: The order of the sort, by default this is ascending. |
|||
* column: |
|||
* type: string |
|||
* description: The name of the column by which the rows will be sorted. |
|||
* type: |
|||
* type: string |
|||
* enum: [string, number] |
|||
* description: Defines whether the column should be treated as a string |
|||
* or as numbers when sorting. |
|||
* responses: |
|||
* 200: |
|||
* description: The response will contain an array of rows that match the search parameters. |
|||
* content: |
|||
* application/json: |
|||
* schema: |
|||
* type: object |
|||
* properties: |
|||
* rows: |
|||
* description: An array of rows, these will each contain an _id field which can be used |
|||
* to update or delete them. |
|||
* type: array |
|||
* items: |
|||
* type: object |
|||
* example: |
|||
* $ref: '#/components/examples/row' |
|||
* bookmark: |
|||
* oneOf: |
|||
* - type: string |
|||
* - type: integer |
|||
* description: If pagination in use, this should be provided |
|||
* hasNextPage: |
|||
* description: If pagination in use, this will determine if there is another page to fetch. |
|||
* type: boolean |
|||
*/ |
|||
router.post("/tables/:tableId/rows/search", controller.search) |
|||
|
|||
router.post("/tables/:tableId/rows", controller.create) |
|||
|
|||
router.put("/tables/:tableId/rows/:rowId", controller.update) |
|||
|
|||
router.delete("/tables/:tableId/rows/:rowId", controller.delete) |
|||
|
|||
router.get("/tables/:tableId/rows/:rowId", controller.singleRead) |
|||
|
|||
module.exports = router |
|||
@ -0,0 +1,5 @@ |
|||
const Router = require("@koa/router") |
|||
|
|||
const router = Router() |
|||
|
|||
module.exports = router |
|||
@ -0,0 +1,5 @@ |
|||
const Router = require("@koa/router") |
|||
|
|||
const router = Router() |
|||
|
|||
module.exports = router |
|||
Loading…
Reference in new issue