Fusio offers some unique concepts which are described on this page.
The Fusio marketplace is integrated into the backend app of Fusio, it can be seen like an app store where you can install and provide Fusio related entities. To publish entities to the marketplace you need to register and then you can publish actions, schemas etc. directly from your local instance to the marketplace. Our vision is that the marketplace becomes a thriving platform where our users can share bundles and apps to build something bigger.
With Fusio we want to enable everybody to build great APIs, therefor we have developed a flexible worker system which allows you to build actions in different programming languages. Inside your action you can get all configured connections to implement your business logic.
<?php
use Fusio\Worker;
use Fusio\Engine;
use Psr\Log\LoggerInterface;
return function(Worker\ExecuteRequest $request, Worker\ExecuteContext $context, Engine\ConnectorInterface $connector, Engine\Response\FactoryInterface $response, Engine\DispatcherInterface $dispatcher, LoggerInterface $logger) {
$connection = $connector->getConnection('my_database');
// @TODO implement my API endpoint logic
return $response->build(200, [], [
'hello' => 'world',
]);
};
module.exports = async function(request, context, connector, response, dispatcher, logger) {
const connection = await connector.getConnection('my_database');
// @TODO implement my API endpoint logic
return response.build(200, {}, {
hello: 'world'
});
};
def handle(request, context, connector, response, dispatcher, logger):
connection = connector.get_connection('my_database')
# @TODO implement my API endpoint logic
return response.build(200, None, {
'hello': 'world'
})
import org.fusioproject.worker.runtime.generated.ExecuteRequest;
import org.fusioproject.worker.runtime.generated.ExecuteContext;
import org.fusioproject.worker.runtime.Connector;
import org.fusioproject.worker.runtime.ResponseBuilder;
import org.fusioproject.worker.runtime.Dispatcher;
import org.fusioproject.worker.runtime.Logger;
def handle(ExecuteRequest request, ExecuteContext context, Connector connector, ResponseBuilder response, Dispatcher dispatcher, Logger logger) {
def connection = connector.getConnection("my_database");
// @TODO implement my API endpoint logic
return response.build(200, [:], [
hello: "world"
]);
}
Fusio includes a sophisticated code generator which generates client SDKs and OpenAPI specifications. Through this you can build fully typed client/server connections which help you to move fast and detect errors early. It also helps to automatically provide client SDKs to your customers so that they can easily integrate your API.
Fusio was primarily designed to build REST APIs but over the time we have implemented different technologies which help you to access your Fusio operations in different ways.
Fusio provides an MCP server which exposes all operations as tools. This can help to build and configure a Fusio instance since an LLM can use and discover all available entities.
Fusio implements a readonly GraphQL endpoint which can be used to query all GET operations of your API.
Fusio implements a classical JsonRPC server which allows you to invoke every operation via JsonRPC. While we generally recommend to use REST APIs there are some circumstances where JsonRPC can be useful.