Introduction
QuickApp is a web application framework that is designed to aid developers create Angular web applications quickly. It comes with several common application features such as login, user management, role (permission based) management already implemented.
The focus of quickapp is all about speed of development. How to get a working, running application quickly whilst following best programming practices.
Backends
QuickApp comes with a default ASP.NET Core backend implementation. To implement other backends such as java, node, php, python, etc you will need to implement the APIs as defined in this Swagger API document: http://quickapp-pro.ebenmonney.com/swagger/v1/swagger.json.
Test the API from here: http://quickapp-pro.ebenmonney.com/swagger (Swagger UI)
// 20180122101848 // http://quickapp-pro.ebenmonney.com/swagger/v1/swagger.json { "swagger": "2.0", "info": { "version": "v1", "title": "QuickApp API" }, "basePath": "/", "paths": { "/api/Account/users/me": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountUsersMeGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/UserViewModel" } } } }, "put": { "tags": [ "Account" ], "operationId": "ApiAccountUsersMePut", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "user", "in": "body", "required": false, "schema": { "$ref": "#/definitions/UserEditViewModel" } } ], "responses": { "200": { "description": "Success" } } }, "patch": { "tags": [ "Account" ], "operationId": "ApiAccountUsersMePatch", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "patch", "in": "body", "required": false, "schema": { "type": "array", "items": { "$ref": "#/definitions/Operation" } } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Account/users/{id}": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountUsersByIdGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/UserViewModel" } } } }, "put": { "tags": [ "Account" ], "operationId": "ApiAccountUsersByIdPut", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" }, { "name": "user", "in": "body", "required": false, "schema": { "$ref": "#/definitions/UserEditViewModel" } } ], "responses": { "200": { "description": "Success" } } }, "delete": { "tags": [ "Account" ], "operationId": "ApiAccountUsersByIdDelete", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/UserViewModel" } } } }, "patch": { "tags": [ "Account" ], "operationId": "ApiAccountUsersByIdPatch", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" }, { "name": "patch", "in": "body", "required": false, "schema": { "type": "array", "items": { "$ref": "#/definitions/Operation" } } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Account/users/username/{userName}": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountUsersUsernameByUserNameGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "userName", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/UserViewModel" } } } } }, "/api/Account/users": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountUsersGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "type": "array", "items": { "$ref": "#/definitions/UserViewModel" } } } } }, "post": { "tags": [ "Account" ], "operationId": "ApiAccountUsersPost", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "user", "in": "body", "required": false, "schema": { "$ref": "#/definitions/UserEditViewModel" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Account/users/{page}/{pageSize}": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountUsersByPageByPageSizeGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "page", "in": "path", "required": true, "type": "integer", "format": "int32" }, { "name": "pageSize", "in": "path", "required": true, "type": "integer", "format": "int32" } ], "responses": { "200": { "description": "Success", "schema": { "type": "array", "items": { "$ref": "#/definitions/UserViewModel" } } } } } }, "/api/Account/users/unblock/{id}": { "put": { "tags": [ "Account" ], "operationId": "ApiAccountUsersUnblockByIdPut", "consumes": [], "produces": [], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success" } } } }, "/api/Account/users/me/preferences": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountUsersMePreferencesGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "type": "string" } } } }, "put": { "tags": [ "Account" ], "operationId": "ApiAccountUsersMePreferencesPut", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "data", "in": "body", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Account/roles/{id}": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountRolesByIdGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/RoleViewModel" } } } }, "put": { "tags": [ "Account" ], "operationId": "ApiAccountRolesByIdPut", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" }, { "name": "role", "in": "body", "required": false, "schema": { "$ref": "#/definitions/RoleViewModel" } } ], "responses": { "200": { "description": "Success" } } }, "delete": { "tags": [ "Account" ], "operationId": "ApiAccountRolesByIdDelete", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/RoleViewModel" } } } } }, "/api/Account/roles/name/{name}": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountRolesNameByNameGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "name", "in": "path", "required": true, "type": "string" } ], "responses": { "200": { "description": "Success", "schema": { "$ref": "#/definitions/RoleViewModel" } } } } }, "/api/Account/roles": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountRolesGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "type": "array", "items": { "$ref": "#/definitions/RoleViewModel" } } } } }, "post": { "tags": [ "Account" ], "operationId": "ApiAccountRolesPost", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "role", "in": "body", "required": false, "schema": { "$ref": "#/definitions/RoleViewModel" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Account/roles/{page}/{pageSize}": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountRolesByPageByPageSizeGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "page", "in": "path", "required": true, "type": "integer", "format": "int32" }, { "name": "pageSize", "in": "path", "required": true, "type": "integer", "format": "int32" } ], "responses": { "200": { "description": "Success", "schema": { "type": "array", "items": { "$ref": "#/definitions/RoleViewModel" } } } } } }, "/api/Account/permissions": { "get": { "tags": [ "Account" ], "operationId": "ApiAccountPermissionsGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "type": "array", "items": { "$ref": "#/definitions/PermissionViewModel" } } } } } }, "/api/Customer": { "get": { "tags": [ "Customer" ], "operationId": "ApiCustomerGet", "consumes": [], "produces": [], "responses": { "200": { "description": "Success" } } }, "post": { "tags": [ "Customer" ], "operationId": "ApiCustomerPost", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "value", "in": "body", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } } }, "/api/Customer/throw": { "get": { "tags": [ "Customer" ], "operationId": "ApiCustomerThrowGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "type": "array", "items": { "$ref": "#/definitions/CustomerViewModel" } } } } } }, "/api/Customer/email": { "get": { "tags": [ "Customer" ], "operationId": "ApiCustomerEmailGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "type": "string" } } } } }, "/api/Customer/{id}": { "get": { "tags": [ "Customer" ], "operationId": "ApiCustomerByIdGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "format": "int32" } ], "responses": { "200": { "description": "Success", "schema": { "type": "string" } } } }, "put": { "tags": [ "Customer" ], "operationId": "ApiCustomerByIdPut", "consumes": [ "application/json-patch+json", "application/json", "text/json", "application/*+json" ], "produces": [], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "format": "int32" }, { "name": "value", "in": "body", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" } } }, "delete": { "tags": [ "Customer" ], "operationId": "ApiCustomerByIdDelete", "consumes": [], "produces": [], "parameters": [ { "name": "id", "in": "path", "required": true, "type": "integer", "format": "int32" } ], "responses": { "200": { "description": "Success" } } } }, "/api/Home": { "get": { "tags": [ "Home" ], "operationId": "ApiHomeGet", "consumes": [], "produces": [ "text/plain", "application/json", "text/json" ], "responses": { "200": { "description": "Success", "schema": { "type": "array", "items": { "type": "string" } } } } } } }, "definitions": { "UserViewModel": { "required": [ "userName", "email" ], "type": "object", "properties": { "id": { "type": "string" }, "userName": { "maxLength": 200, "minLength": 2, "type": "string" }, "fullName": { "type": "string" }, "email": { "maxLength": 200, "minLength": 0, "type": "string" }, "jobTitle": { "type": "string" }, "phoneNumber": { "type": "string" }, "configuration": { "type": "string" }, "isEnabled": { "type": "boolean" }, "isLockedOut": { "type": "boolean" }, "roles": { "type": "array", "items": { "type": "string" } } } }, "UserEditViewModel": { "required": [ "userName", "email" ], "type": "object", "properties": { "currentPassword": { "type": "string" }, "newPassword": { "minLength": 6, "type": "string" }, "isLockedOut": { "type": "boolean" }, "id": { "type": "string" }, "userName": { "maxLength": 200, "minLength": 2, "type": "string" }, "fullName": { "type": "string" }, "email": { "maxLength": 200, "minLength": 0, "type": "string" }, "jobTitle": { "type": "string" }, "phoneNumber": { "type": "string" }, "configuration": { "type": "string" }, "isEnabled": { "type": "boolean" }, "roles": { "type": "array", "items": { "type": "string" } } } }, "Operation": { "type": "object", "properties": { "value": { "type": "object" }, "path": { "type": "string" }, "op": { "type": "string" }, "from": { "type": "string" } } }, "RoleViewModel": { "required": [ "name" ], "type": "object", "properties": { "id": { "type": "string" }, "name": { "maxLength": 200, "minLength": 2, "type": "string" }, "description": { "type": "string" }, "usersCount": { "format": "int32", "type": "integer" }, "permissions": { "type": "array", "items": { "$ref": "#/definitions/PermissionViewModel" } } } }, "PermissionViewModel": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "groupName": { "type": "string" }, "description": { "type": "string" } } }, "CustomerViewModel": { "type": "object", "properties": { "id": { "format": "int32", "type": "integer" }, "name": { "type": "string" }, "email": { "type": "string" }, "phoneNumber": { "type": "string" }, "address": { "type": "string" }, "city": { "type": "string" }, "gender": { "type": "string" }, "orders": { "type": "array", "items": { "$ref": "#/definitions/OrderViewModel" } } } }, "OrderViewModel": { "type": "object", "properties": { "id": { "format": "int32", "type": "integer" }, "discount": { "format": "double", "type": "number" }, "comments": { "type": "string" } } } }, "securityDefinitions": { "BearerAuth": { "name": "Authorization", "in": "header", "type": "apiKey", "description": "Login with your bearer authentication token. e.g. Bearer <auth-token>" } } }
3 Comments
Azzam
October 7, 2018 at 9:01 pmCan you eliminate elaborate a little more on how to use different backend? Thanks
bnrashed
July 24, 2019 at 2:18 pmHI Eden
can i use this temp with MySQL in replace of SQL server with Entity framework core
xawomo50
October 1, 2025 at 8:00 amIt’s definitely possible to run QuickApp with different backend technologies. The frontend is flexible enough that you can connect it with APIs built in .NET, Node.js, PHP, or even Python frameworks like Django/Flask, as long as you expose the required endpoints. The key is to maintain consistent API structures (REST or GraphQL) so the app can consume data without breaking.
For example, I’ve seen setups where QuickApp was integrated with a Node.js backend for real-time features, while others used .NET Core for enterprise applications. It mainly comes down to how well you structure the API and handle authentication/authorization between frontend and backend.
You can also check some practical solutions and tools I use for managing multi-tech stacks here:
https://www.dealspur.com.au/
https://www.multiculturalassist.com.au/