亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Laravel從零開發(fā)后臺(tái)API(二)

Nekron / 690人閱讀

摘要:之前我們已經(jīng)準(zhǔn)備好了基本的安裝過程現(xiàn)在我們?nèi)?shí)現(xiàn)一下具體的業(yè)務(wù)部分用戶的登錄與注冊(cè)對(duì)于用戶注冊(cè)這對(duì)于一款應(yīng)用來說再正常不過了為了接下來我們的效果我們可以去生成一個(gè)即在項(xiàng)目終端執(zhí)行生成用戶之后我們暫時(shí)先不去編輯字段后面我們需要用到時(shí)再加返回字

之前我們已經(jīng)準(zhǔn)備好了基本的安裝過程 現(xiàn)在我們?nèi)?shí)現(xiàn)一下具體的業(yè)務(wù)部分

用戶的登錄與注冊(cè)

對(duì)于用戶注冊(cè) 這對(duì)于一款應(yīng)用來說再正常不過了 為了接下來我們的效果 我們可以去生成一個(gè)UserController

即在項(xiàng)目終端執(zhí)行

$ php artisan make:controller AppApiControllersUserController

生成用戶之后我們暫時(shí)先不去編輯字段 后面我們需要用到時(shí)再加

返回字段數(shù)據(jù)沿用之前創(chuàng)建的Lesson Model 這里我們先在routes/api.php加上我們的基本路由

Route::middleware("auth:api")->get("/user", function (Request $request) {
    return $request->user();
});

$api = app("DingoApiRoutingRouter");
$api->version("v1", function ($api) {
    $api->group(["namespace" => "AppApiControllers"], function ($api) {
        $api->get("lessons", "LessonsController@index");
        $api->get("lessons/{id}", "LessonsController@show");
    });
});

我們就去訪問這個(gè)http://host/api/lessons 先去完成控制器的相關(guān)方法

public function index()
{
    $lessons =  Lesson::all();
    
    return response()->json($data);
}

這只是簡單的返回Lessons的全部字段信息 但是我們可以看到已經(jīng)返回了所有的字段信息

但是這個(gè)時(shí)候有個(gè)問題就是 我們的字段返回時(shí)不可能是全部返回的 我們肯定會(huì)對(duì)一些字段進(jìn)行篩選 這就用到了我們之前創(chuàng)建的Transformers這個(gè)文件下的了

話不多說 在App/Api/Transformers目錄下新建LessonTranformer

use AppLesson;
use LeagueFractalTransformerAbstract;

class LessonTransformer extends TransformerAbstract
{
    public function transform(Lesson $lesson)
    {
        return [
            "title" => $lesson["title"],
            "content" => $lesson["body"],
            "is_free" => (boolean)$lesson["free"]
        ];
    }
}

這樣我們就實(shí)現(xiàn)了對(duì)字段數(shù)據(jù)的映射 再去LessonController去對(duì)之前的所有字段進(jìn)行映射

public function index()
{
    $lessons =  Lesson::all();

    return $this->collection($lessons,new LessonTransformer());
}

當(dāng)然這個(gè)要想實(shí)現(xiàn)這個(gè)collection我們需要使用Dingo提供給我們的Helpers trait

這樣一來的話我們之前所繼承的基類可以這樣寫

use DingoApiRoutingHelpers;

class Controller extends BaseController
{
    use Helpers,AuthorizesRequests, DispatchesJobs, ValidatesRequests;

}

這樣我們返回的就只有title content is_free這三個(gè)字段

同樣的如果我們想要獲取其中一條數(shù)據(jù)的話 我們也是可以這樣去映射字段的

public function show($id)
{
    $lesson = Lesson::find($id);
    if(!$lesson){
        return $this->response()->errorNotFound("Lesson nt found");
    }
    return $this->response()->item($lesson,new LessonTransformer());
}

這里我用的是Dingo提供給的返回方法 如果沒有這條數(shù)據(jù)會(huì)返回404和對(duì)應(yīng)的錯(cuò)誤信息

下面就是 結(jié)合jwt的auth認(rèn)證
為此我們?cè)?b>AppApiControllers目錄下新建一個(gè)AuthController

這里我們需要去編寫我們的認(rèn)證方法和獲取認(rèn)證用戶的方法

新建認(rèn)證

 public function authenticate(Request $request)
{
    // grab credentials from the request
    $credentials = $request->only("email","password");


    try {
        // attempt to verify the credentials and create a token for the user
        if (! $token = JWTAuth::attempt($credentials)) {
            return response()->json(["error" => "invalid_credentials"], 401);
        }
    } catch (JWTException $e) {
        // something went wrong whilst attempting to encode the token
        return response()->json(["error" => "could_not_create_token"], 500);
    }

    // all good so return the token
    return response()->json(compact("token"));
}

為了執(zhí)行這個(gè)方法 可以去路由中定義

$api->version("v1", function ($api) {
    $api->group(["namespace" => "AppApiControllers"], function ($api) {
        $api->post("user/login","AuthController@authenticate");
        $api->post("user/register","AuthController@register");
    });
});

這個(gè)時(shí)候再去查看一下我們的路由的話就會(huì)看到新定義的post路由

為了驗(yàn)證請(qǐng)求的結(jié)果 我們可以使用postman這個(gè)chrome工具 去請(qǐng)求http://localhost:8000/api/use...

