Laravel 4 RESTful Api,内容协商

时间:2013-08-12 20:33:28

标签: php api rest laravel content-negotiation

我正在使用laravel在RESTFul API中工作,我想在我的项目中使用内容协商,但我不知道如何实现这一点。 我的控制器是由api版本支持的,我想区分api版本并使用正确的控制器,取决于版本。

我的API路由器是:

Route::group(array('prefix' => 'api'), function() {
    Route::resource('users', 'API\V1\UsersController');
});

我应该创建一个api.type过滤器以在我的路由组中使用,还是应该在路由组clousure中执行,或者在每个控制器中?

1 个答案:

答案 0 :(得分:3)

不要害怕将应用程序逻辑扩展到库类中。您不必将所有内容都放在Laravel给定的文件夹结构中。

事实上,添加自己的命名空间类组可以带来很大的好处。您可以在creating your own application library here上看到一些设置。

完成设置后,您可以创建一个类,其职责是决定要返回的内容类型。这可能基于Accept标题,网址参数或您定义的任何内容(这取决于您,API创建者)。

也许这个类会使用Accept标题并将其标准化为“json”,“xml”和“html”。

Request类有some methods,可以通过Accept标题为您提供帮助。

所以,在伪代码(要遵循的语法错误!)中,您的控制器可能会执行以下操作:

/* GET /api/users */
public function index()
{
    // Might return "json" or "xml" or "html"
    $contentType = \My\ContentType\Class->getContentType();

    $users = User::all();

    // Not shown here is logic to set `content-type` header in the returned response (json vs xml vs html)
    // Perhaps a method to go into your implementation of \My\ContentType\Class
    return View::make('users.'.$contentType)->with(array( 'users' => $users ));


}

这只是对你可能会做什么的一个想法。关键点是让自己在一个可以放置业务逻辑的库中工作,让您开始了解如何为您的应用程序添加业务逻辑。

希望有所帮助。