我刚刚开始修改Laravel(PHP新手警报),我对如何在此框架上实现我的REST JSON API表示怀疑。
所需的网址路径应为:
http://api.mysite.com/APIKEY/FUNCTION/(ARGUMENTS)*
但最好的方法是什么?
我没有找到足够的解释性指南,因为假设每个功能(身份验证,搜索等)都在不同的路径上。
目前我设法为所需数据创建迁移和模型,我也设置了这样的路线:
Route::get('/{apikey}/{function}/{arg1}/{arg2}/{arg3?}',
//The first two arguments are mandatory, the 3rd optional
function($apikey,$function,$arg1,$arg2)
{
return Response::json(array(
'status'=>'200'),
200);
})
->where(array('function'=>'[A-Za-z]+'));
这应该是正确的行动流程,但我有些疑惑。
Route::group
的所有示例中都有一个静态前缀,但这里的前缀是apikey,一个变量)Models
从数据库中获取数据。答案 0 :(得分:1)
@ 1。我想我可能会使用路由过滤器,如下所示:
Route::filter('apikey', function(){
if (Shared\API::checkIfKeyIsValid(Input::get('key') != true){
return Shared\Errors::handleError("bad-api-key");
}
});
您可以看到此过滤器检查以确保某些会话变量已设置和匹配,如果它返回ANYTHING,则表示失败,并且它不会发送路径正常运行的用户。你可以在这样的路线中称呼它:
Route::get('play/{id}', array('before' => 'loggedin', 'uses' => 'ThingController@doThing'));
@ 2。我认为一个路线组是我如何构建这个(如果我理解你在问什么) 编辑:自从我回答以来,你已经改变了问题,前缀是变量。我会重新排序您的参数,以便API密钥在最后,或者您可以看一下,这可能会做您想要的:https://github.com/jasonlewis/enhanced-router
Route::group(array('prefix' => 'api'), function()
{
//the routes for all API calls
Route::group(array('prefix' => '/v1'), function()
{
//for version 1
Route::group(array('prefix' => '/thing', 'before' => 'loggedin'), function()
{
//for things only
Route::get('/getThing/{id}', 'APIController@getThing');
Route::get('/getDifferentThing/{id}/{aux}/{optional?}', 'APIController@getDifferentThing');
});
});
});
@ 3。数据的返回应该通过控制器完成,数据来自模型。要么将其作为视图返回,要么将其作为JSON返回,如下所示:
return Response::json($data);