Share My Creation [Project Template] Web API Server 2

Version: 2.08
Description: Create Web API Server using B4X project template

Database: MySQL, SQLite

Sample project: Support Ticketing System



If you don't want to connect to any SQL database, see MinimaList API Server
For older version, see Web API Server (v1.16)


Template:
  • Web API Server (2.08).b4xtemplate
Depends on:
GitHub:
Features:
  • ApiHandler and WebHandler are used for routing to Controller classes
  • HelpHandler (optional)
    • API documentation is generated automatically. You don't need external tools (e.g Postman or Swagger) for testing.
    • Access tokens can be embeded into request header in HelpHandler.
    • Controller classes are added to a list in Main module to show in the documentation.
  • Configuration
    • Web and API paths
    • Versioning
    • Simple JSON Response (Map or List)
    • Session
    • Cookies
    • Welcome message
  • Endpoint
    • Endpoint name is based on controller's name by default e.g ProductsController produces /web/api/v2/products
    • Endpoint name can be overridden by using #Name tag e.g /web/api/v2/product
    • Custom version name using #Version tag e.g v2, live, demo, dev, staging
    • Description in documentation is set using #Desc tag (in Web API v1, it was set by #Desc1, #Desc2 or Literals that was very confusing)
    • API endpoint can be hidden using #Hide tag
  • Clients
Tutorials:
  1. Getting Started
  2. Download File Example
  3. Vue 3 CRUD Example
Live:
Learn:

Version History:
  • (new) WebApiUtils v2.08
  • (new) MiniORMUtils v1.13
  • (new) WebAPIController v1.07
  • (change) Use DbFile instead of DbName for SQLite in config.ini
  • (change) Move code from ConfigureDatabase sub to Initialize sub in DatabaseConfiguration class
  • (remove) Delete build configurations and code for Firebird, PostgreSQL and MS SQL
  • (new) WebApiUtils v2.07
  • (new) MiniORMUtils v1.11
  • (new) WebAPIController v1.06
  • (new) Main module
    • SHOW_API_ICON to control API icon visible on frontend top navbar
  • (new) ServerConfiguration class
    • setEnableHelp to disable API Documentation and icon in frontend top navbar
    • setSimpleResponse replaces 3 old variables
  • (change) ServerConfiguration class
    • rename some variables
    • change some Public subs to Private
  • (change) Some index.html files deleted
  • (new) WebApiUtils v2.06
  • (new) MiniORMUtils v1.10
  • (new) WebAPIController v1.05
  • (new) Main module is cleaner
  • (new) Added ServerConfiguration class
  • (new) Added DatabaseConfiguration class
  • (new) Added empty index.html files into assets folders
  • (new) FindController - case insensitive and wildcard search
  • (change) Table tbl_category renamed to tbl_categories
  • (change) ServerConfiguration Update sub renamed to Finalize
  • (change) better handling of default values in config.ini
  • (fix) bug in v2.06 beta 1, no database set by default in config.ini
  • (fix) bug in v2.06 beta 2, PostProduct line#233 in ProductsController causing all data inserted as Timestamp
  • (new) MinimaList API Server (version 2.05) as a separate template
  • (new) MiniORMUtils (version 1.07)
  • (new) MinimaListUtils (version 1.02)
  • (new) WebApiController (version 1.04)
  • (new) Use a single public variable SimpleResponse instead of 3 different public variables.
  • (update) HelpHandler - JavaScript files for search is no longer generated during compilation.
    The files are now keep inside assets/js folder instead. SimpleResponse and standard JSON are supported.
    Thanks to projects Ticketing Support System and Shao.
  • (update) Some JavaScript files have been renamed using period instead of dash.
  • (new) Web Front-end with CRUD demo (similar to version 1)
  • (new) B4X Web API Client (version 1.05) supported (note: set ConfigureResponse(False))
  • (new) WebApiUtils.b4xlib (version 2.04) (Utility and WebUtils modules merged)
  • (new) WebAPIController (version 1.03) is backed
  • (new) MinimaListUtils.b4xlib (version 1.00)
  • (new) Database support (tested with SQLite and MySQL)
  • (new) Build Standalone Package supported
  • (new) Additional library for jdbc connector is set by selecting a Build configuration during Debug
  • (new) ConfigureServer subs are now enabled by passing Boolean value instead of commenting the line
  • (new) Utilize B4J v10.00 Code Snippets feature
  • (new) DatabaseConnector (for SQLite, MySQL, SQL Server, Firebird, PostgreSQL, DBF)
  • (new) SeedData for MinimaList
  • (new) ConfigureResponse added SimpleResponseDataKey (when SimpleResponseFormat = "Map", default is data)
  • (new) JavaScript files for supporting SimpleResponseFormat
  • (new) ReturnApiResponse sub added
  • (fixed) ConfigureServer subs order changed
  • (fixed) ConfigurePort
  • (fixed) ConfigurePaths
  • (fixed) ConfigureElements list element indices during Debug
  • (fixed) ConfigureHandlers
  • (fixed) ConfigureResponse added SimpleResponseFormat = "Auto"
  • (removed) Timezone setting
  • (removed) DataController class
  • (removed) ReturnSimpleHttpResponse
  • (removed) MinimaListController (version 1.05) -> succeeded by WebAPIController
  • (updated) MinimaList subs are renamed
  • (updated) ReturnHttpResponse
  • (updated) All Controllers
  • (updated) All Handlers
  • (other) Clean up unused code and many other bugs fixes

