apisprout

by danielgtaylor

danielgtaylor / apisprout

Lightweight, blazing fast, cross-platform OpenAPI 3 mock server with validation

462 Stars 56 Forks Last release: over 1 year ago (v1.3.0) MIT License 95 Commits 6 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

API Sprout

Go Report Card Build Status GitHub tag (latest SemVer) Docker Pulls

A simple, quick, cross-platform API mock server that returns examples specified in an API description document. Features include:

  • OpenAPI 3.x support
    • Uses operation
      examples
      or generates examples from
      schema
  • Load from a URL or local file (auto reload with
    --watch
    )
  • CORS headers enabled by default
  • Accept header content negotiation
    • Example:
      Accept: application/*
  • Prefer header to select response to test specific cases
    • Example:
      Prefer: status=409
  • Server validation (enabled with
    --validate-server
    )
    • Validates scheme, hostname/port, and base path
    • Supports
      localhost
      out of the box
    • Use the
      --add-server
      flag, in conjunction with
      --validate-server
      , to dynamically include more servers in the validation logic
  • Request parameter & body validation (enabled with
    --validate-request
    )
  • Configuration via:
    • Files (
      /etc/apisprout/config.json|yaml
      )
    • Environment (prefixed with
      SPROUT_
      , e.g.
      SPROUT_VALIDATE_SERVER
      )
    • Commandline flags

Usage is simple:

# Load from a local file
apisprout my-api.yaml

Validate server name and use base path

apisprout --validate-server my-api.yaml

Dynamically Include a new server / path in the validation

apisprout --add-server http://localhost:8080/mock --validate-server my-api.yaml

Load from a URL

apisprout https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/api-with-examples.yaml

Docker Image

A hosted API Sprout Docker image is provided that makes it easy to deploy mock servers or run locally. For example:

docker pull danielgtaylor/apisprout
docker run -p 8000:8000 danielgtaylor/apisprout http://example.com/my-api.yaml

Configuration can be passed via environment variables, e.g. setting

SPROUT_VALIDATE_REQUEST=1
, or by passing commandline flags. It is also possible to use a local API description file via Docker Volumes:
# Remember to put the full path to local archive YAML in -v
docker run -p 8000:8000 -v $FULLPATH/localfile.yaml:/api.yaml danielgtaylor/apisprout /api.yaml

Installation

Download the appropriate binary from the releases page.

Alternatively, you can use

go get
:
go get github.com/danielgtaylor/apisprout

Extra Features

Remote Reload

If your API spec is loaded from a remote URL, you can live-reload it by hitting the

/__reload
endpoint.

Health Check

A simple endpoint which returns status code

200
is available at
/__health
. This endpoint successfully returns
200
even if
--validate-server
is turned on, and the endpoint is being accessed from a non-validated host.

Contributing

Contributions are very welcome. Please open a tracking issue or pull request and we can work to get things merged in.

Release Process

The following describes the steps to make a new release of API Sprout.

  1. Merge open PRs you want to release.
  2. Select a new semver version number (major/minor/patch depending on changes).
  3. Update
    CHANGELOG.md
    to describe changes.
  4. Create a commit for the release.
  5. Tag the commit with
    git tag -a -m 'Tagging x.y.z release' vx.y.z
    .
  6. Build release binaries with
    ./release.sh
    .
  7. Push the commit and tags.
  8. Upload the release binaries.

License

Copyright © 2018-2019 Daniel G. Taylor

http://dgt.mit-license.org/

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.