Webda — Welcome to Serverless Applications

DZone 's Guide to

Webda — Welcome to Serverless Applications

See how using Webda can make creating and testing serverless apps an easier process.

· Cloud Zone ·
Free Resource

With the revolution of the cloud, we got very used to IaaS. Whenever we want a server, we just call an API and here we are with a brand new server ready within minutes!

But minutes were way too long for us! So, then came Docker, which made it possible to have all our environments loaded within seconds.

Of course, for all this, you still needed a server to run on. Two years ago, AWS came up with Lambda, where all we have to do is store the function and trigger it either with other AWS service events or an HTTP request.

Now, let's take the example of running lots of small services, which are called only a few thousand times per month, but as we cannot predict the time when they'll be used, they are just sitting there the rest of the time. Without Lambda, we will need more than one Docker container to run these services with failover. So, the idea of having the failover and scaling without having to take care of any containers or servers was a no-brainer for me.


When you use Lambda and want to expose through HTTP, you discover that you can use the API Gateway of AWS. It is a nice technology, but it's kind of complex to configure. When something goes wrong in your code, you cannot debug it as easily as when it was hosted on your machine.

So, this is where the idea of Webda comes in!

The Goal

The goal of Webda is to have a framework that allows you to code locally and test it using a Node.js and then deploy it automatically either to Lambda with API Gateway or by creating a Docker image with it including a Node.js server.

This way, you can easily debug locally and then deploy to your AWS environment in a second.

Let's take a look at how to get started and create a new project.


To start with you can checkout our demo project in GitHub and our video presentation in Youtube

1. Create a Project

npm install -g webda-shell
    webda config

You have the configuration UI available, where you can create a service, use a service, or create a custom API resource. You can also manually edit thewebda.config.json if you want.

Below is the manual step with the manual modification. I would recommend using the configuration UI to modify the webda.config.json.

2. Create a New Route

We will use the inline RouteHelper here. Except for the Lambda Route helper, the others are mainly there for quick and easy tests, but you should use a service when you can, as they are easier to unit test and also make code cleaner.

    "*": "demo.webda.io",
    "demo.webda.io": {
        "/myurl": {
            "type": "inline",
            "callback": "function(ctx) { ctx.write('I am an inline route'); }"

3. Create a New Service

We will now create a new executor so that we can map some URLs directly to the service.

const Executor = require('webda/services/executor')

class MyService extends Executor {

    init(config) {
        // Let's add our routes here, for Modda the URL should be dynamic
        config['/myservice']={method:["GET", "DELETE"], _method: this.handleRequest, executor: this};

    delete(ctx) {
        // If we dont output anything, then the default result will be a 204

    get(ctx) {
        // Should output : I am a getter and i've sent an welcome email to you
        let otherService = this.getService("Mailer");

    handleRequest(ctx) {
        if (ctx._route._http.method === "GET") {
        } else {

Here is the corresponding configuration:

    services: {
        "MyService": {
            require: "./myservice.js",
            sentence: "I am a getter and i've sent an welcome email to you"

4. Run It

webda serve

You can call http://localhost:18080/myservice, and see the nice output:

"I am a getter and i've sent a welcome email to you"

And call http://localhost:18080/myurl to get:

"I am an inline route"

Deploy It to the Cloud

First, you need to create a deployment from the configuration UI. Then just use the Deploy button on the UI or the webda bin:

webda deploy Test

That's it! Your new API is now ready to rock!

api, aws, lambda, server

Published at DZone with permission of Rémi Cattiau , DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}