> For the complete documentation index, see [llms.txt](https://learn.devlabss.my.id/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.devlabss.my.id/laravel/bab-12-laravel-api-dasar/12.2-membuat-endpoint-di-api.php.md).

# 12.2 Membuat Endpoint di api.php

## Membuat endpoint di api.php

Sekarang kita masuk ke praktik utama BAB 12.

Targetnya sederhana.

Anda akan membuat endpoint API yang mengembalikan data buku dalam format JSON.

### Kenapa memakai `api.php`

Laravel memisahkan route web dan route API.

Biasanya:

* route halaman web ditulis di `routes/web.php`
* route API ditulis di `routes/api.php`

Pemisahan ini membuat struktur proyek lebih rapi.

### Bentuk endpoint pertama

Misalnya Anda ingin membuat endpoint daftar buku.

Di file `routes/api.php`, tulis:

```php
use App\Models\Buku;
use Illuminate\Support\Facades\Route;

Route::get('/buku', function () {
    return Buku::all();
});
```

Kalau endpoint ini dibuka, Laravel akan otomatis mengubah collection menjadi JSON.

### URL endpoint API

Secara default, route di `api.php` memakai prefix `/api`.

Artinya route ini:

```php
Route::get('/buku', ...);
```

akan diakses lewat:

```
/api/buku
```

Kalau server lokal Anda berjalan di `http://127.0.0.1:8000`, maka endpoint lengkapnya menjadi:

```
http://127.0.0.1:8000/api/buku
```

### Kenapa hasilnya bisa langsung JSON

Laravel bisa membaca bahwa route API mengembalikan data model atau collection.

Lalu Laravel mengubahnya menjadi response JSON secara otomatis.

Jadi untuk endpoint sederhana, Anda belum perlu menulis banyak kode.

### Versi yang lebih rapi dengan controller

Walau closure bisa dipakai untuk belajar, praktik yang lebih rapi tetap memakai controller.

Buat controller API:

```bash
php artisan make:controller Api/BukuApiController
```

Lalu isi method misalnya seperti ini:

```php
use App\Models\Buku;

public function index()
{
    return Buku::all();
}
```

Kemudian di `routes/api.php`:

```php
use App\Http\Controllers\Api\BukuApiController;
use Illuminate\Support\Facades\Route;

Route::get('/buku', [BukuApiController::class, 'index']);
```

Struktur ini lebih enak saat endpoint mulai bertambah banyak.

### Mengembalikan response JSON secara eksplisit

Kalau ingin lebih jelas, Anda juga bisa menulis:

```php
return response()->json(Buku::all());
```

Atau dengan format yang lebih terstruktur:

```php
return response()->json([
    'message' => 'Data buku berhasil diambil',
    'data' => Buku::all(),
]);
```

Pendekatan kedua sering dipakai karena respons menjadi lebih konsisten.

### Langkah praktik yang aman

{% stepper %}
{% step %}

### Buat route API sederhana

Mulai dari endpoint `GET /api/buku`.

Jangan langsung membuat banyak endpoint sekaligus.
{% endstep %}

{% step %}

### Pastikan model dan tabel buku sudah siap

Endpoint tidak akan berguna kalau data sumbernya belum ada.

Jadi cek dulu data buku di database.
{% endstep %}

{% step %}

### Jalankan server lokal

Gunakan:

```bash
php artisan serve
```

Setelah itu baru uji endpoint di browser atau Postman.
{% endstep %}

{% step %}

### Pindahkan ke controller jika sudah berhasil

Kalau route sederhana sudah jalan, rapikan strukturnya dengan controller API.
{% endstep %}
{% endstepper %}

### Output yang harus terlihat

Setelah subbab ini selesai, hasil berikut seharusnya sudah terlihat:

* file `routes/api.php` berisi endpoint `GET /api/buku`
* URL `http://127.0.0.1:8000/api/buku` mengembalikan JSON
* response berisi data buku atau struktur `message` dan `data`
* endpoint tetap bisa dipindah ke controller API tanpa mengubah perilaku utama

### Error yang paling sering muncul

Masalah umum saat pertama membuat endpoint API:

* salah menulis file route
* lupa prefix `/api`
* model `Buku` belum di-import
* tabel `buku` belum ada atau kosong
* server lokal belum berjalan

{% hint style="warning" %}
Kalau endpoint terasa tidak ditemukan, cek dulu URL lengkapnya. Route di `api.php` otomatis berada di bawah prefix `/api`.
{% endhint %}

### Poin evaluasi bab 12.2

Pastikan Anda sudah memahami hal berikut:

* Saya tahu kenapa route API ditulis di `api.php`.
* Saya tahu route API memakai prefix `/api`.
* Saya bisa membuat endpoint `GET` sederhana.
* Saya bisa mengembalikan data dalam format JSON.

Jika sudah beres, lanjut ke [12.3 Menguji API Menggunakan Postman](/laravel/bab-12-laravel-api-dasar/12.3-menguji-api-menggunakan-postman.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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://learn.devlabss.my.id/laravel/bab-12-laravel-api-dasar/12.2-membuat-endpoint-di-api.php.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.
