Share My Creation [Project Template] Web API Server 2

aeric

Expert
Licensed User
Longtime User
Web API Template 2 (MinimaList Edition) - NO Database Needed
version: 2.00
Uploaded in post #1 (only 261KB)

This is a very minimum template where you don't even need to connect to a database to work. Optionally you can start with keyValueStore to persist the model. This will be a foundation to more complex Web API projects.
 
Last edited:

aeric

Expert
Licensed User
Longtime User
Web API Template 2
version: 2.01
Uploaded in post #1 (only 260KB)

What's New?
  • Added: IndexController - routes to default home page (index.html template is also added)
  • Added: WebHandler - call IndexController
  • Added: CorsFilter
  • Improved: ApiHandler is now easier to use - A new RouteData sub can be use to route to other methods (e.g RouteDataGet and RouteDataPost)
  • Note: MinimaList data is now not persist using KeyValueStore by default. Meaning, data is reset when server is restarted. You can uncomment ConfigureKeyValueStore in ConfigureServer sub to persist the data.

 

aeric

Expert
Licensed User
Longtime User
Please start a new thread in Chinese forum.
I will provide more examples and tutorials in the future.

请在中文论坛开一个新帖。
以后我会提供更多的例子和教程。
 

aeric

Expert
Licensed User
Longtime User
Web API Template 2
version: 2.02
Uploaded in post #1 (432KB)

What's New?
  • Improved: ConfigureHandlers in Main module
  • Improved: More comments and integration guide in Main module
  • Improved: Removed unused global variables in Main module
  • Improved: Group unused Configurations in Main module
  • Improved: ApiHandler minor fixes
  • Improved: DataController minor fixes
  • Added: ReadConfig sub in Main module
  • Added: Shortcut link in AppStart by hovering mouse pointer to open the default page
  • Added: 2 fontawesome woff files to fix warnings in web dev tools (increases file size)
 

aeric

Expert
Licensed User
Longtime User
There is a bug in v2.02
Will update it soon Updated v2.02.1 in post #1

Note: DataController is now reading the item id instead of the list item index. This is easier to work with the vue app in Tutorial Example 2.

I need to add
B4X:
Minima.Initialize
before
B4X:
ConfigureServer
or else the object is not initialized.

B4X:
Sub AppStart (Args() As String)
    srvr.Initialize("")       ' Create the server
    ReadConfig                ' Read environment settings
    Minima.Initialize         ' Initialize MinimaList
    ConfigureServer           ' Configure the server
    srvr.Start                ' Start the server
    StartMessageLoop
End Sub
 
Last edited:

aeric

Expert
Licensed User
Longtime User
MinimaList Controller (use with MinimaList and KeyValueStore)
version: 1.00
Attached in post #2 (2KB)

Deprecated: Check the new tutorial [Web API 2] Tutorial - Using MinimaList Controller

How to use:
  1. Unzip the jar and xml file to B4J Additional Library folder
  2. Find and check "MinimaListController" in B4J Libraries Manager
  3. Go to menu Project > Add New Module > Class Module and select "MinimaList Controller"
  4. Give a name e.g "UserController"
  5. A boilerplate controller is added with subs contains the word "Item"
  6. You can use Quick Search to rename the word "Item" to "User"

Working with MinimaList
  1. You need to create a new MinimaList object in Main module
  2. In Process_Globals sub of Main module, add the following line:
    B4X:
    Public MinimaUser As MinimaList
  3. Inside AppStart sub, initialize the object
    B4X:
    MinimaUser.Initialize
  4. In ConfigureControllers sub, add the controller so you can check with the API documentation
    B4X:
    Public Sub ConfigureControllers
        Controllers.Initialize
        Controllers.Add("DataController")
        Controllers.Add("UserController")
    End Sub
  5. Inside UserController class, using Quick Search tab, replace the word "Item" to "User", "Minima" to "MinimaUser"
  6. Go to ApiHandler, inside ProcessRequest sub, add a new route
    B4X:
    Select ControllerElement
        Case "data"
            RouteData(ApiVersionElement, ControllerIndex, FirstIndex, SecondIndex)
            Return
        Case "user"
            RouteUser(ApiVersionElement, ControllerIndex, FirstIndex)
            Return
    End Select
  7. You can clone the code for RouteData (and other related subs) to RouteUser
  8. You can use Quick search, highlight the copied code and replace the word "Data" to "User" using the "In Selection" button
  9. Adjust the parameter or delete SecondIndex if it is not used.
  10. Test the new API using the documentation page.
