برنامه نویسی

[Nestia] ابزار انتقال از Swagger به NestJS و تولید SDK & Mockup Simulator

پیشگفتار

در اینجا نستیا را معرفی می کنیم dev.to در جامعه، درخواست‌های ایمیل زیادی دریافت کردم که امیدواریم نوع دیگری از مولد کتابخانه SDK برای سایر زبان‌ها و فریم‌ورک‌های Backend وجود داشته باشد.

با دریافت ایمیل‌های آن‌ها، فکر می‌کنم به جای ساخت کتابخانه‌های تکراری برای سایر زبان‌ها و فریم‌ورک‌های باطن، بهتر است از محیط‌های دیگر در سمت نستیا فعلی پشتیبانی کنیم. من فکر می کردم که این یک راه بسیار ساده تر و سریعتر برای برآورده کردن درخواست های شما خواهد بود.

بنابراین اکنون، کتابخانه جدید خود را معرفی می کنم @nestia/migrate، که می تواند کتابخانه SDK را حتی در سایر زبان ها و فریم ورک های Backend ایجاد کند.

طرح کلی

# SETUP GLOBALLY
npm install -g @nestia/migrate

# DO MIGRATE
npx @nestia/migrate swagger.json output_directory
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ابزار مهاجرت از Swagger Documents به NestJS.

وقتی می دوی npx @nestia/migrate swagger.json <output> فرمان، @nestia/migrate شما را تجزیه و تحلیل خواهد کرد swagger.json فایل، و یک پروژه NestJS را در <output> فهرست اگر قصد مهاجرت پروژه باطن خود به NestJS را دارید، @nestia/migrate نقطه شروع خوبی خواهد بود.

همچنین، @nestia/sdk می تواند موارد زیر را از پروژه NestJS تولید کند.

یعنی با @nestia/migrate، می توانید کتابخانه SDK یا Mockup Simulator را از هر پروژه باطنی ایجاد کنید. اگر برنامه ای برای مهاجرت به NestJS ندارید، اما امیدوارید از مزایای آن استفاده کنید، @nestia/migrate انتخاب خوبی خواهد بود زبان‌ها و چارچوب‌ها، دیگر در توسعه باطن اهمیتی ندارند.

بیایید از دنیای جدید لذت ببریم @nestia/migrate.

کتابخانه SDK

مجموعه ای از انواع DTO و توابع واکشی.

اگر اطلاع ندارید با nestia، اصطلاح کتابخانه SDK (کیت توسعه نرم افزار) ممکن است ناآشنا به نظر برسد. کتابخانه SDK NestJS به معنای مجموعه ای از DTO انواع و fetch توابع با تعاریف نوع برای راحتی. وقتی می دوی @nestia/sdk، کدهای سرور باطن شما را تجزیه و تحلیل می کند و چنین کتابخانه SDK را ایجاد می کند.

اگر توضیح من هنوز واضح نیست، اجازه دهید یک مثال به شما نشان دهم. به تصویر گیف زیر نگاه کنید، سپس ممکن است متوجه شوید که کتابخانه SDK چیست. سمت چپ یک کد سرور NestJS است و سمت راست یک کد برنامه مشتری (frontend) است که از کتابخانه SDK استفاده می کند. همانطور که می بینید، توسعه دهنده کلاینت (frontend) می تواند به راحتی با سرور باطن شما فقط با استفاده از نکات تایپ و تکمیل خودکار TypeScript تعامل داشته باشد.

به نظر راحت و امن نیست؟ منظور من این کتابخانه SDK است.

کد سرور NestJS

import { Controller } from "@nestjs/common";
import typia from "typia";

import core from "@nestia/core";

import { IBbsArticle } from "@api/lib/structures/IBbsArticle";

