آموزش زمانبندی وظایف با WorkManager در اندروید
آموزش زمانبندی وظایف با WorkManager در اندروید
2019-04-05
اعتبارسنجی فرم ثبت نام با ajax در لاراول 5.8
اعتبارسنجی فرم ثبت نام با ajax در لاراول 5.8
2019-04-12

ساخت RESTful API برای عملیات CRUD در لاراول به همراه احراز هویت با استفاده از Passport

ساخت RESTful API در لاراول با Passport

ساخت RESTful API در لاراول با Passport

در این آموزش ما قصد داریم به شما نحوه ی ساخت RESTful API در لاراول به همراه احراز هویت با استفاده از پکیج passport را آموزش دهیم.ما قصد داریم برای ساخت RESTful API از API resources لاراول استفاده کنیم.در این مقاله ما به عنوان مثال API ، ثبت نام ، ورود ، عملیات CRUD محصول کتاب را ایجاد می کنیم.

سرفصل های آموزش ساخت RESTful API در لاراول با Passport

  1. نصب لاراول و پیکربندی اولیه
  2. نصب پکیج Passport
  3. Migrate و نصب Passport
  4. پیکربندی Passport
  5. ایجاد جدول Book
  6. ایجاد مدل و کنترلر
  7. ایجاد مسیرهای API
  8. صدا زدن API با استفاده از Postman

گام 1 : نصب لاراول و پیکربندی اولیه

برای هر پروژه لاراول ما نیاز داریم که لاراول را نصب کنیم. به همین دلیل ما یک مقاله در رابطه با چگونگی نصب و پیکربندی اولیه لاراول آماده کرده ایم که می توانید از اینجا ان را مشاهده نمایید : آموزش نصب لاراول به همراه تنظیمات اولیه

گام 2 : نصب پکیج Passport

composer require laravel/passport

ما باید PassportServiceProvider را به فایل app.php اضافه کنیم. فایل  مذکور را از مسیر config / app.php را باز کنید و خط زیر را به آن اضافه کنید:

'providers' =>[
    Laravel\Passport\PassportServiceProvider::class,
],

گام 3 : Migrate و نصب Passport

در اینجا ما نیاز داریم که دستور migration را اجرا کنیم.بعد از اجرای دستور migration چندین جدول برای ما ساخته می شود که می توانید انها را در دیتابیس پروژه خود مشاهده نمایید :

php artisan migrate

بعد از اجرای دستور migration ما برای نصب Passport باید دستور زیر را اجرا کنیم:

php artisan passport:install

گام 4 : پیکربندی Passport

در ادامه ما باید سه فایل User.php ، AuthServiceProvider.php  و auth.php  را پیکربندی کنیم . فایل User.php  را از مسیر app/User.php  باز کنید و کدهای زیر را در آن وارد کنید:

<?php
  
namespace App;
  
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Laravel\Passport\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
  
class User extends Authenticatable implements MustVerifyEmail
{
    use HasApiTokens, Notifiable;
  
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];
  
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

app/Providers/AuthServiceProvider.php را ویرایش کنید و کدهای زبر را در آن بنویسید:

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        'App\Model' => 'App\Policies\ModelPolicy',
    ];


    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();


        Passport::routes();
    }
}

همچنین فایل config/auth.php را باز کنید و کدهای زیر را در آن وار کنید:

'guards' => [ 
        'web' => [ 
            'driver' => 'session', 
            'provider' => 'users', 
        ], 
        'api' => [ 
            'driver' => 'passport', 
            'provider' => 'users', 
        ], 
    ],

گام 5 : ایجاد جدول Book

با اجرای دستور زیر جدول books را ایجاد کنید:

php artisan make:migration create_books_table

به پوشه database/migrations بروید و فایل migration که اخیرا ایجاد کردید را پیدا کنید و کدهای زیر را در آن وارد کنید:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBooksTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('books', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->text('author');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('books');
    }
}

اکنون دستور زیر را برای migrate کردن ایجاد کنید:

php artisan migrate

گام 6 : ایجاد مدل و کنترلر

ما قصد داریم یک مدل و دو کنترلر برای این پروژه ایجاد کنیم. ابتدا دستور زیر را برای ایجاد مدل Book اجرا کنید:

php artisan make:model Book

مدل Book را از مسیر app/Book.php  باز کنید و کدهای زیر را در آن بنویسید:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Book extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'author'
    ];
}

در ادامه با اجرای دستور زیر کنترلر BookController را در پوشه API ایجاد کنید:

php artisan make:controller API/BookController

کدهای زیر را در کنترلرBookController وارد کنید:

<?php

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Book;
use Validator;

