# Membuat api sederhana dengan Laravel

Jika Anda sudah memiliki proyek Laravel yang terinstal dan `ProductController` sudah dibuat, Anda dapat menambahkan rute-rute berikut ke dalam file `routes/api.php` untuk memenuhi persyaratan Anda:

```php
<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;

// Route untuk menampilkan daftar produk
Route::get('/list-product', [ProductController::class, 'list_product']);

// Route untuk menampilkan detail produk
Route::get('/detail-product/{id}', [ProductController::class, 'detail_product']);

// Route untuk menyimpan produk baru
Route::post('/create-product', [ProductController::class, 'create_product']);

// Route untuk mengupdate produk
Route::put('/update-product/{id}', [ProductController::class, 'update_product']);

// Route untuk menghapus produk
Route::delete('/delete-product/{id}', [ProductController::class, 'delete_product']);
```

Pastikan Anda menggantikan `ProductController::class` dengan namespace yang sesuai jika diperlukan dalam proyek Anda. Anda juga perlu mengonfigurasi metode-metode ini di dalam `ProductController`.

Berikut adalah contoh implementasi metode-metode di dalam `ProductController`:

```php
<?php

namespace App\Http\Controllers;

use App\Models\Product;

use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all(); // Mengambil semua produk dari tabel 'products'
        return view('products.index', compact('products'));
    }

    public function create()
    {
        return view('products.create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'price' => 'required|numeric',
            'stock' => 'required|integer',
        ]);

        Product::create($request->all());

        return redirect()->route('products.index')->with('success', 'Product created successfully');
    }

    public function show($id)
    {
        $product = Product::find($id); // Mengambil produk berdasarkan ID
        return view('products.show', compact('product'));
    }

    public function edit($id)
    {
        $product = Product::find($id); // Mengambil produk berdasarkan ID
        return view('products.edit', compact('product'));
    }

    public function update(Request $request, $id)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'price' => 'required|numeric',
            'stock' => 'required|integer',
        ]);

        $product = Product::find($id);
        $product->update($request->all());

        return redirect()->route('products.index')->with('success', 'Product updated successfully');
    }

    public function destroy($id)
    {
        $product = Product::find($id);
        
        $product->delete();

        return redirect()->route('products.index')->with('success', 'Product deleted successfully');
    }
        // Menampilkan daftar produk
        public function list_product()
        {
            $products = Product::all();
            return response()->json($products);
        }
    
        // Menampilkan detail produk berdasarkan ID
        public function detail_product($id)
        {
            $product = Product::find($id);
            if (!$product) {
                return response()->json(['message' => 'Produk tidak ditemukan'], 404);
            }
            return response()->json($product);
        }
    
        // Menyimpan produk baru
        public function create_product(Request $request)
        {
            $request->validate([
                'name' => 'required|string|max:255',
                'price' => 'required|numeric',
                'stock' => 'required|integer',
            ]);
    
            Product::create($request->all());
    
            return response()->json(['message' => 'Produk berhasil disimpan'], 201);
        }
    
        // Mengupdate produk berdasarkan ID
        public function update_product(Request $request, $id)
        {
            $product = Product::find($id);
            if (!$product) {
                return response()->json(['message' => 'Produk tidak ditemukan'], 404);
            }
            $request->validate([
                'name' => 'required|string|max:255',
                'price' => 'required|numeric',
                'stock' => 'required|integer',
            ]);

            $product->update($request->all());
    
            return response()->json(['message' => 'Produk berhasil diupdate'], 200);
        }
    
        // Menghapus produk berdasarkan ID
        public function delete_product($id)
        {
            $product = Product::find($id);
            if (!$product) {
                return response()->json(['message' => 'Produk tidak ditemukan'], 404);
            }
    
            $product->delete();
    
            return response()->json(['message' => 'Produk berhasil dihapus'], 200);
        }
}
```

