最近要寫一套系統(tǒng)接口,發(fā)現(xiàn)公司里寫Java的同事寫的接口提供的都是統(tǒng)一個(gè)請(qǐng)求地址,因?yàn)橐郧皼]有寫過(guò)接口,感覺挺有意思的.所以我自己寫的這套系統(tǒng)也通過(guò)Laravel實(shí)現(xiàn)了這一方法.
以下是實(shí)現(xiàn)的代碼, 在routes.php里面定義這樣的路由:
Route::post('/api.api', function(){
$post = Request::instance()->getContent(); //獲取數(shù)據(jù)流,laravel方法
try{
$post = json_decode($post, true); //將JSON字符串解碼為數(shù)組
//判斷$post['data']是否存在
$post['data'] = empty($post['data']) ? [] : $post['data'];
//將請(qǐng)求數(shù)據(jù)分發(fā)到控制器操作
return App::make('App\Http\Controllers\Api\\'.$post['action'].'Controller')->$post['method']($post['data']);
}catch (Exception $e){
return ['code' => 1, 'description' => $e->getMessage()];
}
});
這樣,請(qǐng)求接口的時(shí)候就可以通過(guò)傳遞不同的參數(shù),調(diào)用不同的控制器和方法.
比如我們?cè)赼pp\Http\Controllers\Api 有一個(gè)TestController.php, 其中有一個(gè)test方法:
class TestController extends Controller
{
public function test($data){
return ['code' => 0, 'msg' => 'success'];
}
}
這樣,我們可以通過(guò)請(qǐng)求localhost/api.api,傳入一下參數(shù)(json字符串)調(diào)用這個(gè)接口:
{
"action": "test",
"method":"test",
"data":{
}
}
得到返回?cái)?shù)據(jù):
{
"code": 0,
"msg": "success"
}
這樣的設(shè)計(jì),可以通過(guò)傳入不同的參數(shù)實(shí)現(xiàn)調(diào)用不同的接口,簡(jiǎn)化了后臺(tái)接口路由的定義.