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.