【问题标题】:Working with external API and Laravel, and best practise for edit使用外部 API 和 Laravel,以及编辑的最佳实践
【发布时间】:2018-03-12 10:09:08
【问题描述】:

我正在处理没有直接数据库访问权限的项目。它使用外部 API 进行 crud 操作。 我正在用 guzzle 包制作它。 我正在为编辑表单而苦苦挣扎。这种东西的最佳做法是什么?

我创建了 ApiBridge.php,它具有 get()(获取端点的所有元素)和 getItem($id)(单个元素)方法。

所以在路由 /endpoint 的控制器中,我发出一个 get() 请求以列出端点的所有元素并创建视图(数据表),然后,如果用户单击该列表中的编辑按钮,我发出一个 get( ) 和 getItem($id) 向控制器的相同方法请求 /endpoint/id 路由。

这是我的例子:

  • ApiBridge.php 是 laravel 应用程序和外部 API 的桥梁

  • create 方法是创建表单视图的方法。

这是我的代码示例:

https://paste.laravel.io/93577c7d-0fc4-4b7b-b6cd-a58e6b286fa6

那么,你如何解释我使用外部 API 使用 laravel 的方法。有没有简单的方法或最佳实践可以推荐给我?

谢谢。

【问题讨论】:

    标签: php laravel api


    【解决方案1】:

    我只给你一个建议,因为你将执行所有的 CRUD,而不仅仅是读取。我确信当前的 API 会在您对数据库执行任何创建、删除、编辑之前要求您进行身份验证。最好的方法是创建一个自定义基本控制器示例:

    class ClientController extends Controller {
    
    protected function performRequest($method, $url, $parameters = []) {
    
        $client = new Client();
    
        $response = $client->request($method, $url, $parameters);
    
        return $response->getBody()->getContents();
    
    }
    
    protected function performGetRequest($url) {
    
        $contents = $this->performRequest('GET', $url);
        $decode = json_decode($contents);
        return $decode->data;
    }
    protected function getAllData(..){
    
    
    
     //get data call the above function to get particular data
    
    }
    

    现在,由于您将有许多路由,因为您正在使用 CRUD,您可能希望在不同的控制器中分开,这样每个新控制器都会扩展现有的 ClientController 以执行 CRUD,而无需桥接。然后所有其他控制器将使用 ClientController 方法。

    【讨论】:

    • 你能举个控制器的例子吗?因为所有端点都有不同的属性..不一样。
    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多