如何在我的laravel api客户端上使用模型进行api调用?

时间:2013-07-22 10:54:49

标签: rest laravel laravel-4

所以我基本上用laravel构建一个没有数据库的restful客户端。所以,如果有人对如何构建这个有任何想法,我将非常感激。

干杯

1 个答案:

答案 0 :(得分:10)

我认为您的应用程序更通用,更健壮的设计是MVC模式,就像标准的Laravel应用程序一样。实际上,唯一的区别是模型层不会与数据库交互,而是与API交互。

您将不得不忘记Eloquent模型并使用经典的面向对象实践(构造函数,访问器......)构建您自己的模型层。然后,您将能够处理控制器中的对象而不是API。如果你想构建足够通用的东西来重用,你可以采用与Eloquent相同的语法并编写类似的模型:

<?php

class User {

    protected $url = "http://myapi.com/users/"

    protected $id;
    protected $name; 

    public function save()
    {
        $data = json_encode(array(
            'id' => $this->id,
            'name' => $this->name,
        ))

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));                       
        curl_setopt($ch, CURLOPT_PUT, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

        return true;
    }

}

然后,您将能够使用与Eloquent模型完全相同的行为来调用$user->save();。当然,需要进行大量的改进和推广(为什么不是一个名为EloquentAPI的超级类......),但你可以看到这个想法。如果使用方法all()find()save()以及其他几个实现的方法完成了这项工作,您可以轻松地在数据库或Web服务实现之间切换。这种方法的另一大好处是清理你的控制器,让所有的卷曲混乱在一个单独的层。

第二个选项是忘记模型层并直接在控制器中调用REST API。如果您的应用程序很小并且不需要可扩展,那么这可能是一个好主意,但要小心,如果您这样做,维护您的应用程序可能会很痛苦,例如,如果REST API发生更改。