我想为 Web 和 api 为移动应用程序制作一个 Laravel 5.1 应用程序。我想为 api 请求返回 json 并为 web 浏览器查看。目前我已经设置了不同的路线和不同的 Controller 。在这种方法中,我重复了代码。我不知道设计这种架构的最佳方法是什么。此外,我还浏览了一些类似的线程,这些线程建议在 Web 浏览器中使用 angular.js。
// web controller
Route::resource('product', 'ProductController');
// api controller
Route::group(['prefix' => 'api'], function() {
Route::resource('product', 'APIProductController');
});
最佳答案
你可以有两种基本方法:
- 保持独立的路由和 Controller ,但将所有通用 Controller 的代码移至服务中。这可能是最干净、最灵活的解决方案,因为它使得将来独立更新 API 和 Web 方法变得非常容易。
- 或者您可以将 api 和 web 请求路由到同一个 Controller ,将 Request 对象传递给它,然后根据某些请求属性决定返回哪个响应,json 或 html。
例如,对于第二种方法,您可以这样做:
// web controller
Route::resource('product', 'ProductController');
// api controller
Route::group(['prefix' => 'api'], function() {
Route::resource('product', 'ProductController');
});
// and in the ProductController you have
public function index(Request $request)
{
// do some stuff...
if ($request->segment(1) === 'api') { // route prefix was api
// return json
} else {
// return the view
}
}
您还可以使用 $request->wantsJson() 方法来检查 Accept:
header ,或者您可以传递一个特殊的 GET 变量(例如 ?_format=json
)所有用于定义响应格式的 API 调用都应该是 json,正如@Bogdan Kuštan 已经建议的那样。恕我直言,如果您已经在您的 url 上使用了 api 前缀,那么检查它会更可靠、更清晰。
关于php - 如何为 Web 客户端和 native 移动应用程序设计 Laravel 5.1 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870135/