Lumen Micro Framework da RESTful API dan foydalanish

Laravel framework bilan ishlaydigan dasturchilarimiz yaxshi bilishsa kerak. Lumen bu mikro-framework bo'lib Laravel framework ostida qurilgan va kichik servislar, mikro web ilovalar bilan ishlash va yaratish uchun mo'ljallangan. Lumenda ishlatiladigan Symfony's Routing komponentlari, Laravel tomonidan ishlash tezligini oshirish maqsadida FastRoute bilan almashtirilgan. Bu haqida https://github.com/nikic/FastRoute manzili orqali ko'proq ma'lumot olishingiz mumkin.

Ushbu maqolada, oddiy laravel yordamida RESTful API da oddiy loyiha qilib ko'ramiz. Ushbu API maqsadi va ishlash prinsibi kitoblarni saqlash va ularni chop etishga mo'ljallangan.

Iloji boricha sodda tarzda tushuntirishga harakat qilaman.

Lumen ni O'rnatish

Biz lumen bilan ishlashimiz va uni o'rnatishimiz uchun composerdan foydalanamiz. Agarda sizda composer mavjud bo'lmasa oldin o'rnatib olishni maslahat berardim. Ushu loyihani OpenServer orqali yaratdim va sizga ham shunga o'xshash local server dasturlardan foydalanishni maslahat berardim....

Endi composerga "laravel / lumen" to'plamidan "lumen_rest.uz" lumen loyihasini yaratish uchun quyidagi buyruqni kiriting.

composer create-project laravel/lumen lumen_rest.uz

Composer "lumen_rest.uz" nomli katalog yaratadi va barcha lumen fayllari ushbu katalog ichida joylashadi. Laravel Framework bilan ishlaganlar bilishlari mumkin, bizga artisan buyruqlari zarur, mavjud buyruqlarni

php artisan

Buyruqi orqali bilib olishingiz mumkin. Biz loyihamizni localhost (local server) da yaratmoqdamiz. Shu sabab localhost:8000 manzilini brauzerda kiritish orqali saytga kirishimiz mumkin. Buning uchun biz artisan buyruqlaridan biri bo'lgan

php -S localhost:8000 -t public

dan foydalanamiz. (Eski versiyalar uchun php artisan serve)

endilikda localhost:8000 manzili orqali saytimizga kirib loyihamizni ishga tushirishimiz mumkin va natija quyidagi ko'rinishga keladi.

Oldingi versiyalarda ( < 5.6*) bizga rasmi oyna ko'rinishi kerak. Ammo yangi versiyalarda ko'pgina o'zgarishlar amalga oshirilgan.

Sozlamalar (Database Configurations)

Endilikda biz ma'lumotlar bazasini (DB) yaratib olamiz. Ma'lumotlar bazasi uchun PhpMyAdmin yoki boshqa biron mysqli ni qo'llab quvvatlovchi client lardan foydalanish mumkin. Undan oldin esa env.example faylini .env faylga o'zgartiramiz. (C:\OSPanel\domains\lumen_ret.uz\.env yaratilishi kerak).

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=lument_rest (Name Of Database)
DB_USERNAME=root (Username)
DB_PASSWORD=123456789 (password)

Sozlamalarni sozlab olgach C:\OSPanel\domains\lumen_ret.uz\bootstrap katalogidan app.php faylini ochib quyidagi maydonlarni kommentariyadan ozod qiling (uncomment).

$app->withFacades();
$app->withEloquent();

Barcha sozlamalarni amalga oshirdik. Biz hozirda ORM ga murojaat qilgan holda ikkita klass Facade class va Element class larni ishlatamiz.

Migration

Endi darsimizni asosiy qisimlaridan biriga keldik. Biz ma'lumotlar bazasini yaratib olamiz. Sal yuqoriga qaytaylik. Bizning loyiha kitoblarga asoslangan shunday ekan books degan jadval yaratib olamiz va uning maydonlarini belgilaymiz.

id (int & auto incremented)

title ( varchar)

author (varchar)

isbn (varchar)

created_at (timestamp)

updated_at (timestamp)

Loyihamizning ma'lumotlar bazasidagi jadval yuqoridagi 6 ta qisimdan iborat ekan. Yangi jadval yaratish uchun quyidagi buyruqdan foydalanamiz.

php artisan make:migration create_books_table --create=books

yuqoridagi buyruq bizga yangi jadval sxemasini yaratib beradi. Va biz o'z maydonlarimizni ushbu jadvalga kiritamiz.

public function up() {
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->string('author');
$table->string('isbn');
$table->timestamps();
});
}

Endi esa ushbu jadvallarni bazada joylashgan jadvalimizga kiritamiz, ya'ni run yoki migration dan foydalangan holda.

