Async-Microservice

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

        want_json
        content
        json_content

METHODS

 text_plain(@text_lines)

    Send text plain response.

 respond($status, $headers, $payload)

    Send a PSGI/Plack response.

    $headers must be an array reference of header key/value pairs.

    If $payload is not a reference, it is sent as plain text by default.
    When the request Accept header allows JSON and no explicit Content-Type
    header is already present, plain scalar payloads are wrapped
    automatically as JSON:

        { "data": "..." }

    For error statuses ($status >= 400), scalar payloads are wrapped as:

        { "error": { err_status => ..., err_msg => ... } }

    If $payload is a reference, it is serialized as JSON. When JSONP is
    enabled and a valid callback parameter is present, the response is
    emitted as application/javascript instead of application/json.

 redirect($location_path)

    Send redirect.

 static_ft($file_name, $content_cb)

    Send static file, can be updated/modified using optional callback.

 get_pending_req

    Returns number of currently pending async requests.


----------------------------------------------------------------------------
NAME

    Async::Microservice::Time - example time async microservice

SYNOPSIS

        # can be started using:
        plackup --port 8085 -Ilib --access-log /dev/null --server Twiggy bin/async-microservice-time.psgi
    
        curl "http://localhost:8085/v1/hcheck" -H "accept: application/json"
        curl "http://localhost:8085/v1/epoch"  -H "accept: application/json"
        curl "http://localhost:8085/v1/datetime?time_zone=local" -H "accept: application/json"

DESCRIPTION

    This is an example asynchronous HTTP microservice using
    Async::Microservice. View the source code; it's minimal.

METHODS

 service_name

    Just a name, used to identify process and look for OpenAPI
    documentation.

 get_routes

    Path::Router configuration for dispatching

 http response methods

  GET_datetime

    https://time.meon.eu/v1/datetime

  POST_datetime

        $ curl -X POST "https://time.meon.eu/v1/datetime" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{\"epoch\":-42}"
        {
           "date" : "1969-12-31",
           "datetime" : "1969-12-31 23:59:18 +0000",
           "day" : "31",
           "epoch" : -42,
           "hour" : "23",
           "minute" : "59",
           "month" : "12",
           "second" : "18",
           "time" : "23:59:18",
           "time_zone" : "+0000",
           "time_zone_name" : "UTC",
           "year" : "1969"
        }

  GET_epoch

    https://time.meon.eu/v1/epoch

  GET_sleep

    https://time.meon.eu/v1/sleep?duration=2.5

    This is the only response method processed in parallel (the other ones
    are pure CPU-bound) that sleeps for a given (or random) number of
    seconds and only then returns the request response with when it started
    and how long it took. Normally this is the same as what is in the
    duration parameter, but in case the server is overloaded with requests,
    the event loop may call the timer handler much later than the duration.
    Try:

        ab -n 1000 -c 500 http://localhost:8085/v1/sleep?duration=3
        Connection Times (ms)
                      min  mean[+/-sd] median   max
        Connect:        0  259 432.8     21    1033
        Processing:  3001 3090  72.5   3061    3253
        Waiting:     3001 3090  72.5   3061    3253
        Total:       3022 3349 394.1   3155    4065



( run in 0.837 second using v1.01-cache-2.11-cpan-39bf76dae61 )