這個(gè)時(shí)候是會(huì)返回{"error":"invalid_credentials"}

為了能夠正確通過,我們可以在body部分給出用戶郵箱和密碼(用戶可用thinker創(chuàng)建一個(gè)) 這個(gè)時(shí)候就會(huì)正確返回一個(gè)token

當(dāng)然為了測試的話可以直接去tinker新建一個(gè)用戶即可 這里我已經(jīng)新建了一個(gè)用戶郵箱是jellybean@163.com的用戶

這樣我們就可以拿到用戶的token 我們?cè)诩?b>jwt認(rèn)證時(shí) 添加了jwt:auth的中間件

這個(gè)其實(shí)很好理解 就比如一篇文章 如果用戶沒有登錄進(jìn)來你是不能對(duì)文章進(jìn)行收藏 評(píng)論等操作的

那么這個(gè)token我們是在用戶登錄之后或者用戶注冊(cè)之后會(huì)返回給客戶段一個(gè)token值 這樣用戶憑借這個(gè)token

也就是一個(gè)證明你是已經(jīng)登錄的用戶 你是我們這個(gè)網(wǎng)站的用戶 這樣你就可以發(fā)表文章等操作

這樣的話我們可以為一些路由添加一些中間件

$api->group(["namespace" => "AppApiControllers","middleware"=>"jwt.auth"],function ($api){
        $api->get("lessons","LessonsController@index");
        $api->get("lessons/{id}","LessonsController@show");
    });

這樣的話我們?cè)偃ピL問某一個(gè)lesson的話

提示我們?nèi)鄙?b>token 因?yàn)楝F(xiàn)在相當(dāng)于一個(gè)沒有登錄的用戶去訪問這條路由 那么我們?cè)偃ソ由衔覀兊?b>token的話

這下我們就可以訪問到對(duì)應(yīng)的數(shù)據(jù)了 這個(gè)token也是會(huì)有過期時(shí)間的 如果過期了 我們需要去更新這個(gè)token

在應(yīng)用中我們可以加一個(gè)api_token字段來存儲(chǔ)這個(gè)字段 這樣每次用戶去訪問相應(yīng)的路由的話我們會(huì)去驗(yàn)證這個(gè)token

當(dāng)然 jwt 安裝成功后 ,默認(rèn)使用的 auth 進(jìn)行 認(rèn)證 ,讀取的也是users表的數(shù)據(jù)

如果是需要驗(yàn)證其他的數(shù)據(jù)表的話可以參照這篇文章 jwt 自定義 數(shù)據(jù)表 區(qū)別于 auth 中的 users 表

這樣基本就實(shí)現(xiàn)了一個(gè)基本的后臺(tái)接口的請(qǐng)求過程

參考我的博客文章

Laravel API開發(fā)初探

Laravel API結(jié)合Dingo API和JWT

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/25635.html

相關(guān)文章

  • Laravel從零開發(fā)后臺(tái)API(一)

    摘要:介紹在開發(fā)后臺(tái)接口現(xiàn)在更多的企業(yè)選擇了來開發(fā)后臺(tái)接口當(dāng)然和不失為是一種不錯(cuò)的選擇不過這里就以為例基于框架開發(fā)后臺(tái)這里也是如果你是從事其他方向想做一些后臺(tái)開發(fā)都可以去嘗試一下的當(dāng)然實(shí)例項(xiàng)目我會(huì)不放在我的上僅供參考地址前期準(zhǔn)備當(dāng)然前提是安裝 介紹 在開發(fā)后臺(tái)接口現(xiàn)在更多的企業(yè)選擇了PHP來開發(fā)后臺(tái)接口 當(dāng)然Python和NodeJs不失為是一種不錯(cuò)的選擇 不過這里就以PHP為例 基于Lar...

    selfimpr 評(píng)論0 收藏0
  • 后端開發(fā)從零做一個(gè)移動(dòng)應(yīng)用(后端篇)

    摘要:后端開發(fā)的疑惑后端開發(fā)最常面對(duì)的一個(gè)問題性能高并發(fā)等等。而到了時(shí)代,在方面有了前后端分離概念移動(dòng)后端更是無力渲染天然前后端分離。 先來上一張前端頁面的效果圖(Vue + Vux + Vuex + Vue-Router)。showImg(https://segmentfault.com/img/remote/1460000010207850); 第一次做gif 沒什么經(jīng)驗(yàn),太大了。加載...

    codergarden 評(píng)論0 收藏0
  • 小白的邊學(xué)邊寫,一個(gè)基于laravel的APP接口【API】(一)

    摘要:前期準(zhǔn)備原文地址前言,為什么做以及要做個(gè)啥本人姓小名白,不折不扣編程屆小白一名,但是自從大一那會(huì)兒接觸到編程這件奇妙的事情,就完完全全的陷入的程序的世界??蚣?,是我最喜歡的框架了,沒有之一。 前期準(zhǔn)備 原文地址前言,為什么做以及要做個(gè)啥本人姓小名白,不折不扣編程屆小白一名,但是自從大一那會(huì)兒接觸到編程這件奇妙的事情,就完完全全的陷入的程序的世界。這不,最近又開始折騰APP了,話說現(xiàn)在開...

    Nosee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<