Mulai

Tutorial aplikasi Todo

Bangun API Todo lengkap untuk melihat routing, validasi, model, migrasi, dan basis data bekerja bersama.

Beta · v0.2.0API Lanjit masih dapat berubah sebelum versi stabil. Periksa catatan rilis dan panduan peningkatan sebelum memperbarui.

Tutorial ini membuat API Todo sederhana di /api/todos. Mulai dari proyek baru dan pastikan server dapat dijalankan.

npm create lanjit@latest todo-app
cd todo-app
node artisan key:generate

Buat migrasi

node artisan make:migration create_todos_table

Isi file baru di database/migrations:

export async function up(schema) {
  await schema.create('todos', (table) => {
    table.id();
    table.string('title');
    table.boolean('completed').default(0);
  });
}

export async function down(schema) {
  await schema.dropIfExists('todos');
}

Jalankan migrasi:

node artisan migrate

Buat model

node artisan make:model Todo

Isi app/Models/Todo.js:

import { Model } from '../../framework/Database/Model.js';

export class Todo extends Model {
  static table = 'todos';
}

Daftarkan rute API

Tambahkan rute berikut pada routes/api.js:

import { Todo } from '../app/Models/Todo.js';

export default function routes(Route) {
  Route.get('/todos', async () => {
    return Todo.query().orderBy('id', 'desc').get();
  }).middleware('cors', 'throttle:60,1');

  Route.post('/todos', async (request, response) => {
    const data = await request.validate({
      title: ['required', 'string', 'max:255'],
    });

    const todo = await Todo.create({ title: data.title, completed: 0 });
    return response.json(todo, 201);
  }).middleware('cors', 'throttle:30,1');

  Route.patch('/todos/{id}', async (request, response) => {
    const todo = await Todo.find(request.params.id);
    if (!todo) return response.json({ message: 'Todo tidak ditemukan.' }, 404);

    const body = await request.all();
    todo.fill({
      title: body.title ?? todo.title,
      completed: body.completed === undefined
        ? todo.completed
        : ([true, 1, '1', 'true'].includes(body.completed) ? 1 : 0),
    });
    await todo.save();

    return response.json(todo);
  }).middleware('cors', 'throttle:30,1');

  Route.delete('/todos/{id}', async (request, response) => {
    const deleted = await Todo.query().where('id', request.params.id).delete();
    if (!deleted.changes) return response.json({ message: 'Todo tidak ditemukan.' }, 404);
    return response.send('', 204);
  }).middleware('cors', 'throttle:30,1');
}

Jalankan dan uji

npm run dev

Pada terminal lain:

curl -X POST http://127.0.0.1:3333/api/todos \
  -H 'Content-Type: application/json' \
  -d '{"title":"Pelajari Lanjit"}'

curl http://127.0.0.1:3333/api/todos

Contoh ini sengaja kecil. Sebelum dipakai di produksi, tambahkan autentikasi, otorisasi, pengujian feature, dan kebijakan validasi update yang lebih ketat.

Edit halaman ini di GitHub

Ketik untuk mencari di seluruh dokumentasi.