API在自己网站上的内部请求? - php

我想为Android和Apple开发一个网站和一个应用程序。一个应用程序将通过API从我们的域中获取数据。

假设在我们的网站上,它将显示产品列表或创建用户帐户;在控制器中,我可以使用内部API请求,然后再通过MySQL而不是直接使用MySQL查询方法来获取数据。这是普通做法还是不良做法?

这是dingo / api内部请求(Laravel)的示例:

Route::api(['version' => 'v1', 'prefix' => 'api'], function () {

    Route::get('users', function () {
        // fetch from database
        return User:all();
        });
});

在控制器中

class UsersController
{

    public function showUsers()
    {
        $users = API::get('users');

        return View::make('users-list')->with('users', $users);
    }
}

在此示例中,他们在users处为get方法设置了API路由,并且API::get('users');会向该端点发出内部请求,并返回该方法返回的内容

参考方案

是的,我会考虑这种常见做法。我个人甚至认为在内部使用自己的API是个好习惯。它绝对有助于使代码保持DRY(不要重复自己)。
当然,与直接方法调用相比,这会造成一些开销,但是我怀疑它是否会引起注意。无论如何,出于您的考虑,一种替代方法是使API控制器保持非常平坦,并将您的大多数逻辑放在其他地方(在模型,存储库或服务层中)。我还是建议这样做。这意味着您可以轻松地在“常规”控制器中执行与API控制器中相同的操作,因为它基本上只是对另一个类的(很少)调用。
这是一个例子来说明我的意思
假设您的users端点更加复杂(这包括一些急切的加载和过滤)

public function index(){
    return User::has('profile')
               ->with('profile', 'city')
               ->active()
               ->get();
}

当然,现在仍然不是很多代码,您也可以在其他控制器中轻松地执行相同的操作。但是想象一下您想添加一个新的关系来增加负载。您需要在两个地方更改代码。 (如果您忘记了一个,您甚至可能不会注意到它...)
解决此问题的一种方法是创建存储库。我不会详细介绍如何实现这种模式(Internet上有很多相关资源),但基本上到最后,您将得到一个像这样的类:

class UserRepository {
    public function getAll(){
        return User::has('profile')
               ->with('profile', 'city')
               ->active()
               ->get();
    }
}

(理想情况下,您还将有一个定义存储库的接口...)
然后使用依赖性注入使类的实例在您的控制器中可用:(同样,这还不完整,您还需要一些其他东西来设置DI)

public function __construct(UserRepository $repo){
    $this->user = $repo;
}

public function index(){
    return $this->user->getAll();
}

在其他控制器中,您可以使用完全相同的调用getAll()

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…

检查对象是否已在集合中-Laravel - php

当我循环一系列不同的结果时,我希望将对象添加到新集合中。查询:$osRed = Item::where('category', 'Hardware') ->where(function ($query) { $query->where('operating_system', '…

Laravel-使用雄辩的语言在开始日期和结束日期之间选择行 - php

我想将此查询转换为雄辩的laravel,select * from schedule where (now() between start_date and end_date); 我尝试使用whereBetween,但是出现了一些错误。$schedule = Schedule::whereBetween(Carbon::now(), ['start…

laravel Hash::make继续给出不同的结果 - php

我想在laravel 4中使用身份验证我改了桌子和莫贝尔的名字当用户注册时,我拥有密码并将其保存,哈希为:$password = Hash::make(Input::get('password')); 然后当用户登录时,我想先对他/她进行身份验证。我这样做是这样的:if (Auth::attempt(array('usernam…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…