Tutorial Restful API di Laravel 9 #4 : Insert Data ke Database


Tutorial Restful API di Laravel 9 #4 : Insert Data ke Database

Halo teman-teman semuanya, di artikel sebelumnya kita telah berhasil menampilkan data menggunakan Rest API di Laravel. Dan di artikel kali ini kita akan belajar bagaimana cara melakukan insert data menggunakan Rest API.

Dan untuk Rest API yang akan kita buat mendukung upload gambar, sehingga kita juga bisa menambahkan gambar saat proses insert data.

Langkah 1 - Menambahkan Method Store

Pertama, kita akan menambahkan 1 method baru yang bernama store di dalam controller PostController. Method ini akan kita fungsikan untuk melakukan proses upload gambar beserta insert data ke dalam database.

Silahkan buka file app/Htpp/Controllers/Api/PostController.php, kemudian ubah semua kode-nya menjadi seperti berikut ini :

<?php

namespace App\Http\Controllers\Api;

use App\Models\Post;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\PostResource;
use Illuminate\Support\Facades\Validator;

class PostController extends Controller
{    
    /**
     * index
     *
     * @return void
     */
    public function index()
    {
        //get posts
        $posts = Post::latest()->paginate(5);

        //return collection of posts as a resource
        return new PostResource(true, 'List Data Posts', $posts);
    }
    
    /**
     * store
     *
     * @param  mixed $request
     * @return void
     */
    public function store(Request $request)
    {
        //define validation rules
        $validator = Validator::make($request->all(), [
            'image'     => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            'title'     => 'required',
            'content'   => 'required',
        ]);

        //check if validation fails
        if ($validator->fails()) {
            return response()->json($validator->errors(), 422);
        }

        //upload image
        $image = $request->file('image');
        $image->storeAs('public/posts', $image->hashName());

        //create post
        $post = Post::create([
            'image'     => $image->hashName(),
            'title'     => $request->title,
            'content'   => $request->content,
        ]);

        //return response
        return new PostResource(true, 'Data Post Berhasil Ditambahkan!', $post);
    }
}

Dari penambahan kode di atas, pertama kita import Facades Validator dari Laravel. Ini akan kita gunakan untuk membuat manual validasi.

use Illuminate\Support\Facades\Validator;

Kemudian kita menambahkan metod baru dengan nama store. Di dalam method tersebut, pertama-tama kita membuat sebuah validasi yang kurang lebih seperti berikut ini :

//define validation rules
$validator = Validator::make($request->all(), [
   'image'     => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
   'title'     => 'required',
   'content'   => 'required',
]);

Dari penambahan validasi di atas, kurang lebih detailnya seperti berikut ini :

KEY VALIDATION KETERANGAN
image required field wajib diisi.
image field harus berupa gambar
mimes:jpeg,png,jpg,gif,svg filed harus memiliki extensi jpeg, png, jpg, gif dan svg.
max:2048 field maksimal berukuran 2048 Mb / 2Mb.
title required field wajib diisi.
content required field wajib diisi.

Jika data yang dikirimkan tidak sesuai dengan validasi di atas, maka kita akan return ke dalam format JSON dengan status code 422 yang berisi informasi validasi error.

//check if validation fails
if ($validator->fails()) {
   return response()->json($validator->errors(), 422);
}

Tapi, jika data yang dikirimkan sudah sesuai, maka kita akan melakukan proses upload gambar ke dalam server.

//upload image
$image = $request->file('image');
$image->storeAs('public/posts', $image->hashName());

Setelah gambar berhasil diupload, langkah selanjutnya adalah melakukan insert data ke dalam database menggunakan Eloquent.

//create post
$post = Post::create([
   'image'     => $image->hashName(),
   'title'     => $request->title,
   'content'   => $request->content,
]);

Dan jika proses insert berhasil dilakukan, maka kita akan return menggunakan PostResource dengan merngirimkan beberapa parameter, kurang lebih seperti berikut ini :

return new PostResource(true, 'Data Post Berhasil Ditambahkan!', $post);

Langkah 2 - Uji Coba Rest API

Sekarang kita lanjutkan untuk melakukan proses uji coba insert data post. Silahkan buka aplikasi Postman, kemudian masukkan URL berikut ini http://localhost:8000/api/posts dan untuk method-nya silahkan pilih POST.

Jika sudah, silahkan klik Send, maka kita akan mendapatkan response error validasi yang dikirimkan oleh controller. Kurang lebih seperti berikut ini :

{
    "image": [
        "The image field is required."
    ],
    "title": [
        "The title field is required."
    ],
    "content": [
        "The content field is required."
    ]
}

Sekarang, kita lanjutkan untuk melakukan insert data. Silahkan buka tab Body, kemudian pilih form-data dan masukkan key dan value berikut ini :

KEY TYPE VALUE
image file Silahkan pilih gambar dari komputer.
title text Masukkan judul post yang diinginkan.
content text Masukkan content post yang diinginkan.

Jika sudah, silahkan klik Send dan jika berhasil maka kita akan mendapatkan response dalam format JSON yang berisi informasi data berhasil disimpan.

{
    "success": true,
    "message": "Data Post Berhasil Ditambahkan!",
    "data": {
        "image": "t4cmezRsQ3jcHsIRUuyE94ZGZ3mqQG0Atd3pJRK7.png",
        "title": "Belajar Rest API di Laravel 9",
        "content": "Belajar Rest API di Laravel 9",
        "updated_at": "2022-02-12T03:28:47.000000Z",
        "created_at": "2022-02-12T03:28:47.000000Z",
        "id": 1
    }
}

Sampai disini pembahasan bagaimana cara melakukan proses insert data ke dalam database menggunakan Rest API di Laravel. Di artikel selanjutnya kita akan belajar bagaimana cara menampilkan detail data berdasarkan ID.

Terima Kasih



Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami