Membuat API Di Laravel 5.5 Menggunakan Resource API
Selama kurang lebih dua tahun saya telah menggunakan Fractal untuk pengembangan API saya.
Jika ada satu perihal yang selalu saya inginkan di Laravel, itu sama seperti itu. Mengubah data Anda untuk membangun API yang lebih bagus.
Jangan salah paham, Fraktal itu bagus, akan tetapi saya selalu memutuskan untuk tetap ada di sekitar kerangka kerja. Jika benar-benar tak perlu menggunakan perpustakaan, maka saya tidak! Saya tidak suka memperumit masalah dengan perpustakaan pihak ketiga.
Sekarang, hampir satu tahun saya bekerja dengan framework front-end seperti Vue dan React dan saya menyukainya . Jadi, satu-satunya hal yang saya kerjakan secara Laravel adalah membuat API. Fraktal adalah perpustakaan nomor satu untuk didownload setiap kali saya harus membuat API. Bukan itu masalahnya lagi.
Di Laravel 5.5, kami saat ini memiliki sumber daya API dan izinkan saya memberitahu Anda, SAYA SANGAT BERSEMANGAT.
Laravel 5.5 dirilis 2 jam yang lalu, sementara saya minum kopi dengan beberapa rekan. Saya membaca tweet sekitar 30 menit yang lalu dan hal pertama kali yang terpikir di pikiran saya adalah membuat posting website pertama mengenai sumber daya API, jadi inilah saya…
Sumber daya API Laravel secara harfiah didasarkan pada Fraktal, sehingga tak perlu banyak memahami cara menggunakannya . Jadi mari kita mulai…
Membuat aplikasi Laravel
Buat aplikasi Laravel dengan perintah biasa
composer create-project laravel/laravel Laravel55Api
Setelah Anda melakukannya, ganti nama file .env.example Anda menjadi .env dan hasilkan kunci Laravel Anda dengan perintah
php artisan key:generate
Jalankan server
php artisan serve
Hebat… Sekarang apa?
Membuat sumber daya produk
Sumber daya api di Laravel adalah fitur baru yang akan mengganti model dan koleksi model Anda menjadi JSON . Maka silahkan kita buat sumber daya untuk produk.
php artisan make:resource Product
Anda dapat menemukan sumber daya Produk Anda, di dalam app/Http/Resources
Tentu saja kita memerlukan migrasi, model, dan pengontrol untuk produk. Kami dapat secara cepat melakukan semua itu dengan perintah ini.
php artisan make:model Product -mc
Buka migrasi produk dan ubah fungsi ke atas menjadi yang ini:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->integer('price');
$table->timestamps();
});
}
Perhatikan bahwa harga adalah bilangan bulat. TOLONG, SAYA MOHON! JANGAN PERNAH MENYIMPAN DATA HARGA ANDA SEBAGAI GANDA!
SELALU SIMPAN SEBAGAI INTEGER!
Sekarang hubungkan aplikasi Laravel Anda dengan database dan migrasikan tabel.
Ini bukanlah posting Laravel 101, jadi saya tidak akan membuang waktu Anda dengan menghubungkan Laravel ke database.
Sekarang apa?
Jadi , hingga saat ini, kami memiliki model, pengatur, migrasi, dan sumber daya yang seperti yang kami ucapkan akan mengubah model dan koleksi model Anda menjadi JSON. Sekarang apa?
Pertama-tama, apa itu kelas sumber daya? Apa kelas Produk yang kami buat dalam folder sumber daya? Kelas sumber daya mewakili satu model yang perlu diubah jadi struktur JSON.
Dengan itu, mari kita membuka kelas sumber daya Product.php.
Kami memiliki metode toArray, metode itu digunakan untuk mengembalikan array atribut yang harus diubah jadi JSON saat mengirimi respons.
Mari kita ubah sehingga kita bisa mempunyai ide yang lebih bagus.
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'price' => $this->price,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
Sekarang, itu artinya kita akan mendapatkan kembali sebagai id tanggapan, nama, harga, dibuat_at, dan diperbarui_at.
Jika kita tidak menyertakan harga dalam metode toArray, maka kita tidak mengembalikannya di JSON kita. Keren ah? Memakai sumber daya Produk
Gunakan sumber daya Produk
Mari Marikita lanjutkan dan gunakan pengontrol kita dan sumber daya produk yang baru saja kita perbaiki metode toArray-nya.
Seperti inilah tampilan pengontrol produk:
<?php
namespace App\Http\Controllers;
use App\Product;
use App\Http\Resources\Product as ProductResource;
class ProductController extends Controller
{
public function show ($id)
{
return new ProductResource(Product::find($id));
}
}
Kami cukup meneruskan produk ke kelas sumber daya produk untuk mengubahnya.
Mari buat rute untuk metode show dan lihat hasilnya.
Buka file api.php dan DI LUAR middleware rute, buat rute ini.
Route::get('/products/{id}', 'ProductController@show');
Sekarang, buat produk baru secara manual di dalam tabel produk Anda hingga Anda memiliki produk sampel untuk dimainkan dan kunjungi http://127.0.0.1:8000/api/products/1.
Anda harus mendapatkan hasil ini:
Sekarang mari bermain sedikit dengan sumber daya kita. Misalkan Anda TIDAK ingin mempublikasikan harga suatu produk, yang harus Anda lakukan hanyalah menghapusnya dari metode toArray Anda. Sekali, Anda menghapus harga dari metode toArray, maka Anda akan mendapatkan hasil ini, yang tentu saja tidak termasuk harga:
Apa itu semua?
Tentu saja tidak! Karena metode toArray hanyalah sebuah metode, itu berarti Anda bisa memasukkan informasi tambahan.
Misalnya kita ingin menyertakan informasi "test", maka cukup ganti metode toArray Anda.
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'test' => 'This is just a test',
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
Dan inilah hasilnya:
Namun, sesuatu yang penting adalah Anda selalu harus mengembalikan type data yang benar. Lihat harga di tangkapan layar pertama, ini kembali sebagai bilangan bulat, akan tetapi kita bisa memaksanya jadi bilangan bulat, dengan menjelaskan (int) $this->price.
Sekarang, lihat stempel waktu create_at dan up-dated_at. Bagaimana jika yang ingin Anda lakukan hanyalah mengembalikan serangkaian stempel waktu yang sebenarnya? Kemudian Anda dapat mengetikkannya ke string seperti dalam kasus ini:
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'test' => 'This is just a test',
'created_at' => (string)$this->created_at,
'updated_at' => (string)$this->updated_at,
];
}
Sekarang hasilnya adalah ini:
Sebut saja itu postingan
Ini hanya contoh kecil dari apa yang dapat Anda lakukan dengan resource API Laravel.
Tetapi jika saya terus seperti ini, posting ini akan membuat Anda membaca selama-lamanya.
Jadi , sebut saja ini sebuah postingan, tapi asal tahu saja, kami masih memiliki paginasi, pengumpulan sumber daya, cara menyertakan hubungan, pembungkusan data, dan lainnya untuk didiskusikan!
terima kasih!!!