Backend
Routers
About Routers
A router in Shapeless is a collection of procedures (API endpoints) grouped by feature or resource. For example:
userRouter
for user managementpostRouter
for blog postspaymentRouter
for payments
resources/
├── shapeless.ts # Initialize Shapeless
├── index.ts # Main appRouter
└── routers/ # Router directory
├── user-router.ts
├── post-router.ts
└── payment-router.ts
Creating a Router
- Create a new router file in
resources/routers
:
// resources/routers/post-router.ts
import { app } from "../shapeless"
export const postRouter = app.router({
// Add procedures here
})
- Add procedures to your router:
// resources/routers/post-router.ts
import { app, publicProcedure } from "../shapeless"
export const postRouter = app.router({
list: publicProcedure.get(({ c }) => {
return c.json({ posts: [] })
}),
create: publicProcedure.post(({ c }) => {
return c.json({ success: true })
}),
})
- Register your router in the main
appRouter
:
// resources/index.ts
import { app } from "./shapeless"
import { postRouter } from "./routers/post-router"
const api = app
.router()
.basePath("/api")
.use(app.defaults.cors)
.onError(app.defaults.errorHandler)
const appRouter = app.mergeRouters(api, {
post: postRouter,
})
export type AppRouter = typeof appRouter
export default appRouter
Route URLs
Each procedure maps to an HTTP endpoint combining:
- Your API base path (
/api
) - The router name (
post
) - The procedure name (
list
)
For example, the list
procedure is available at:
http://localhost:3000/api/post/list