Fusio

About

Fusio is an open source API management platform which helps to build and manage RESTful APIs. We think that there is a huge potential in the API economy. Whether you need an API to expose your business functionality, develop One-Page web applications, Mobile-Apps or Microservices. Because of this we think that Fusio is a great tool to build such APIs. If you like the project and want to see it grow please checkout the repository.

Architecture

If you are researching API solutions you probably hear often the term API-Gateway/Proxy and API-Management. Fusio is an API-Management system in the sense that it helps to develop actual API endpoints (which i.e. request and transform data from a database). It is not limited to proxy requests to another API. The following diagram should give you a better overview.

Fusio uses the backend services to produce the API response or to handle the request data. A backend service can be i.e. a database, message queue or another API. It is also very easy to implement a custom connection to support any kind of service.

The API can then be used by apps which are developed by yourself or by 3rd party developers. The apps can be i.e. javascript apps (like AngularJS, React, etc.), mobile apps or actual desktop apps which need to communicate with your API. The Fusio backend app uses also an internal API to configure the system. Because of that it is also very easy to integrate Fusio into an existing system, since you actually could also configure the complete system through the API.

Actions and Connections

Fusio has the concept of actions and connections. An action represents the code which handles an incoming request and which produces a response. Each action can use connections to accomplish this task. A connection uses a library which helps to work with a remote service. I.e. the SQL connection uses the Doctrine DBAL library to work with a database. The following list shows the available connections and the provided return type which you can use inside an action.

Models

Fusio has not a model or entity system like many other frameworks. We think that building API endpoints based on models/entities limits the way how you would design a response. With Fusio you only describe the request and response in the JSON schema format. This schema is then the contract of your API endpoint, how you produce this response technically is secondary. Fusio provides the mentioned connections, which help you to create complete customized responses based on complicated SQL queries, message queue inserts or multiple remote HTTP calls.

Use cases

  • Business functionality

    Exposing an API of your business functionality is a great way to extend your product. You enable customers to integrate your business value into other applications which gives the possibility to open up for new markets. With Fusio you can build such APIs and integrate them seamlessly into your product. We also see many companies which use the API itself as the core product.

  • Micro services

    With Fusio you can simply build small micro services which solve a specific task in a complex system.

  • Javascript applications

    Javascript frameworks like i.e. AngularJS or EmberJS becoming the standard. With Fusio you have a servless backend which helps to simply develop the API logic.

  • Mobile apps

    Almost all mobile apps need some form to interact with a remote service. This is mostly done through REST APIs. With Fusio you can easily build such APIs which can also be used by other applications.

License

Fusio is licensed under the AGPLv3. It is possible to use Fusio for commercial products but if you extend the code of Fusio (i.e. develop custom actions) you are required to license this code also under the AGPL which requires that the source code must be public available. Please contact us if you have any questions regarding the license or need other license options.

Christoph Kappestein
Developer, open-source enthusiast and chess player. Talk is cheap show me the code!
Community
If you like to contribute to the project please check the contribution guide on GitHub.