Pastikan Anda menyesuaikan logika penyimpanan dan validasi sesuai dengan kebutuhan aplikasi Anda dalam metode `create_product` dan `update_product`. Selain itu, pastikan Anda telah menambahkan validasi input dan manajemen kesalahan yang diperlukan untuk menjaga keamanan dan keandalan API Anda.

Dan untuk menguji api terlebih dahulu pelajari tentang [Postman](https://zakimaliki.gitbook.io/postman/) .&#x20;

Cara menguji endpoint-endpoint yang telah dibuat di Postman:

#### 1. Menampilkan Daftar Produk (GET /list-product)

1. Buka Postman dan buat permintaan baru dengan metode GET.
2. Tempel URL endpoint ke dalam kolom URL di Postman: `http://127.0.0.1:8000/list-product`.
3. Klik tombol "Send" untuk mengirim permintaan GET ke endpoint tersebut.

#### 2. Menampilkan Detail Produk (GET /detail-product/{id})

1. Buka Postman dan buat permintaan baru dengan metode GET.
2. Tempel URL endpoint ke dalam kolom URL di Postman, ganti `{id}` dengan ID produk yang ingin Anda lihat: `http://127.0.0.1:8000/detail-product/1`.
3. Klik tombol "Send" untuk mengirim permintaan GET ke endpoint tersebut.

#### 3. Menyimpan Produk Baru (POST /create-product)

1. Buka Postman dan buat permintaan baru dengan metode POST.
2. Tempel URL endpoint ke dalam kolom URL di Postman: `http://127.0.0.1:8000/create-product`.
3. Pilih metode POST.
4. Pilih tab "Body" di bawah kolom URL.
5. Pilih format data yang ingin Anda kirim, misalnya JSON.
6. Masukkan data produk baru dalam format JSON ke dalam kolom body. Pastikan `name` adalah string, `price` dan `stock` adalah angka (integer).
7. Klik tombol "Send" untuk mengirim permintaan POST ke endpoint tersebut.

Contoh Data JSON untuk Permintaan POST:

```json
{
    "name": "Nama Produk",
    "price": 100,
    "stock": 50
}
```

#### 4. Mengupdate Produk (PUT /update-product/{id})

1. Buka Postman dan buat permintaan baru dengan metode PUT.
2. Tempel URL endpoint ke dalam kolom URL di Postman, ganti `{id}` dengan ID produk yang ingin Anda perbarui: `http://127.0.0.1:8000/update-product/1`.
3. Pilih metode PUT.
4. Pilih tab "Body" di bawah kolom URL.
5. Pilih format data yang ingin Anda kirim, misalnya JSON.
6. Masukkan data yang ingin Anda perbarui dalam format JSON ke dalam kolom body. Pastikan `name` adalah string, `price` dan `stock` adalah angka (integer).
7. Klik tombol "Send" untuk mengirim permintaan PUT ke endpoint tersebut.

Contoh Data JSON untuk Permintaan PUT:

```json
{
    "name": "Nama Produk Baru",
    "price": 150,
    "stock": 30
}
```

#### 5. Menghapus Produk (DELETE /delete-product/{id})

1. Buka Postman dan buat permintaan baru dengan metode DELETE.
2. Tempel URL endpoint ke dalam kolom URL di Postman, ganti `{id}` dengan ID produk yang ingin Anda hapus: `http://127.0.0.1:8000/delete-product/1`.
3. Pilih metode DELETE.
4. Klik tombol "Send" untuk mengirim permintaan DELETE ke endpoint tersebut.

Pastikan untuk mengganti data sesuai dengan kebutuhan aplikasi Anda, dan pastikan server lokal Anda berjalan saat mengirim permintaan ini. Semoga ini membantu!

Di bab berikutnya  akan belajar cara membuat auth dengan laravel bootstrap Scaffolding di project yang telah dibuat.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://zakimaliki.gitbook.io/laravel/membuat-api-sederhana-dengan-laravel.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