Code example:
B4X:
Private Sub GetCategory (id As Long)
    ' #Version = v2
    ' #Desc = Read one Category by id
    ' #Elements = [":id"]

    DB.Table = "tbl_category"
    DB.Find(id)
    If DB.Found Then
        HRM.ResponseCode = 200
        HRM.ResponseObject = DB.First
    Else
        HRM.ResponseCode = 404
        HRM.ResponseError = "Category not found"
    End If
    DB.Close
    ReturnApiResponse
End Sub

This project has been tested many many times. Please report bugs if you found any
Post your question in a new thread.




Special thanks to donors of this project:
  1. @yaqoob
  2. @Czampo
 

Attachments

  • Web API Server (2.08).b4xtemplate
    441.2 KB · Views: 171
  • WebApiUtils.b4xlib
    9.4 KB · Views: 159
  • MiniORMUtils.b4xlib
    14.3 KB · Views: 160
  • WebApiController.b4xlib
    4.5 KB · Views: 105
Last edited:

aeric

Expert
Licensed User
Longtime User

Optional Modules​

  1. JSON Web Tokens
  2. Encryption

Optional Filters​

  1. BasicAuth
  2. JWTAuth

Updates: These modules have been deprecated. They are no longer working without modifications. If you want to work with these modules, please post to a new thread.
 

Attachments

  • JSONWebToken.bas
    4.6 KB · Views: 303
  • Encryption.bas
    1.6 KB · Views: 303
  • BasicAuthFilter.bas
    1.8 KB · Views: 288
  • JWTAuthFilter.bas
    1.4 KB · Views: 326
Last edited:

aeric

Expert
Licensed User
Longtime User
I am making little progress in token authentication. Still figuring out how to properly use access token and refresh token in browser based Web app, mobile and desktop app.
 

aeric

Expert
Licensed User
Longtime User
A small issue i.e. I forgot to update the Client ID.

Change line #96 in Main module to following:
B4X:
AUTH.CLIENT_ID = "web-202301151435-web-api-200.computerise.net"        ' username

Updates: The issue is now fixed in GitHub repo.
 
Last edited:

aeric

Expert
Licensed User
Longtime User
I may be wrong.
Does anyone really use my Web API Template?
I have the feeling not much interest on this project. I don't see any discussion or question on the issue in this project. I feel it just a pet project that I am the only one feel good about it and provide no valuable real life use cases. ?

But...
The fact is I am powering my production apps with this template.
 

Davisbc

Member
Licensed User
I am try to use it as the foundation for a data collection app. The mobile collects data and then syncs with the web api. I started using the v1 template. It worked, but I found it difficult to try and convert to my database. I decided to start over and then found the v2 beta. I had to comment the auth code to make it work. from your comments, that part is a work in progress. My use case is an api pack end to update a database and maintain a transaction log. I have to believe it’s a common use case. All the best.
 

aeric

Expert
Licensed User
Longtime User
I believe v1 and v2 beta 3 have provided the foundation to build any Web API server. What I am adding are just on the implementation of the front end.

The security part in v2 can be ignored as I am actually using Session for log in user instead of JWT token.

Please ask any question if you found any issue.
I know there are some known issues and waiting someone to report.
One of them are usage of comment tags in HelpHandler but it is not really a big issue and won't affect the overall system.

When no one is reporting then I get the feeling no one is using it.
 

Davisbc

Member
Licensed User
Thanks. I have a bit more cleanup of the b4a before I plan on working the backend again. That’s why I was asking when you planned on updating the template so I would start with a clean code. Cheers
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…