繁体   English   中英

Laravel-使用Rest API JSON的原始查询

[英]Laravel - Raw query using Rest API JSON

我是Laravel的新手,我想知道我是否以正确的方式执行了Follow API。

我有一个移动应用程序,该应用程序将请求将某餐厅安置在某个位置,并使用参数(lng,lat,rad)发送此URL:

localhost/restaurant/@59.931412,59.931342,15

我暂时想出了这条路线:

Route::get('restaurants/@{latitude},{longitude},{radius}', 'RestaurantsController@show'})
->where(['latitude' => '[0-9]+', 'longitude' => '[0-9]+', 'radius' => '[0-9]+']);

但是我看到,如果要使其成为REST,则应使用:

Route::resource('restaurants', 'RestaurantsController');

我并不奇怪的是:

  • 如何传递参数?
  • 该移动应用程序应该发送GET动词,而我必须在控制器中进行“显示”方法?
  • 而不是对路径中的参数进行验证,我必须在方法开始时使用中间件,对吗?

奖励:我的查询写得好吗,是否安全?

public function show($latitude, $longitude, $radius)
{
    //Middleware to control parameters later

    $results = DB::select(
                'SELECT * ( 3959 * acos( cos( radians(:latitude) ) *
                cos( radians( lat ) ) * cos( radians( lng ) - radians(:longitude) ) +
                sin( radians(:latitude) ) * sin( radians( lat ) ) ) ) AS distance FROM events HAVING 
                distance < :radius ORDER BY distance LIMIT 0 , 20',
                ["latitude" => $latitude, "longitude" => $longitude, "radius" => $radius]);

    return Response::json($results);
}

编辑:我脑子里很乱,我有很多问题,我想出一个与我的问题有些不同的帖子标题,对不起。

更新1:这是我的路线

Route::get('restaurants/@{latitude},{longitude},{radius}', 'EventsController@show');

和我的请求规则(注入控制器的人)

public function rules()
    {
        return [
            'latitude' => 'required|digits_between:-90,90',
            'longitude' => 'required|digits_between:-180,180',
            'radius' => 'required|numeric',
        ];
    }

我有页面“页面无法正确重定向”,并且在日志中我有“无效请求(意外的EOF)”

我使用工匠,我的网址是: http:// localhost:8000 / restaurants / @ 59.93141200,30.31992300,15

在控制器中没有请求的情况下,路由有效...我尝试仅将“要求”之类的简单规则仅用于纬度,但仍然不想访问请求过程。

问题来自于必填项 (必填项: 必填项 ,必填项,必填项 ,必填项)。

指针带有您的API:

  1. 制作API时使用后期调用,为什么要向用户显示需要哪些参数才能获得响应。

  2. 您在Laravel中使用Raw查询,该框架在此框架中提供了雄辩的方式来编写查询,并坚持使用新方法。

  3. 在构建API之前,并非必须使用资源,除非直到并且除非您希望API具有(同时具有全部的“插入,更新,删除,详细信息和列表”功能)

根据您的问题:

问:如何传递参数?
答:由于这是一个get请求,因此只需将参数连接到URL。

问:移动应用程序应该发送GET动词,我必须在控制器中执行“显示”方法吗?
答:如果您编写Route :: get('list','ABController @ list');这取决于您的路线,所调用的函数。 然后,将调用列表函数。 按照您在问题中定义的路线,将调用show函数。

问:我不必在路由中进行参数验证,而必须在方法开始时使用中间件,对吗?
答:最好使用中间件进行验证。 在laravel中,还有另一个称为Request的概念,它将监视您的参数并根据需要应用验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM