Php Laravel7-使用RESTAPI而不是数据库

Php Laravel7-使用RESTAPI而不是数据库,php,laravel,rest,api,laravel-7,Php,Laravel,Rest,Api,Laravel 7,我正在使用RESTAPI来存储/检索存储在postgres数据库中的数据。api不是laravel,它是一个外部服务 现在我想用laravel(框架版本7.3.0)创建一个网站,我一直在研究如何正确实现api调用 例如:我想有一个自定义的用户提供商,用户可以通过它登录网站。但是,所提供凭证的验证是由api而不是laravel完成的 我该怎么做?编辑: 这可能不是最好的办法。但这就是我当时所做的。我尝试了curl和guzzle,用会话cookie和标题中的所有内容构建请求,使其看起来像来自web浏

我正在使用RESTAPI来存储/检索存储在postgres数据库中的数据。api不是laravel,它是一个外部服务

现在我想用laravel(框架版本7.3.0)创建一个网站,我一直在研究如何正确实现api调用

例如:我想有一个自定义的用户提供商,用户可以通过它登录网站。但是,所提供凭证的验证是由api而不是laravel完成的

我该怎么做?

编辑:

这可能不是最好的办法。但这就是我当时所做的。我尝试了curl和guzzle,用会话cookie和标题中的所有内容构建请求,使其看起来像来自web浏览器的请求。不能让它工作

我将web套接字的频道id用于浏览器,希望发生更改,并将其与其他内容连接起来,然后使用
encrypt($string)
对其进行加密。之后,我使用加密字符串生成二维码

移动应用程序(已经以身份验证的身份登录)扫描了它,并用该QR字符串和其他数据发出post请求。Passport负责此请求的身份验证部分。解密QR字符串后,我得到了web套接字的通道id

然后我用适当的事件和数据在该频道进行广播。在浏览器中捕获该广播,并用JavaScript重新加载该页面

/*... processing other data ...*/     
$broadcastService = new BroadcastService();
$broadcastService->trigger($channelId, $eventName, encrypt($$data));
/*... returned response to the mobile app...*/
我的广播服务:

namespace App\Services;

use Illuminate\Support\Facades\Log;
use Pusher\Pusher;
use Pusher\PusherException;

class BroadcastService {
    public $broadcast = null;

    public function __construct() {
        $config = config('broadcasting.connections.pusher');
        try {
            $this->broadcast = new Pusher($config['key'], $config['secret'], $config['app_id'], $config['options']);
        } catch (PusherException $e) {
            Log::info($e->getMessage());
        }
    }

    public function trigger($channel, $event, $data) {
        $this->broadcast->trigger($channel, $event, $data);
    }
}
我认为:

<script src="{{asset('assets/js/pusher.js')}}"></script>
<script src="{{asset('assets/js/app.js')}}" ></script>
<script>
    <?php
    use Illuminate\Support\Facades\Cookie;
    $channel = 'Channel id';
    ?>
    Echo.channel('{{$channel}}')
        .listen('.myEvent' , data => {
            // processing data
            window.location.reload();
        });
</script>

Echo.channel(“{{$channel}}”)
.listen('.myEvent',数据=>{
//处理数据
window.location.reload();
});
我用过这个

同样,这不是最好的方法。这对我来说是一个特别的特性

也许有很多更好的方法可以做到这一点。如果有人知道更好的方法,请告诉我


据我所知,您希望通过REST实现用户创建和身份验证。然后从数据库中检索数据。如果我错了,请纠正我

我猜您已经知道如何使用令牌通过API进行通信。您只需要了解如何使用laravel实现它

您可以使用Laravel Passport进行身份验证。它真的很好


还有,利用这个。它将帮助您逐步完成整个过程。

只需通过“php artisan make:controller ControllerName”创建注册控制器和登录控制器,并在其中编写身份验证逻辑即可

在以前版本的Laravel中,您有一个类似“phpArtisanMake:auth”的命令,该命令将生成执行这些操作所需的所有内容。但是在Laravel 7.0中,您需要安装一个名为Laravel/ui的包

运行
“composer required laravel/ui”
安装该软件包 然后运行“php artisan ui引导--auth” 现在,您可以运行“php artisan make:auth”

此命令将为您完成整个注册(注册)和登录系统

为了更好地使用REST,您可能需要了解REST(Http)动词。了解GET、POST、PUT、PATH、DELETE请求,以及如何使用PHP和Laravel收集方法发出这些请求。了解JSON解析、编码和解码。这样你就可以轻松地工作和休息了。并且在没有其他包中的任何模板代码的情况下工作


非常感谢你。我希望这个答案能给你一些新的信息/想法。再次感谢。

这不是“代替”的情况。您的RESTAPI访问数据库。没错。我现在应该通过删除原文的一些部分来澄清这一点。谢谢你的评论。api也是我写的,所以我知道我在做什么。。至少有点。正如omar正确提到的,我一直在思考如何用laravel实现它。所以我会看一下护照。谢谢你的回答。正如我在文档中看到的,passport充当服务器。但我已经有了api。所以我需要的是,laravel充当一个客户端,例如,当用户登录时,它会获取一个jwt令牌,然后用用户数据填充会话,并存储令牌以供以后使用,直到用户注销。所以,您只需要从API访问web会话?是的。该网站用于向用户显示信息,并允许用户更改数据。但是所有这些事情都需要通过api来完成,问题是身份验证保护是不同的。API的auth guard是“API”,会话是“web”。不久前,我也遇到了同样的问题,并在这里提出了一个问题。不幸的是,我找不到任何答案。我所做的是,我从API向web发出另一个调用,用一个特定的会话重新加载页面,以克服这个问题。如果你愿意,我可以在另一个答案中添加。我还使用WebSocket进行重新加载。