将Laravel与现有API一起使用

时间:2014-07-24 15:15:56

标签: php api laravel laravel-4

目前,我的Laravel应用程序主要使用Guzzle直接在控制器中使用的自定义API运行。通过Eloquent处理的站点的唯一部分是用户管理/身份验证。 (控制器扩展了一个父控制器,它在各个函数中具有通用的GET / PUT / POST调用,子控制器调用这些函数并向它们发送数据)

我正在寻找有关如何抽象API的GET / PUT / PUSH调用的信息,并将它们从控制器中取出,以便数据访问在整个电路板上更加统一。不幸的是,我没有看到关于API的大量信息,而没有在Laravel应用程序中实际创建它们。

似乎我应该能够编写一些内容,以便控制器以与它们与用户数据交互的方式类似的方式与API交互,但同样,我没有找到有关它的信息(我可能在谷歌搜索它不正确)。

有人能指出我正确的方向吗?我正在使用Laravel 4.1。

2 个答案:

答案 0 :(得分:3)

听起来您正在使用Guzzle连接到第三方API,而您希望远离实例化Guzzle&在你的控制器中调用Guzzle方法。

一种解决方案是编写一个处理API调用的库类。例如

class MyAPILibrary
{
    public function readImportantData($parameters)
    {
        // use Guzzle to connect to the API, pass the parameters, and read
        // the important data
        return $importantData;
    }
}

然后,在您的控制器中,只要您需要该数据:

public function getIndex()
{
    // I need that important data!
    $d = MyAPILibrary::readImportantData($myParameters);

    // and use the data...
    return View::make("template")->with("important", $d);
}

请注意,我们假设您已经设置了服务提供商&库的外观,因此您可以进行MyAPILibrary::readImportantData($myParameters)之类的方法调用。有关该教程的详细教程,请参阅this page

关于此设置的好处是,您现在可以在不触及控制器的情况下测试API库。此外,您的控制器变得更轻 - 通常是一两行。例如,可以重写上面的示例:

public function getIndex()
{
    return View::make("template")
        ->with("important", MyAPILibrary::readImportantData($myParameters));
}

瞧!单行控制器方法!

答案 1 :(得分:1)

查看我的包裹

https://github.com/joshhornby/Http

应该有所帮助:)