[英]API Internal requests on own website?
我想為Android和Apple開發一個網站和一個應用程序。 一個應用程序將通過API從我們的域中獲取數據。
假設在我們的網站上,它將顯示產品列表或創建用戶帳戶; 在控制器中,我可以使用內部API請求,然后再通過MySQL而不是直接使用MySQL查詢方法來獲取數據。 這是普通做法還是不良做法?
這是dingo / api內部請求(Laravel)的示例:
Route::api(['version' => 'v1', 'prefix' => 'api'], function () {
Route::get('users', function () {
// fetch from database
return User:all();
});
});
在控制器中
class UsersController
{
public function showUsers()
{
$users = API::get('users');
return View::make('users-list')->with('users', $users);
}
}
在此示例中,他們為users
get方法和API::get('users');
建立了API路由設置API::get('users');
會向該終點發出內部請求,並向您返回該方法返回的結果
是的,我會考慮這種常見做法。 我個人甚至認為在內部使用自己的API是個好習慣。 這肯定有助於保持你的代碼DRY(d ONT [R EPEATŸ我們自己)。
當然,與直接方法調用相比,這會造成一些開銷,但是我懷疑它是否會引起注意。 無論如何,出於您的考慮,一種替代方法是使API控制器保持非常平坦,並將您的大多數邏輯放在其他地方(在模型,存儲庫或服務層中)。 我還是建議這樣做。 這意味着您可以像在API控制器中一樣輕松地在“常規”控制器中執行相同的操作,因為它基本上只是對另一個類的(很少)調用。
假設您的users
端點更加復雜(其中包括一些急切的加載和過濾操作)
public function index(){
return User::has('profile')
->with('profile', 'city')
->active()
->get();
}
當然,現在仍然不是很多代碼,您也可以在其他控制器中輕松地執行相同的操作。 但是想象一下,您想添加一個新的關系來增加負載。 您需要在兩個地方更改代碼。 (如果您忘記一個,您甚至可能不會注意到它...)
解決此問題的一種方法是創建一個存儲庫 。 我不會詳細介紹如何實現這種模式(Internet上有很多關於此的資源),但基本上到最后,您將擁有一個像這樣的類:
class UserRepository {
public function getAll(){
return User::has('profile')
->with('profile', 'city')
->active()
->get();
}
}
(理想情況下,您還將有一個定義存儲庫的接口...)
然后使用依賴注入使該類的實例在您的控制器中可用:(同樣,這還不完整,您還需要一些其他東西來設置DI)
public function __construct(UserRepository $repo){
$this->user = $repo;
}
public function index(){
return $this->user->getAll();
}
在其他控制器中,您可以使用完全相同的調用getAll()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.