Engine de processamento de workflows baseado em JSON, desenvolvida em PHP 8.4 com FrankenPHP.
Aproveitei o desenvolvimento para me atualizar sobre o PHP 8.4 e testar o FrankenPHP, avaliando a performance da engine. Por isso, não utilizei nenhum framework.
Pré-requisito: ter o Docker instalado.
-
Clone o repositório.
-
Execute o comando na raiz do projeto.
docker compose up -d
- Instale as dependências do projeto
docker compose exec php composer install
Pronto! O projeto estará disponível em http://localhost
.
http_in
: Cria um novo endpoint HTTP.data_json
: Armazena dados que poderão ser utilizados durante o processamento do workflow.number_divide
: Divide dois números.number_multiply
: Multiplica dois números.filter
: Filtra uma lista de acordo com uma condição.variable_assignment
: Atribui um valor a uma variável.http_out
: Retorna a resposta final como JSON via HTTP.
Para implementar um novo step, basta:
- Criar uma nova classe no diretório
src/Steps
e implementar a interfaceStepInterface
. - Adicionar a nova classe na constante
STEP
da classesrc\Steps\Parser
.
Pronto! Step implementado.
Faça uma requisição POST para http://localhost/workflow
com o seguinte JSON:
{
"steps": [
{
"type": "data_json",
"data": {
"number1": 10,
"number2": 2
}
},
{
"type": "number_divide",
"data": {
"variable": "result",
"number1": "$.number1",
"number2": "$.number2"
}
},
{
"type": "http_out",
"data": {
"result": "$.result"
}
}
]
}
Você receberá a seguinte resposta:
{
"data": {
"result": 5
}
}
Você pode conferir mais exemplos conferindo os testes de integração, em tests/Integration/WorkflowTest.php
.
Para rodar os testes, execute o comando:
docker compose exec php vendor/bin/phpunit
A engine foi desenvolvida com base em estudo da ferramenta Node-RED.