apryl
v0.1.5
Published
Creates synced API client & server from class methods. TS native.
Downloads
2
Readme
Apryl: A minimal TypeScript web API interface generator
Apryl is a package that allows you to create minimal, TypeScript-compatible web API interfaces using simple function definitions.
Installation
npm install apryl
Usage
Below is a minimal usage for creating a Nuxt 3 (H3-based) server handler. Other (e.g. Express) handlers can be created easily, and PRs are welcome.
// ~/server/api/[...].ts
// (a catch-all route)
import { createH3Handler, Server } from 'apryl'
export class MyServer extends Server {
// Define your API functions here
async hello({ name }: { name: string }) {
return { message: `Hello, ${name}!` }
}
// Note that:
// - both the argument and return types must be an object not a primitive.
// - the function must always return a Promise.
// Both are a "convention over configuration" kind of thing.
async divide({ dividend, divisor }: { dividend: number, divisor: number }) {
return { quotient: dividend / divisor }
}
}
export default createH3Handler(new MyServer({
authRequired: true,
ownToken: process.env.API_TOKEN,
// Note that authorization is required by default, so you need to set `authRequired` to `false` if you don't want it.
}))
// On the client side:
import { createClient } from 'apryl'
import { MyServer } from '~/server/api/[...]'
const api = createClient(MyServer, {
authToken: /* some token you store locally */,
})
// Call the API functions:
api.hello({ name: 'World' }).then(console.log)
// Expected output: { message: 'Hello, World!' }
api.divide({ dividend: 10, divisor: 2 }).then(console.log)
// Expected output: { quotient: 5 }