最近要写一套系统接口,发现公司里写Java的同事写的接口提供的都是统一个请求地址,因为以前没有写过接口,感觉挺有意思的.所以我自己写的这套系统也通过Laravel实现了这一方法.
以下是实现的代码, 在routes.php里面定义这样的路由:
Route::post('/api.api', function(){
$post = Request::instance()->getContent(); //获取数据流,laravel方法
try{
$post = json_decode($post, true); //将JSON字符串解码为数组
//判断$post['data']是否存在
$post['data'] = empty($post['data']) ? [] : $post['data'];
//将请求数据分发到控制器操作
return App::make('App\Http\Controllers\Api\\'.$post['action'].'Controller')->$post['method']($post['data']);
}catch (Exception $e){
return ['code' => 1, 'description' => $e->getMessage()];
}
});
这样,请求接口的时候就可以通过传递不同的参数,调用不同的控制器和方法.
比如我们在app\Http\Controllers\Api 有一个TestController.php, 其中有一个test方法:
class TestController extends Controller
{
public function test($data){
return ['code' => 0, 'msg' => 'success'];
}
}
这样,我们可以通过请求localhost/api.api,传入一下参数(json字符串)调用这个接口:
{
"action": "test",
"method":"test",
"data":{
}
}
得到返回数据:
{
"code": 0,
"msg": "success"
}
这样的设计,可以通过传入不同的参数实现调用不同的接口,简化了后台接口路由的定义.