Библиотека PHP для реализации вызовов API с поддержкой транзакций?

#php #transactions #rollback #enterprise

#php #транзакции #Откат #Предприятие

Вопрос:

Чтобы реализовать некоторые из моих функций, мне нужно вызвать набор API по порядку. Бывают случаи, когда один из API-интерфейсов в середине терпит неудачу. В такие моменты мне нужно откатить вызовы API, которые успешно выполнялись до этого. По сути, очередь команд / функций с поддержкой отката транзакций.

Также бывают случаи, когда мне нужно ввести результат одного из вызовов функции в качестве параметра для последующего вызова функции. Так что было бы неплохо, если бы для этого был протокол.

Что я хотел бы знать, сталкивался ли кто-нибудь с такой (php) библиотекой или есть элегантный способ реализовать это, может быть, конечный автомат? Или я несу просто тарабарщину!!

Очевидно, что необходимо учитывать довольно много нюансов, например, что произойдет, если откат тоже завершится неудачей и т. Д..

Я хотел бы назвать эту библиотеку, как показано ниже:

     // First Command
    $cmd1 = 
        new TransactionCommand("Command One")
            ->setFunction(
                function () {
                    echo "Running Command One";
                    return "One";
                }
            )
            ->setRollback(
                function () {
                    return "Rolled Back Command One";
                }
            );

    // Second Command
    $cmd2 = 
        new TransactionCommand("Command Two")
            ->setFunction(
                function ($resultFromCmdOne) {
                    echo "Running Command Two with".
                        " result from command one: $resultFromCmdOne";
                    return "Two";
                }
            )
            ->setRollback(
                function () {
                    return "Rolled Back Command Two";
                }
            );

    $cmdQueue = new Native5TransactionCommandQueue();
    $cmdQueue->addCommand($cmd1);
    $cmdQueue->addCommand($cmd2);

    // Process the set of commands 
    $cmdQueue->process();
 

Комментарии:

1. Выглядит довольно прилично для меня. В чем ваша проблема? Стандартной библиотеки для решения такой проблемы не существует.

2. Спасибо за поддержку. Я могу реализовать простую библиотеку в строках представленного кода. Но, учитывая проблему, это лучший способ добиться этого?

3. Не пытайтесь быть слишком перфекционистом, вы на правильном пути, поэтому продолжайте и устраняйте узкие места, когда вы с ними сталкиваетесь. Приложения и требования к ним развиваются со временем, выполняйте оптимизацию во время, а не заранее.

4. Спасибо, попробую написать небольшую библиотеку вокруг этого.