/janus

Janus is a fake rest api server

Primary LanguageGoMIT LicenseMIT

##Janus

Janus is a fake rest api server which can be used for various purpose including frontend application development , testing etc.

Features

  • Easy to configure and use.
  • Supports all http methods and REST resources.
  • Supports CORS.
  • Basic Auth Support
  • Available in all platforms.

Install

Get Binary Distribution

You can download the latest binary distribution from here

Build from source

Go should be installed (version 1.4+ is required) in the system. Make sure you have Go properly installed, including setting up your GOPATH.

go get -u github.com/jijeshmohan/janus

How to run

To run janus, go to any directory and create a json file called config.json . This defines the REST endpoints which server need to expose. ( config.json file described in the next section.). Run the application in the same directory by typing janus in the terminal

Note : A sample config and associated files are there in example directory.

Basic Structure of a config.json file

The basic structure of config file shown below. A config file has follwing attributes

  • port
  • enableLog
  • delay
  • auth
  • jwt
  • resources
  • urls
  • static

Detailed description of each attributes are below.

e.g config.json

{
  "port": 8080,
  "enableLog": false,
  "delay": 0,
  "auth": {
    "username": "user1",
    "password": "secret"
  },
  "resources": [
    {
      "name": "user",
      "headers": {
        "key": "value"
      }
    }
  ],
  "urls": [
    {
      "url": "direct/url/for/something",
      "method": "GET",
      "content_type": "application/json",
      "status": 200,
      "file": "./files/some.json",
      "headers": {
        "key": "value",
        "key1": "value1"
      }
    }
  ]
}
Port

port in configuration file defines in which port the server needs to run.This is an optional field and if not provided the default port is 8000.

EnableLog

enableLog in configuration file defines whether we need to log the requests form clients. Default values is false.

Delay

delay in configuration file provides a response delay ( in milliseconds). Default value is 0 which means there is no delay. This feature helps to simulate network delay or server response time.

Auth

auth in configuration provides basic auth support in janus. This is an optional field. If provided this will verify the username and password for all requests.

You need to specify username and password like below

"auth": {
  "username": "user1",
  "password": "password"
}
JWT

jwt in configuration provides jwt support in janus. This will issue a new jwt token when they call the url specified in jwt section below.

"jwt": {
  "url": "/auth/token",
  "exp:" 12, // expiry in minutes 
  "secret": "secret key"
  "data": {
    "userid": 1234,
    "admin": false
  }
}
Static

staic in configuration allows to serve static files in janus. With this option you can make janus to serve static files for your api ( e.g. javascript frontend like angular, reactjs etc..)

"static": {
	"url": "/ui",
	"path": "public"
}

In above configuration, url specifies what would be the root path of your static files , like http://localhost:8080/ui/index.html and path specified the actual directory from which teh static files need to be served. This is relative to the configuration files directory.

REST enspoints

You can define two types of REST endpoints in the configuration file

  • resources
  • urls
Resources

This represent basic REST resource which will exposes all standard methods. Janus will look for a folder with the name of the resource in the same directory as routes.json for sending the data correspoding to the methods.

e.g:

{
	"name": "user"
	"headers": {  // headers field is optional
		"key": "value"
	}
}

e.g for user resource , it wil look follwoing files to send the data

Verb Url FILE Description
GET /user ./user/index.json if the file not available app will send a 404
POST /user ./user/post.json if file is present it will send 201 with the content of the file otherwise 404
GET /user/:item ./user/[any file name which is matching :item].json if the file present, it will send the file with 200, otherwise 404. you can add item1.json, item2.json etc if you want to fake different get request
PUT /user/:item will use the same file specified above if file is present it will send 200 with the content of the file otherwise 404. You can specify any number of files to match the get requst like user1.json, admin.json etc.
PATCH /user/:item will use the same file specified above if file is present it will send 200 with the content of the file otherwise 404.
DELETE /user/:item will use the same file specified above if file is present it will send 200 with the content of the file otherwise 405. If you have specified item1.json, then it will send 200 for that particular item's request.

You can specify any header informations which need to send along with the methods. This is optional field

Urls

Urls section is for specifying individual urls which can't qualify for a standard REST resource methods.

This section gives more freedom in terms for defining HTTP Methods and content type and files.

A single url representasion showed below

 {
   "url": "/admin/user/enable", //mandatory
   "method": "GET", // mandatory
   "content_type": "application/json", // optional. default to application/json; charset=utf-8
   "status": 200, // optional , default to 200
   "file": "./files/some.json" // optional, if not specified , the response will be empty string. if specified it should be a valid file.
   "headers": {  //Optional
    "key": "value",
    "key1": "value1"
   }
}

Note: Url also support dynamic url like /admin/{user}/enable which can match to any user name like /admin/user1/enable or /admin/anotheruser/enable .

TODO

  • File upload support
  • Compression
  • Websocket support.
  • Admin UI for configuration and adding url at runtime.

Changelog

Please check the changelog here

License

The MIT License.