用Laravel构建一个REST JSON API


Building a REST JSON API with Laravel

我需要构建我的应用程序的移动版本。移动应用程序将具有相同的功能,为此,我需要为我的web应用程序构建一个API,可以从移动客户端访问。

让我们有一个例子:我有一个名为PostController的控制器类,它负责应用程序中的帖子。这是一个资源控制器

Route::resource("users.posts", "PostController");

当用户访问http://domain.com/users/{id}/posts/{id}时,他会得到一个呈现的HTML响应。这在PostController@show方法中完成:

public function show($user_id, $post_id) {
    $post = Post::findOrFail($post_id);
    // other logic here
    return view("post.show", ["post" => $post_id]);
}

但现在用户启动他的移动应用程序查询http://api.domain.com/users/{id}/posts/{id}。我知道我可以为API创建一个单独的控制器,但这会导致代码重复。很难维护,不是个好主意。

我如何做一个JSON API,利用现有的控制器?

比如

public function show($user_id, $post_id) {
    $post = Post::findOrFail($post_id);
    // other logic here
    if(is api.domain.com) {
        return json
    } else {
        return view("post.show", ["post" => $post_id]);
    }
}

我需要用OAuth保护API,我使用了oauth2-server-laravel包。

这主要是个人偏好,我会使用单独的控制器,因为我认为api和web应用程序是独立的应用程序。