Package io.inversion

Class Action<A extends Action>

java.lang.Object
io.inversion.Rule<A>
io.inversion.Action<A>
All Implemented Interfaces:
Comparable<A>
Direct Known Subclasses:
AclAction, AuthAction, CsvAction, DbAction, DbDeleteAction, DbGetAction, DbPostAction, MockAction

public class Action<A extends Action> extends Rule<A>
Actions perform some work when matched to a Request and potentially contribute to the content of the Response.

The Action Sandwich

Nearly the entire job of the Engine and Api Endpoint configuration is to match one or more Action subclass instances to a Request. All matched actions are sorted by their order property and executed in sequence as a Chain of Responsibility pattern. Colloquially, at Rocket Partners we somehow started to call this the 'action sandwich'.

If an Action should be run across multiple Endpoints, a logging or security Action for example, it can be added directly to an Api via Api.withAction.

In most cases however, you will group sets of related actions under an Endpoint and add the Endpoint to the Api.

Both Api registered Actions and Endpoint registered Actions can be selected into the 'action sandwich' for a particular Request.

One big difference however is that includesPaths and excludePaths are relative to the Api path for

Api registered Actions and relative to the Endpoint path for Endpoint registered actions. They are all sorted togeter in one big group according to order.

Handling Requests

Once the Engine has selected the Actions to run for a given request (creating the 'action sandwich'), they are all loaded into a Chain object which is responsible for invoking run(Request, Response) on each one in sequence.

You can override run to process all Requests this Action is selected for, or you can override any of the HTTP method specific doGet/Post/Put/Patch/Delete() handlers if you want to segregate your business logic by HTTP method.

  • Constructor Details

    • Action

      public Action()
    • Action

      public Action(String methods, String paths)
      Parameters:
      methods - a comma separated list of http methods to match
      paths - a comma separated list of url paths to match
  • Method Details

    • run

      public void run(Request req, Response res) throws ApiException
      Override this method with your custom business logic or override one of the http method "doMETHOD" specific handlers.
      Parameters:
      req - the Request being serviced
      res - the Reponse being generated
      Throws:
      ApiException
    • run0

      protected void run0(Request req, Response res) throws ApiException
      Throws:
      ApiException
    • doGet

      public void doGet(Request req, Response res) throws ApiException
      Handle an HTTP GET.

      Override run() to handle all requests or override this method with your business logic specifically for a GET request

      Parameters:
      req - the request to run
      res - the response to populate
      Throws:
      ApiException
    • doPost

      public void doPost(Request req, Response res) throws ApiException
      Handle an HTTP POST.

      Override run() to handle all requests or override this method with your business logic for a POST request

      Parameters:
      req - the request to run
      res - the response to populate
      Throws:
      ApiException
    • doPut

      public void doPut(Request req, Response res) throws ApiException
      Handle an HTTP PUT.

      Override run() to handle all requests or override this method with your business logic for a PUT request

      Parameters:
      req - the request to run
      res - the response to populate
      Throws:
      ApiException
    • doPatch

      public void doPatch(Request req, Response res) throws ApiException
      Handle an HTTP PATCH.

      Override run() to handle all requests or override this method with your business logic for a PATCH request

      Parameters:
      req - the request to run
      res - the response to populate
      Throws:
      ApiException
    • doDelete

      public void doDelete(Request req, Response res) throws ApiException
      Handle an HTTP DELETE.

      Override run() to handle all requests or override this method with your business logic for a DELETE request

      Parameters:
      req - the request to run
      res - the response to populate
      Throws:
      ApiException