Fusio 2.0: An PHP based API management platform

With this post we want to introduce Fusio 2.0 which is a modern PHP based API management and platform which helps to build and manage APIs.

History

To better understand the evolution of Fusio, I would like take a look at the history of PHP. This starts at roughly the early 2000 years where many CMS/Blog projects like WordPress, Drupal, Typo3 emerged. This was the time where the main problem was to serve dynamic HTML content for the web. From there frameworks like Symfony/Laravel evolved to build more generic web apps which are not targeted at content management. At the heart those frameworks are designed to build web apps, this means they have many components to solve those problems i.e. a template engine to render HTML, a component to process forms, a way to save this data through some ORM at the database, etc.

  • OAuth2 authorization
  • Handling Rate-Limits
  • JSON validation and transformation
  • Automatic SDK generation
  • Event pub/sub support to build async APIs
  • Monetization to charge for API calls
  • Developer portal where external developers can register

Use-Cases

To give you an overview what Fusio provides we take a look at the most common use cases:

API-Gateway

Fusio can be used as gateway to your internal API and microservices.

Low-Code-Platform

Fusio allows you to build API endpoints without coding knowledge.

API-Framework

Fusio can be used as API framework to build complete customized API endpoints.

Installation

To get started please head to Github and download the latest release of Fusio. Then you need to move the folder into the document root of your web server. To install Fusio you can use either the web based installer (located at public/install.php) or you can use the CLI installer. Therefor you need to enter the database credentials to the configuration and run the install command:

php bin/fusio install

Routes

To start building an API you have to define at first a route. A route is a path i.e. “/foo/bar” or “/foo/:year” which redirects an incoming request to the fitting action. Every route has a corresponding YAML config file which describes the route:

  • scopes: Assigns the route to the defined scopes. Scopes are used to give users only access to specific endpoints. In this example a user needs to have access to the “comment” scope to post a new comment.
  • methods: This lists all available request methods. The endpoint returns a 405 Method Not Allowed in case the method is not available.
  • public: Indicates whether the endpoint is public or private. In case the endpoint is private a user needs to provide an access token (which also has the fitting scopes assigned) to access the method.
  • description: A general description what this method does. It is also used in various API specification formats i.e. OpenAPI to describe the API more in detail.
  • request: Contains a model which describes the request payload. The action receives the model containing the JSON data.
  • responses: Contains a model for each response code which describes the response body format. Should contain for each possible status code a fitting schema or at least for the success response.
  • action: The action describes a class, script or url which is called on request. The action executes then the endpoint logic and produces the fitting response.

Model

To work with fully typed models Fusio uses TypeSchema. Through TypeSchema we can automatically generate model classes which can be used as request and response class. In TypeSchema we describe a type through a JSON specification, the following shows an example schema:

Action

An action is the basic building block in Fusio and triggers your business logic. It is like a controller in a classical framework, you can also think of it like a serverless lambda function, which can be executed on a route call or via RPC. Every action is independently from each other, this means if one action has a bad performance or is badly written it does not affect the rest of your app. Through this design it is also easy possible to extract your business logic inside an action into a micro-service.

Conclusion

This was a short introduction to Fusio, please checkout our GitHub repository or website for more information. We look forward to bring innovation into the way how we build API based apps in PHP.

I am a developer in the API space, currently working on Fusio an open source API management platform

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store