0

我有一个 laravel 应用程序,它从 2 个不同的提供者那里获取 API 数据,它们是不同的,但会有相似的数据,尽管结构不同。

我试图弄清楚如何才能最好地在 laravel 中使其尽可能易于维护。

假设他们发送给我的数据是带有产品但结构不同的订单(order1Api,order2Api)。

我想获取它们并将它们转换为具有相似结构的类。

所以我需要 2 个类来处理为单独的 API 和 . 我需要 1 个模型来使数据统一?

我还在学习 laravel,所以不确定 API 应该是服务还是门面 我在哪里最好下订单,以便在需要时能够在不同的控制器中从它们获取数据?

4

1 回答 1

0

尽管这个问题是广泛而主观的,但我会尝试一下。

如果是我,我会创建一个“服务”类,称为类似于Orders您的应用程序与之交互的东西。在其中,它处理确定调用哪个 API 和数据规范化的逻辑。它不会执行个别服务特定的逻辑,它会代理它。

// You might call something like this in your controller
$orders = Orders::all();

在那个订单类里面:

class Orders {

    function __construct() {
        $this->serviceHandlers = [
            new service1(),
            new service2(),
        ];
    }

    function all() {

        // Final output array
        $orders = [];

        foreach ($this->serviceHandlers as $handler) {

            // Get orders from specific service
            $results = $handler->getOrders();

            // Normalize data and add them to the orders
            foreach ($results as $result) {
                $orders[] = $handler->normalize($result);
            }
        }

        return $orders;
    }
}

然后每个处理程序类都应该有一个抽象,强制它们实现 agetOrders()normalize()方法。

最好让该服务基于配置文件动态加载服务 API 类,这样您就不会对它们进行硬编码。

于 2019-11-22T16:48:32.353 回答