This is some work. Hopefully the steps are more simplified in the future.
 
Last edited:

aeric

Expert
Licensed User
Longtime User
Web API Template 2
version: 2.03
Uploaded in post #1 (434KB)

What's New?
  • Improved: ApiHandler is now more cleaner. All logic should put in controller class. ApiHandler will call the Route method without any parameter of the controller.
  • Changed: Sub ConfigureResponse is now disabled. JSON Response is now follow "standard" format by default, instead of "simple" format. You can still enable it.
B4X:
Select ControllerElement
    Case "data"
        Dim Data As DataController
        Data.Initialize(Request, Response)
        Data.Route
        Return
    Case "item"
        Dim Item As ItemController
        Item.Initialize(Request, Response)
        Item.Route
        Return
End Select
 

aeric

Expert
Licensed User
Longtime User
Web API Controller (use with MinimaList and KeyValueStore)
version: 1.01
Attached in post #2 (2KB)

What's New?
  • Improved: Simplified code flow and no more passing Indices as parameters to methods
 
Last edited:

Xfood

Expert
Licensed User
I already answered in post #13.
I don't share the blog system as Web API Template 2.0 but will consider to publish as another product.
always with the same logic you could create a support ticket system, to manage helpdesk calls, I would be willing to buy such a source, and I also believe many in this community would benefit from it
 

aeric

Expert
Licensed User
Longtime User
always with the same logic you could create a support ticket system, to manage helpdesk calls, I would be willing to buy such a source, and I also believe many in this community would benefit from it
 

aeric

Expert
Licensed User
Longtime User
A new version of MinimaList is posted in code snippets
 

aeric

Expert
Licensed User
Longtime User
Web API Template 2
version: 2.04 beta1
(443KB)
Note: This is still in beta version

What's New?
  • Support B4X Web API Client
  • Web Front-end with CRUD Demo
  • MinimaListController replaced WebAPIController

For Web API Client (1.05), modify the following line in B4XMainPage class:
B4X:
'Private URL As String = "http://192.168.50.42:19800/v1/"
Private URL As String = "http://192.168.50.42:19800/web/api/v2/"
 

aeric

Expert
Licensed User
Longtime User
Web API Template 2
version: 2.04 beta2
(442KB)
Note: This is still in beta version

What's New?
  • Support B4X Web API Client 1.05
  • Web Front-end with CRUD Demo
  • MinimaListController replaced WebAPIController
  • Changes in ConfigureServer subs order and ConfigurePort is enabled as default
  • Clean up unused code
  • Timezone removed
  • DataController has been removed
  • Methods inside MinimaList class are renamed
Seed dummy data by calling:
 
Last edited:

aeric

Expert
Licensed User
Longtime User
Web API Template 2
version: 2.04 beta3
(435KB)
Note: This is still in beta version and for testing B4J 10.00 Snippets feature

What's New?
  • Support B4X Web API Client 1.05
  • Web Front-end with CRUD Demo
  • Changes in ConfigureServer subs order and ConfigurePort is enabled as default
  • Clean up unused code
  • Timezone removed
  • DataController has been removed
  • Methods inside MinimaList class are renamed
  • (new) WebApiUtils.b4xlib (with Code Snippets) replaces Utility and WebUtils modules
  • (new) MinimaListController (version 1.05) replaces WebAPIController
Edit: Check version 2.04 beta 4
 
Last edited:
Cookies are required to use this site. You must accept them to continue using the site. Learn more…