3scale API Gateway
Clone or download
Latest commit ed58e80 Oct 26, 2018
Permalink
Failed to load latest commit information.
.circleci .circleci/config: delete nightly workflow Sep 17, 2018
.github [github] change owner to core team Jun 7, 2018
benchmark [test] lua port of benchmark-ips May 30, 2018
bin [busted] cache ffi cdef Jul 4, 2018
doc Path routing is not experimental: Update CHANGELOG and parameters doc Oct 18, 2018
examples [example] update add-ssl example Jun 26, 2018
fixtures Add limits exceeded error in example config files Oct 12, 2017
gateway Merge branch 'master' into header-port Oct 23, 2018
openshift Set LOG_LEVEL param to required Jul 23, 2018
script [make] rename dependencies to lua_modules Aug 21, 2018
spec Merge branch 'master' into header-port Oct 23, 2018
t Merge branch 'master' into header-port Oct 23, 2018
travis [travis] build with latest openresty May 3, 2017
.busted [ci] print busted tests in the log as well as junit May 31, 2018
.codeclimate.yml [codeclimate] luacheck was released to the stable channel Jun 28, 2018
.codecov.yml codecov.yml: ignore files that codecov picks from outside gateway/src May 30, 2018
.dockerignore [make] improve development environment Jun 11, 2018
.env [proxy] introduce second cache handler Aug 4, 2017
.gitattributes [git] allow merge=union on the changelog file Mar 14, 2017
.gitignore [git] ignore tmp directory Jun 20, 2018
.lgtm [lgtm] configure lgtm approvals Sep 5, 2016
.luacheckrc [busted] helper to load fixtures Aug 28, 2018
.luacov run luacov Aug 21, 2016
.mailmap .mailmap: map authors to their names/addresses Nov 22, 2016
.travis.yml [travis] don't build builder image on travis May 31, 2018
3scale-gateway-openshift-template.yml rename to APIcast Oct 3, 2016
3scale-portal-endpoint-secret.yml rename to APIcast Oct 3, 2016
Brewfile [brew] link installed dependencies so they are available as commands Jun 6, 2018
CHANGELOG.md Merge branch 'master' into header-port Oct 23, 2018
Dangerfile [danger] require changelog only when merging to master May 9, 2017
LICENSE Change license file to have contents of Apache2.0 license Nov 25, 2016
MAINTAINERS Update MAINTAINERS Oct 10, 2016
Makefile [circleci] build images just once Sep 4, 2018
NOTICE Add NOTICE Nov 25, 2016
README.md README: revamp Oct 26, 2018
Vagrantfile [circleci] install native apicast for profiling Jun 28, 2018
docker-compose-devel.yml [make] improve development environment Jun 11, 2018
docker-compose.benchmark.yml [benchmark] more stable benchmark output Jun 28, 2018
docker-compose.yml [compose] provide jaeger all-in-one to try opentracing Apr 27, 2018
luarocks.config use resty-cli as lua interpreter Oct 12, 2017
openresty.repo Install openresty using the official RPM's Sep 2, 2016
package.json use yarn to install npm dependencies Mar 20, 2017
rockspec circleci Jul 3, 2017
schema.json minimal json schema specification for the config Sep 12, 2016
yarn.lock use yarn to install npm dependencies Mar 20, 2017

README.md

APIcast

CircleCI Docker Repository on Quay codecov

APIcast is an API gateway built on top of NGINX. It is part of the Red Hat 3scale API Management Platform.

Getting started

master branch is not recommended for production use. For the latest release, go to the Releases page

Docker

You need to specify an ACCESS_TOKEN, that you can get from the 3scale admin portal, and also your ADMIN_PORTAL_DOMAIN. If you are using SaaS, it is YOUR_ACCOUNT-admin.3scale.net.

docker run --name apicast --rm -p 8080:8080 -e THREESCALE_PORTAL_ENDPOINT=https://ACCESS_TOKEN@ADMIN_PORTAL_DOMAIN quay.io/3scale/apicast:master

You can use a JSON configuration file instead:

docker run --name apicast --rm -p 8080:8080 -v $(pwd)/config.json:/opt/app/config.json:ro -e THREESCALE_CONFIG_FILE=/opt/app/config.json quay.io/3scale/apicast:master

In this example config.json is located in the same directory where the docker command is executed, and it is mounted as a volume at /opt/app/config.json. :ro indicates that the volume will be read-only.

The JSON file needs to follow the schema, see an example file with the fields that are used by APIcast.

Openshift

You need to create a secret with your ACCESS_TOKEN and your ADMIN_PORTAL_DOMAIN:

oc secret new-basicauth apicast-configuration-url-secret --password=https://ACCESS_TOKEN@ADMIN_PORTAL_DOMAIN
oc new-app -f https://raw.githubusercontent.com/3scale/apicast/master/openshift/apicast-template.yml

Features

  • Performance: it is fast because it's built on top of NGINX and uses LuaJIT.
  • Scalability: APIcast is stateless, so it scales horizontally.
  • Request transformation: allows to modify the headers, the path and the arguments of a request.
  • Rate-limit: can apply limits based on a header, JWT claims, the IP of the request and many more.
  • Modular and extensible: thanks to the APIcast policies framework.
  • Monitoring with Prometheus.
  • OpenTracing integration with Jaeger.
  • Can be deployed in Openshift.
  • Integrates with IDPs like Keycloak to provide authentication based on OIDC.

Development

Using Docker you just need to run:

make development

That will create a Docker container and run bash inside it. The project's source code will be available in the container and sync'ed with your local apicast directory, so you can edit files in your preferred environment and still be able to run whatever you need inside the Docker container.

To install the dependencies inside the container run:

make dependencies

To run the unit tests inside the container:

make busted

To run the integration tests inside the container:

make prove

To learn about the other available make targets:

make help

APIcast uses:

  • OpenResty: a platform that includes NGINX, LuaJIT and Lua modules.
  • busted: for the unit tests.
  • Test::Nginx: for the integration tests.

Documentation

License

Apache 2.0