Publish a REST service

In publishing the service you provide your service to users who can access it on the net.

Functions of your service you want to publish, must be defined as PUBLIC. When you publish a service, only the functions that are public are generated in the OpenAPI specification file. Functions that are private, are not available as operations of the service and are therefore not generated.

To publish a service, for example, in the service's main module, you:
  1. Import the service module.
  2. Call on the com.WebServiceEngine.RegisterRestService() method to register the service.
  3. Call on the com.WebServiceEngine.ProcessServices() method to start the service.

Web service main module

This is an example of a module that runs a Web service. The IMPORT FGL statement imports the service module "serviceModule", allowing its public-defined variables and functions to be referenced.

In the call to the RegisterRestService() method, the Web service module "serviceModule.4gl" is registered with the GWS server as a REST service. The name of the service is set to "MyService". This is the public name given to the REST service, used in the URI endpoints to access its resources.

The call to ProcessServices() is made to start the service process within a WHILE loop. Within the loop requests for services are processed and various Web service engine errors are handled. The Web service runs until interrupted.

IMPORT com
IMPORT FGL serviceModule

MAIN
  DEFINE ret INTEGER
  CALL com.WebServiceEngine.RegisterRestService("serviceModule", "MyService")
  DISPLAY "Server started"
  CALL com.WebServiceEngine.Start()
  WHILE TRUE
    LET ret = com.WebServiceEngine.ProcessServices(-1)
    CASE ret
       WHEN 0
         DISPLAY "Request processed." 
       WHEN -1
         DISPLAY "Timeout reached."
       WHEN -2
         DISPLAY "Disconnected from application server."
         EXIT PROGRAM   # The Application server has closed the connection
       WHEN -3
         DISPLAY "Client Connection lost."
       WHEN -4
         DISPLAY "Server interrupted with Ctrl-C."
       WHEN -9
         DISPLAY "Unsupported operation."
       WHEN -10
         DISPLAY "Internal server error."
       WHEN -23
         DISPLAY "Deserialization error."
       WHEN -35
         DISPLAY "No such REST operation found."
       WHEN -36
         DISPLAY "Missing REST parameter."
       OTHERWISE 
         DISPLAY "Unexpected server error " || ret || "."
        EXIT WHILE 
     END CASE
     IF int_flag<>0 THEN
       LET int_flag=0
       EXIT WHILE
     END IF     
  END WHILE
  DISPLAY "Server stopped"
END MAIN