带有 Laravel 和 Guzzle 的 Matrix RERSful API。请求创建

Posted

技术标签:

【中文标题】带有 Laravel 和 Guzzle 的 Matrix RERSful API。请求创建【英文标题】:Matrix RERSful API with Laravel and Guzzle. Request creating 【发布时间】:2018-07-31 18:05:24 【问题描述】:

我是 php 新手,在使用 RESTful API 方面有相当纯正的经验。因此,如果有人可以帮助解决我的问题,我将不胜感激。

我们的目标是在 Matrix 中创建一个聊天室,完成一些基本步骤,例如注册、登录以及通过该聊天室在几个客户之间进一步交流。

问题 1: 看起来这是互联网上唯一可用的文档。 https://matrix.org/docs/guides/client-server.html

这对我来说并不清楚。找不到任何其他我需要的好例子。

问题 2: 不知道使用什么类型的请求,据我了解 RESTful API 可以使用其中的许多:简单请求、异步请求、并发请求,当然语法不同。

问题 3: 不确定我是否正确地自己提出请求。下面的例子。

我已经做了什么: 因为我的项目在 Laravel 上,所以我使用 Guzzle 客户端来形成我的查询,并且通过 composer 已经安装了 Matrix 依赖项,如下所述: https://github.com/updivision/matrix-php-sdk

这是我的请求示例,当然不能正常工作:

<?php
require '../vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Response;
use GuzzleHttp\Exception\RequestException;


    $client = new Client();


$promise = $client->requestAsync(
    'POST',
    'http://matrix.loc:80/_matrix/client/r0/register',
    [
        'json'=>[
            'username'=>'12345',
            'password'=>'12345',
            'auth'=>[
                "type"=>"m.login.dummy"
            ],
        ]
    ]
);


  $promise->then(
    function(Response $resp)
        echo $resp->getBody();
    ,
    function(RequestExcprion $e)
        echo $e->getMessage();
    
);

【问题讨论】:

【参考方案1】:

SDK 封装了所有 API 调用,因此您无需通过 Guzzle 创建请求。相反,请查看 resources directory 并了解 SDK 提供的内容。让我们从注册请求开始,它在源代码中可用here。

register.blade.php

首先创建一个简单的注册表单。

<form action=" route('maxtrix.register') " method="post">
     csrf_field() 

    <input type="text" name="username">
    <input type="password" name="password">

    <button type="submit">Register</button>
</form>

routes/matrix.php

为矩阵 api 请求创建路由文件。这是可选的,您可以将它们放在现有的 routes/api.php 文件中,但我更喜欢将它们分开。

Route::post('register', 'MatrixController@register')->name('matrix.register');
Route::get('account', 'MatrixController@account')->name('matrix.account');

MatrixController.php

创建一个新的控制器来发出矩阵 api 请求。

class MatrixController 

    protected $userData;

    // Use dependency injection to automatically get an instance of the 
    // matrix SDK.
    public function __construct(UserData $userData)
    
         $this->userData = $userData;
    

    // The registration form created above will post to this route which
    // will make the API request to register your user.
    public function register(Request $request)
    
        // get the data from the response
        $data = $this->userData->register($request->username, $request->password);

        // if successful, save the registration info
        if ($data) 
             DB::table('matrix_regisration')->insert($data);
             return redirect()->route('matrix.account');
         else 
        // if failure, redirect back to the registration for with errors
             return back()->withErrors('Failed to register');
        
    

我简化了一些事情,但这应该可以让您朝着正确的方向开始。我查看了 SDK,它似乎记录了所有内容,包括创建房间、开始聊天会话、邀请其他用户等。

玩得开心!

【讨论】:

以上是关于带有 Laravel 和 Guzzle 的 Matrix RERSful API。请求创建的主要内容,如果未能解决你的问题,请参考以下文章

Laravel + Guzzle + MailChimp - 400 错误请求

在 Laravel 中将 Multipart 和 Json 与 Guzzle 一起发布

Laravel 5.6模拟Guzzle响应

使用 Guzzle 将数据和文件一起发布到 Laravel API

如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值

Laravel - 无法处理 RequestException(Guzzle + MailChimp)