class BookController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $books = Book::all();
        $data = $books->toArray();

        $response = [
            'success' => true,
            'data' => $data,
            'message' => 'Books retrieved successfully.'
        ];

        return response()->json($response, 200);
    }


    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $input = $request->all();

        $validator = Validator::make($input, [
            'name' => 'required',
            'author' => 'required'
        ]);

        if ($validator->fails()) {
            $response = [
                'success' => false,
                'data' => 'Validation Error.',
                'message' => $validator->errors()
            ];
            return response()->json($response, 404);
        }

        $book = Book::create($input);
        $data = $book->toArray();

        $response = [
            'success' => true,
            'data' => $data,
            'message' => 'Book stored successfully.'
        ];

        return response()->json($response, 200);
    }


    /**
     * Display the specified resource.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $book = Book::find($id);
        $data = $book->toArray();

        if (is_null($book)) {
            $response = [
                'success' => false,
                'data' => 'Empty',
                'message' => 'Book not found.'
            ];
            return response()->json($response, 404);
        }


        $response = [
            'success' => true,
            'data' => $data,
            'message' => 'Book retrieved successfully.'
        ];

        return response()->json($response, 200);
    }


    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Book $book)
    {
        $input = $request->all();

        $validator = Validator::make($input, [
            'name' => 'required',
            'author' => 'required'
        ]);

        if ($validator->fails()) {
            $response = [
                'success' => false,
                'data' => 'Validation Error.',
                'message' => $validator->errors()
            ];
            return response()->json($response, 404);
        }

        $book->name = $input['name'];
        $book->author = $input['author'];
        $book->save();

        $data = $book->toArray();

        $response = [
            'success' => true,
            'data' => $data,
            'message' => 'Book updated successfully.'
        ];

        return response()->json($response, 200);
    }


    /**
     * Remove the specified resource from storage.
     *
     * @param  int $id
     * @return \Illuminate\Http\Response
     */
    public function destroy(Book $book)
    {
        $book->delete();
        $data = $book->toArray();

        $response = [
            'success' => true,
            'data' => $data,
            'message' => 'Book deleted successfully.'
        ];

        return response()->json($response, 200);
    }
}

حالا کنترلر UserController را در پوشه API ایجاد کنید:

php artisan make:controller API/UserController

حالا کدهای زیر را در آن وارد کنید:

<?php

namespace App\Http\Controllers\API;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\User;
use Validator;

class UserController extends Controller
{
    /**
     * Register api
     *
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'email' => 'required|email',
            'password' => 'required',
            'c_password' => 'required|same:password',
        ]);

        if ($validator->fails()) {
            $response = [
                'success' => false,
                'data' => 'Validation Error.',
                'message' => $validator->errors()
            ];
            return response()->json($response, 404);
        }

        $input = $request->all();
        $input['password'] = bcrypt($input['password']);
        $user = User::create($input);
        $success['token'] = $user->createToken('MyApp')->accessToken;
        $success['name'] = $user->name;

        $response = [
            'success' => true,
            'data' => $success,
            'message' => 'User register successfully.'
        ];

        return response()->json($response, 200);
    }

    /**
     * Login api
     *
     * @return \Illuminate\Http\Response
     */
    public function login()
    {
        if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
            $user = Auth::user();
            $success['token'] = $user->createToken('MyApp')->accessToken;

            return response()->json(['success' => $success], 200);
        } else {
            return response()->json(['error' => 'Unauthorised'], 401);
        }
    }
}

گام 7 : ایجاد مسیرهای API

در این مرحله ما قصد داریم مسیرهای (Routes) API را ایجاد کنیم ، برای این منظور routes/api.php را باز کنید و کدهای زیر را در آن وارد کنید:

<?php

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::post('register', 'API\RegisterController@register');
Route::post('login', 'API\UserController@login');

Route::middleware('auth:api')->group( function () {
    Route::resource('books', 'API\BookController');
});

کدنویسی مربوط به این بخش به پایان رسید ، با اجرای دستور زیر برنامه خود را اجرا کنید:

php artisan serve

در حال حاضر برنامه در حال اجرا می باشد ، ما باید API ها را با استفاده از Postman صدا بزنیم.ما باید این جزئیات هدر را پاس بدیم یا منتقل کنیم :

'headers' => [

    'Accept' => 'application/json',

    'Authorization' => 'Bearer '.$accessToken,

]

گام 8 : صدا زدن API با استفاده از Postman

برنامه postman را باز کنید و API ها را مانند زیر صدا بزنید.

توجه: من یک دامنه سفارشی برای این پروژه ایجاد کرده ام. لینک API شما باید مانند http://localhost: 8000/api/ باشد. اگر می خواهید مانند من از یک دامنه سفارشی استفاده کنید، این مقاله را بخوانید: نحوه اضافه کردن دامنه سفارشی و نصب SSL بر روی لوکال هاست

API مربوط به ثبت نام: Verb: POST ، URL: http://laravel_api.test/api/register

ساخت RESTful API در لاراول
ساخت RESTful API در لاراول – API مربوط به ثبت نام

API مربوط به ورود: Verb: POST ، URL: http://laravel_api.test/api/login

ساخت RESTful API در لاراول
ساخت RESTful API در لاراول – API مربوط به ورود

API مربوط به افزودن کتاب: Verb: POST ، URL: http://laravel_api.test/api/books

ساخت RESTful API در لاراول
ساخت RESTful API در لاراول – API مربوط به افزودن

API مربوط به گرفتن همه کتاب ها: Verb: GET ، URL: http://laravel_api.test/api/books

ساخت RESTful API در لاراول
ساخت RESTful API در لاراول – مربوط به گرفتن همه

API مربوط به نمایش یک کتاب: Verb: GET ، URL: http://laravel_api.test/api/books/1

ساخت RESTful API در لاراول
ساخت RESTful API در لاراول – API مربوط به نمایش

API مربوط به بروزرسانی یک کتاب: Verb: PUT ، URL: http://laravel_api.test/api/books/1

ساخت RESTful API در لاراول
ساخت RESTful API در لاراول – API مربوط به بروزرسانی

API مربوط به حذف یک کتاب: Verb: DELETE ، URL: http://laravel_api.test/api/books/1

ساخت RESTful API در لاراول
API مربوط به حذف

امیدوارم این مقاله به شما کمک کرده باشد.

1 Comment

  1. مهدی صفری گفت:

    عالی بود

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *