【问题标题】:How do i do api calls using models on my laravel api client?如何在我的 laravel api 客户端上使用模型进行 api 调用?
【发布时间】:2013-07-21 01:55:07
【问题描述】:

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

干杯

【问题讨论】:

  • 更具体。你想构造什么?模型,应用程序,...?

标签: rest laravel laravel-4


【解决方案1】:

我认为更通用和更健壮的应用程序设计是 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;
    }

}

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

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

【讨论】:

    【解决方案2】:

    更好的方法是使用 PHP API Wrapper。基本上是 Eloquent 可以使用的 API 包装器:

    https://github.com/CristalTeam/php-api-wrapper

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2017-05-16
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多