【问题标题】:How to design routes when dealing with Laravel API instead of returning Laravel views?处理 Laravel API 时如何设计路由而不是返回 Laravel 视图?
【发布时间】:2018-09-07 15:30:03
【问题描述】:

到目前为止,我一直在构建从后端返回视图或模板的 Laravel 和 Django 应用程序。到目前为止一切顺利。

不过,我现在正在构建一个从前端 AMP 代码调用的 Laravel API。

我在 Laravel 中以旧方式执行此操作: 来自web.php

Route::get('/', function () {
    return view('welcome');
});

或者我可以从控制器返回视图。

但是,如果 Laravel 应用是返回 JSON 的 API,我该如何设计 URL?

基本上,如果有人点击主页上的链接,应该将他带到用户个人资料,请说:

/user/{id}

我将在哪里决定这个 URL 的外观以及调用哪个端点?

【问题讨论】:

  • 您可以在api.php 中添加路由,我相信它会自动为网址添加前缀api。即api/user/{id}
  • 我知道,但这设计了 API 端点路由。我想设计前端路线。
  • 前端和API有什么关系?
  • @Wreigh 我是否在 web.php 中这样做并提供我的 AMP 页面,就好像它们是调用 API 端点的 Laravel 视图一样?我的想法是将前端和后端保持为独立的系统。
  • 抱歉,我不熟悉 AMP。您打算在 前端 路线上返回(响应)什么?

标签: javascript php html laravel google-amp


【解决方案1】:

您可以使用相同的路由语法,但不是返回视图,而是返回 json response

Route::get('api/user', function () {
    $data = ['status' => 'success', 'data' => 'stuff'];
    return response()->json($data);
});

查看the response documentation 了解所有可用的回复类型。

【讨论】:

    【解决方案2】:

    我终于解决了这个问题。至少我是这么认为的。

    web.php 中,我有一组带有我想要的 URL 的闭包。这些闭包返回没有数据的视图。类似这样:

    Route::get('/', function () {
        return view('welcome');
    });
    

    然后在视图中调用api.php 中指定的API 端点来呈现视图中我需要的数据。

    // List activities
    Route::get('activities', 'ActivityController@index');
    

    【讨论】:

      【解决方案3】:

      Laravel 5.3 及以上版本提供了单独的路由文件routes/api.php,您可以在其中编写与您的 api 请求相关的所有路由。

      对于控制器,只需在名为“Api”的控制器文件夹中创建一个单独的文件夹,并在其中创建与 api 相关的控制器。

      然后您可以从那里为相应的路线编写函数。并将 json 返回为 return response()->json(['data'=>$data]);

      或者你可以使用 https://github.com/nWidart/laravel-modules 包在 laravel 中创建一个单独的 api 模块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-26
        • 2019-10-17
        • 2015-11-12
        • 1970-01-01
        • 2020-08-12
        • 2018-08-30
        • 2018-02-11
        相关资源
        最近更新 更多