stub-stub

0.2.7 • Public • Published

stub

stub-stub

npm

stub-stub is a quick and dirty solution to getting your API stubbed out quickly. You can stub out your whole API by simply placing YAML files inside a sensible directory structure.

Installation

Globally:

npm install stub-stub -g

Locally:

npm install stub-stub --save-dev

Getting started

Create an api-stubs directory inside of your project root. Here's an example directory structure:

api-stubs/
├── auth
│   └── default.yml
├── cars
│   ├── 1.yml
│   ├── 2.yml
│   ├── xyz.yml
│   └── default.yml
└── users
    ├── 1.yml
    ├── 2.yml
    ├── 3.yml
    └── default.yml

With the given stubs directory, stub-stub would create multiple endpoints available to you. Some examples include:

Verb Endpoint Returns
GET / list all known resources
GET /cars json blob for all cars
GET /cars/1 json blob for car with id 1
GET /cars/xyz json blob for car with id xyz
GET /users json blob for all users
GET /users/2 json blob for user with id 2
POST /auth/do default json blob for auth

stub-stub works by creating endpoints for each YAML file nested within a given type. So for instance, a file at ./api-stubs/cars/1.yml would have a GET endpoint at /cars/1.

Any GET to a given resource extends the default.yml for the given type. You can also POST to any endpoint and receive the corresponding json blob.

Inheritance

Take for instance ./api-stubs/cars/1.yml with the following:

name: Prius
price: $20,000

as well as ./api-stubs/cars/default.yml with the following:

name: Default Car
price: $10,000
mpg: 40

A GET request to /cars/1 would return the merging of default.yml and 1.yml:

{
  "car": {
   "name":  "Prius",
   "price": "$20,000",
   "mpg":   40
  }
}

Starting stub-stub

stub-stub by default starts on port 4343. Why 4343? No idea, it just felt right at the time.

stub-stub

You can optionally run stub-stub on another port and/or from another directory.

stub-stub --port=8000 --stubs=foo

Inflection

Resources are by default pluralized/singularized depending on context using the inflect node module. So, for instance, a GET to /cars will return:

{
  "cars": [
    { "id": "1", "name": "Dodge"}
    { "id": "2", "name": "Buick" }
  ]
}

and a GET to /cars/1 would return:

{
  "car":
    {
    "id": "1",
    "name": "Dodge"
  }
}

Contributing

Fire up a development copy of stub-stub by issuing the following from the command line:

$ ./bin/cli.js

Ticket by Ryan Dell from The Noun Project

Readme

Keywords

none

Package Sidebar

Install

npm i stub-stub

Weekly Downloads

1

Version

0.2.7

License

MIT

Last publish

Collaborators

  • briangonzalez