Hono

Hono🔥 is a small, simple, and ultrafast web framework built on Web Standards.

It was originally designed as a lightweight framework for building web applications on Cloudflare. Now It works on any JavaScript runtime: Cloudflare Workers, Fastly Compute, Deno, Bun, Vercel, AWS Lambda, Lambda@Edge, and Node.js.

API for a TODO Application

For simplicity, no database is used here.

import { Hono, Router } from '@hono/core'
import { serve } from '@hono/serve'

const app = new Hono()
const router = new Router()

const tasks = [
  { id: 1, title: 'Buy groceries' },
]

// Retrieve all tasks
router.get('/tasks', c => {
  return c.json(tasks)
})

// Retrieve a specific task
router.get('/tasks/:id', c => {
  const taskId = c.req.param('id')
  const task = tasks.find(t => t.id == parseInt(taskId))
  return task ? c.json(task) : c.notFound()
})

// Create a new task
router.post('/tasks', c => {
  const task = c.req.body
  task.id = tasks.length + 1 // Assign a unique ID
  tasks.push(task)
  return c.json(task)
})

// Update a task
router.put('/tasks/:id', c => {
  const taskId = c.req.param('id')
  const task = tasks.find(t => t.id == parseInt(taskId))
  if (!task) {
    return c.notFound()
  }
  tasks[tasks.indexOf(task)] = c.req.body
  return c.noContent()
})

// Delete a task
router.delete('/tasks/:id', c => {
  const taskId = c.req.param('id')
  const taskIndex = tasks.findIndex(t => t.id == parseInt(taskId))
  if (taskIndex == -1) {
    return c.notFound()
  }
  tasks.splice(taskIndex, 1)
  return c.noContent()
})

app.use('/api', router)

serve({ port: 3000, handler: app })