<% /* $Revision$ $Id$ File: api2_swagger.inc Description: Genereer OpenAPI compatible documentatie zodat swagger ui die kan lezen Notes: Status: */ %> <% function swaggerschema(model) { var schema = { "type":"object", "properties":{}, "required": [], "xml":{ "name": model.record_name } } for (var fld in model.fields) { if (fld.substring(0,1) == "_") continue; var field = model.fields[fld]; if (field.hidden) continue; if (field.required) schema.required.push(fld); switch (field.typ) { case "key": var prop = { "type":"integer", "format":"int64" }; if (fld == "id") prop["readOnly"] = true; // Wordt nog genegeerd door Swagger-ui 2.0 break; case "float": case "currency": var prop = { "type":"float", "format":"float" }; break; case "number": var prop = { "type":"integer", "format":"int64" }; break; case "check": case "check0": var prop = { "type":"integer", "format":"int64", "enum":[0, 1] }; break; case "varchar": case "memo": var prop = { "type":"string", "format":"string" }; break; case "date": var prop = { "type":"date", "format":"date" }; break; case "datetime": var prop = { "type":"dateTime", "format":"date-time" }; break; break; default: continue; } prop.description = field.label; //prop["default"] = field.defaultvalue; if ("LOV" in field) { var spl = api2.splitLOV(field.LOV); var enums = []; for (var l in spl) { enums.push(l); } prop["enum"] = enums; } schema["properties"][fld] = prop; } return schema; }; function swaggermodel (model) { //if ("autfunction" in model && !user.has(model.autfunction)) // return {}; var auttext = ""; if (model.autfunction) auttext = "
Requires authorization {0} ({1})".format(model.autfunction, L("lcl_" + model.autfunction)); model.records_title = model.records_title || model.records_name; model.record_title = model.record_title || model.record_name; var result = { "schema": { "fields": {} }, "get": { "tags":[ getQParamSafe("module", "XXX") ], "summary": "Get all {0}".format(model.records_title), "description": "Returns all {0} from the system that the user has access to.".format(model.records_title) + auttext, "responses": { "200": { "description": "A list of " + model.records_title, "schema": { "$ref": "#/schema/{0}".format(model.records_name) } }, "403": { "description": "Forbidden" } }, "security":[ { "api_key":[ ] } ], "parameters": [] } }; if (model.includes) { var enums = []; for (var i in model.includes) enums.push(i); var inc = model.includes[i]; result["get"].parameters.push( { "name": "include", "in": "query", "description": "Include all {0}".format("model" in inc?(inc.model.records_title||inc.model.records_name):i), "required": false, "type": "array", "enum": enums }); }; result["schema"]["fields"][model.record_name + "fields"] = swaggerschema(model); result["schema"][model.records_name] = { "type": "object", "properties": { "total_count": { "type":"integer", "format":"int64", "example": 10, "xml": { "attribute": true } }, "limit": { "type":"integer", "format":"int64", "example": S("qp_maxrows"), "xml": { "attribute": true } }, "offset": { "type":"integer", "format":"int64", "example": 0, // Doen we altijd nog "xml": { "attribute": true } } } } result["schema"][model.records_name]["properties"][model.records_name] = { "type": "array", "items": { "$ref": "#/schema/fields/" + model.record_name + "fields" } }; result["schema"][model.record_name] = { "type": "object", "properties": {} }; result["schema"][model.record_name ]["properties"][model.record_name] = { "$ref": "#/schema/fields/" + model.record_name + "fields" } if (getQParamInt("single", 0) == 1) { result["get"].summary = "Get one {0}".format(model.record_title); result["get"].description = "Returns the {0}.".format(model.record_title) + auttext, result["get"].parameters.push( { "name":"id", "in":"path", "description":"ID of {0} to return".format(model.record_title), "required":true, "type":"integer", "format":"int64" } ); result["get"]["responses"]["200"] = { "description": "A " + model.record_title, "schema": { "$ref": "#/schema/" + model.record_name } }; } if (getQParamInt("single", 0) == 0 && model["REST_POST"]) { result["post"] = { "tags":[ getQParamSafe("module", "XXX") ], "summary":"Add a new {0} to FACILITOR.".format(model.record_title) + auttext, "description":"", "operationId":"add" + model.records_name, "parameters":[ { "in":"body", "name":"body", "description":"{0} object that needs to be added".format(model.record_title), "required":true, "xxxschema":{ "$ref":"#/definitions/Pet" }, "schema": { "$ref": "#/schema/" + model.record_name } } ], "responses":{ "200": { "description": "A " + model.record_title, "schema": { "$ref": "#/schema/" + model.record_name } }, "400":{ "description":"Bad request" }, "403": { "description": "Forbidden" } }, "security":[ { "api_key":[] } ] } } if (getQParamInt("single", 0) == 1 && model["REST_PUT"]) { result["put"] = { "tags":[ getQParamSafe("module", "XXX") ], "summary":"Update an existing {0} in FACILITOR.".format(model.record_title) + + auttext, "description":"", "operationId":"add" + model.records_name, "parameters":[ { "name":"id", "in":"path", "description":"ID of {0} to update".format(model.record_title), "required":true, "type":"integer", "format":"int64" }, { "in":"body", "name":"body", "description":"{0} object that needs to be updated".format(model.record_title), "required":true, "xxxschema":{ "$ref":"#/definitions/Pet" }, "schema": { "$ref": "#/schema/" + model.record_name } } ], "responses":{ "200": { "description": "A " + model.record_title, "schema": { "$ref": "#/schema/" + model.record_name } }, "403": { "description": "Forbidden" }, "400":{ "description":"Bad request" } }, "security":[ { "api_key":[ ] } ] } } if (getQParamInt("single", 0) == 1 && model["REST_DELETE"]) { result["delete"] = { "tags":[ getQParamSafe("module", "XXX") ], "summary":"Delete a {0} from FACILITOR.".format(model.record_title) + auttext, "description":"", "operationId":"add" + model.records_name, "parameters":[ { "name":"id", "in":"path", "description":"ID of {0} to delete".format(model.record_title), "required":true, "type":"integer", "format":"int64" } ], "responses":{ "204":{ "description":"No content (delete succesfull or record not found)" }, "403": { "description": "Forbidden" } }, "security":[ { "api_key":[ ] } ] } } return result; } %>