@lemonaderoom/lesource
TypeScript icon, indicating that this package has built-in type declarations

0.0.18 • Public • Published

HTTP RESTful API Resource

概要

RESTful APIのエンドポイントに対してアクセスできる抽象化ライブラリです。

インストール

npm i -D @lemonaderoom/lesource

使い方

モデルの定義

JSONに相互変換可能なモデルを定義します。zodを使用すると楽になります。

Encodableに準拠

Encodableをimplementsし、encode()メソッドを実装します。encode()メソッドでは、JSONに変換可能なオブジェクトを返します。

Decodableに準拠

Decodableに準拠するには、static decode(json: unknown): Selfを実装する必要があります。

Decodableに準拠しなくても、type Decoder<T> = (json: unknown) => Tに準拠する関数を用意することで使用することもできます。

import { Encodable, encodeArray } from '@lemonaderoom/lesource';
import { z } from "zod" // npm i -D zod

/** ZodによるUserの定義 */
export const UserSchema = z.object({
    id: z.number(),
    name: z.string(),
    birthday: z.string().datetime(),
})

/** Encodable, Decodableに準拠したモデル */
export class User implements Encodable {
    constructor(
        readonly id: number,
        readonly name: string,
        readonly birthday: Date,
    ) {}

    encode(): unknown {
        return {
            id: this.id,
            name: this.name,
            birthday: this.birthday.toISOString(),
        }
    }

    static decode(json: unknown): User {
        const schema = UserSchema.parse(json)
        return new User(
            schema.id,
            schema.name,
            new Date(schema.birthday),
        )
    }
}

HTTPResourceFactoryの生成

HTTPResourceFactoryを生成します。HTTPResourceFactoryは、HTTPResourceを生成するファクトリです。

import { HTTPResourceFactory } from '@lemonaderoom/lesource';

const rootResource = new HTTPResourceFactory({
    baseURL: 'https://example.com/api/v1',
    headers: {
        'Content-Type': 'application/json',
    },
    beforeRequest: (config) => {
        // リクエスト前に実行される処理
        return config
    },
})

Readme

Keywords

none

Package Sidebar

Install

npm i @lemonaderoom/lesource

Weekly Downloads

0

Version

0.0.18

License

MIT

Unpacked Size

65.4 kB

Total Files

76

Last publish

Collaborators

  • lemonaderoom