Va jadvalimiz PhpMyAdmin da ko'rinishi kerak. Biz yuqorida o'zimizga kerakli jadvalni hosil qilib oldik.

Model

Keling endi, "app / Book.php" ostida bir books modelini yaratib olamiz va books jadvalining misolidan foydalanamiz.

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;class
Book extends Model{ protected $fillable = ['title', 'author', 'isbn'];
}
?>

Model hosil qilib olganimizdan so'ng "app/Http/Controllers" katalogida yangi BookController.php (Controller fayl) hosil qilib olamiz.

<?php
namespace App\Http\Controllers;
use App\Book;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class BookController extends Controller{
..... .....
}
?>

Bu biz yaratgan Controller fayl, ushbu class tarkibida o'zingizga kerakli metodlar va funksiyalarni e'lon qilishingiz mumkin.

Route

Biz bilamizki bizga route kerak va biz ushbu route orqali o'z havolalarimizni e'lon qilishimiz mumkin. C:\OSPanel\domains\lumen_ret.uz\routes\web.php fayli ichida oldindan bitta standart route yaratilgan va endi biz RESTful API ni ishlatishimiz uchun bir nechta route lar va ularga tegishli metod va funksiyallarni e'lon qilib yaratib olishimiz zarur.

Metod Turi Url (Havola) Controler@method
GET http://localhost:8000/api/v1/book BookController@index All Books
GET http://localhost:8000/api/v1/book{id} BookController@getbook Fetch Book By id
POST http://localhost:8000/api/v1/book BookController@createBook Create a book record
PUT http://localhost:8000/api/v1/book{id} BookController@updateBook Update Book By id
DELETE http://localhost:8000/api/v1/book{id} BookController@deleteBook Delete Book By id

Biz barcha marshrutlarda api/v1 (versiya v1) ilovasini qo'shdik. Veb-servislar yaratish uchun yaxshi amaliy vosita desak bo'ladi.

Xo'sh endi routes ga qaytsak, biz quyidagi route havolalarini elon qilishimiz zarur.

Ha, bu marshrutlarni prefiks va ismlar bo'yicha guruhlashimiz ham mumkin bu esa bizga ancha qulayliklar olib keladi va shuning uchun har bir marshrutda "api /v1" ni qo'shishga yoki "App \ Http \ Controllers" yozishga majbur bo'lmaymiz. Routes da guruhlashdan foydalanish ham kodlarni va ham vaqtni sezilarli tejashga yordam beradi..

.

Yuqoridagi ikki variantdan birortasini ishlatishingiz mumkin. Bu sizning istagingizga bog'liq bo'lgan vaziyat hisoblanadi.

Controller

Yuqorida ham aytib o'tganimdek endi asosiy qismga keldik. Biz yaratib olgan Controller BookController.php ni ochib routes da kiritgan maydonlarni ishga tushirishimiz zarur. Buning uchun kerakli ma'lumotlarni ushbu faylga kiritamiz.

Yuqorida biz metodlar, konstruktro va boshqa kerakli maydonlarni e'lon qilib oldik. va deyarli ishni tugatdik.

Testing (Sinab Ko'rish)

Biz yaratgan API hozir tayyor. Endi vaqt ilovani sinab ko'rishga keldi. Sinash uchun CURLdan foydalanishingiz mumkin.

1

2

3

4

5

6

7

curl -I http://localhost:8000/api/v1/book

curl -v -H "Accept:application/json" http://localhost:8000/api/v1/book/2

curl -i -X POST -H "Content-Type:application/json" http://localhost:8000/api/v1/book -d '{"title":"Test Title","author":"test author","isbn":"12345"}'

curl -v -H "Content-Type:application/json" -X PUT http://localhost:8000/api/v1/book -d '{"title":"Test updated title","author":"test upadted author","isbn":"1234567"}'

curl -i -X DELETE http://localhost:8000/api/v1/book/2

Men test qilish uchun "Advanced REST client" chrome uchun mo'ljallangan ilovasidan foydalandim.

Va siz ham buni test qilib ko'rishingiz mumkin. O'rnatish va undan foydalanish juda oson va qulaydir. Ushbu dars orqali men iloji boricha juda sodda bo'lgan API ni yaratishni ko'rsatishga harakat qildim. Ushbu qo'llanmani yaratishda quyidagi manbalardan foydalandim, va siz ham ushbu manzildagi ma'lumotlarni kelajakdagi loyihalaringizda foydalanishingiz mumkin.

https://lumen.laravel.com/docs/5.6

https://laravel.com/docs/5.6

Eslatib o'tish joiz. Ushbu qo'llanmani Laravel va Lumen ning oxirgi versiyalaridan foydalangan holda yaratdim. Eski versiyalar bilan ozma oz farq qilishi mumkin.



Oktam

Muallif haqida

Yaqubov Oktam


Blogdagi so‘nggi maqolalar:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!