@Controller("body")
export class TypedBodyController {
    @core.TypedRoute.Post()
    public async store(
        @core.TypedBody() input: IBbsArticle.IStore,
    ): Promise<IBbsArticle> {
        const output: IBbsArticle = {
            ...typia.random<IBbsArticle>(),
            ...input,
        };
        return output;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد کتابخانه SDK

/**
 * @packageDocumentation
 * @module api.functional.body
 * @nestia Generated by Nestia - https://github.com/samchon/nestia 
 */
//================================================================
import { Fetcher } from "@nestia/fetcher";
import type { IConnection, Primitive } from "@nestia/fetcher";

import type { IBbsArticle } from "./../../structures/IBbsArticle";

/**
 * @controller TypedBodyController.store()
 * @path POST /body
 * @nestia Generated by Nestia - https://github.com/samchon/nestia
 */
export async function store(
    connection: IConnection,
    input: store.Input,
): Promise<store.Output> {
    return Fetcher.fetch(
        connection,
        store.ENCRYPTED,
        store.METHOD,
        store.path(),
        input,
    );
}
export namespace store {
    export type Input = Primitive<IBbsArticle.IStore>;
    export type Output = Primitive<IBbsArticle>;

    export const METHOD = "POST" as const;
    export const PATH: string = "/body";
    export const ENCRYPTED: Fetcher.IEncrypted = {
        request: false,
        response: false,
    };

    export const path = (): string => {
        return `/body`;
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شبیه ساز موکاپ

شبیه ساز سرور باطن جاسازی شده در کتابخانه SDK.

مانند موارد بالا SDK (کیت توسعه نرم افزار)، اگر از nestia آگاه نباشید، کلمه “Mockup Simulator” ممکن است ناآشنا به نظر برسد. “Mockup Simulator” به معنای شبیه ساز سرور باطن جاسازی شده در کتابخانه SDK است که توسط @nestia/sdk.

اگر توسعه frontend را تجربه کرده اید، ممکن است msw – (Mockup Service Worker) را بشناسید. Mockup Simulator از nestia تقریباً مشابه آن است، اما nestia کاملاً خودکار است. علاوه بر این، msw باید رابط های API و کدهای مدل سازی را به صورت دستی بنویسد.

اگر کد واقعی Mockup Simulator را مشاهده کردید، ممکن است دقیقاً متوجه شوید که چیست. بله، Mockup Simulator، این فقط یک تابع داخلی است که داده های تصادفی را با همان نوع رابط API برمی گرداند. به عنوان مرجع، تولید داده های ماکت توسط انجام می شود typia.random<T>() تابع، که می تواند نوع TypeScript را تجزیه و تحلیل کند و کد تولید تصادفی بهینه را در سطح تطبیق ایجاد کند.

/**
 * @packageDocumentation
 * @module api.functional.body
 * @nestia Generated by Nestia - https://github.com/samchon/nestia 
 */
//================================================================
import { Fetcher } from "@nestia/fetcher";
import type { IConnection } from "@nestia/fetcher";
import typia from "typia";

import { NestiaSimulator } from "./../../utils/NestiaSimulator";
import type { IBbsArticle } from "./../../structures/IBbsArticle";

/**
 * @controller BodyController.post()
 * @path POST /body
 * @nestia Generated by Nestia - https://github.com/samchon/nestia
 */
export async function post(
    connection: IConnection,
    body: IBbsArticle.IStore,
): Promise<post.Output> {
    return !!connection.simulate
        ? post.simulate(
              connection,
              body,
          )
        : Fetcher.fetch(
              connection,
              post.ENCRYPTED,
              post.METHOD,
              post.path(),
              body,
          );
}
export namespace post {
    export type Input = IBbsArticle.IStore;
    export type Output = IBbsArticle;

    export const METHOD = "POST" as const;
    export const PATH: string = "/body";
    export const ENCRYPTED: Fetcher.IEncrypted = {
        request: false,
        response: false,
    };

    export const path = (): string => {
        return `/body`;
    }
    export const random = (g?: Partial<typia.IRandomGenerator>): Output =>
        typia.random<Output>(g);
    export const simulate = async (
        connection: IConnection,
        body: post.Input,
    ): Promise<Output> => {
        const assert = NestiaSimulator.assert({
            method: METHOD,
            host: connection.host,
            path: path()
        });
        assert.body(() => typia.assert(body));
        return random(
            typeof connection.simulate === 'object' &&
                connection.simulate !== null
                ? connection.simulate
                : undefined
        );
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ویرایشگر نستیا

کتابخانه جدید @nestia/editor در حال آمدن است

اگر قصد مهاجرت از سرور باطن خود به NestJS را دارید، فکر می کنم فعلی است @nestia/migrate ماژول کاملاً کافی است.

با این حال، اگر نمی‌خواهید به NestJS مهاجرت کنید و فقط به کتابخانه SDK و Mockup Simulator امیدوار باشید، در حال حاضر @nestia/migrate می تواند برای شما کمی ناخوشایند باشد. نصب و اجرا npx @nestia/migrate swagger.json output_directory کمی آزاردهنده به نظر می رسد، اینطور نیست؟

بنابراین، من قصد دارم یک کتابخانه جدید بسازم @nestia/editor. این یک نوع تکامل یافته است swagger-ui تعبیه ویرایشگر TypeScript، @nestia/migrate و @nestia/sdk.

با تعبیه ویرایشگر TypeScript در swagger-ui، می توانید از مزایای کامپایلر TypeScript مانند نکات تایپ و تکمیل خودکار استفاده کنید. همچنین، اگر حالت شبیه سازی را روشن کنید، @nestia/editor از شبیه ساز Mockup تعبیه شده استفاده خواهد کرد @nestia/sdk، به جای ارسال درخواست به سرور باطن واقعی.

البته همانطور که @nestia/editor شامل می شود @nestia/migrate، می توانید کتابخانه SDK و Mockup Simulator را در وب سایت بسازید و دانلود کنید.

منتظرش باش، من دنیای جدیدی را به تو نشان خواهم داد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا