ODI - Server - side Framework


導入


こんにちは人々!
私は現在、サーバーサイドのタイプスクリプトのフレームワークに取り組んでいます.私のチームは既に様々な電子商取引とERPプロジェクトでこのフレームワークを広く使用しています.構造と意味は他の人気のフレームワークのようなものだったSpring and ASP.NET .
主要な目標のリスト:
  • テスト可能な、移植性の高いスケーラブル
  • 最小、慣用的、明確な
  • 直感的に読める、理解できる
  • 強力

  • 現在、多くの可能性があります.
  • コントローラとデコレータを用いたルーティングの記述
  • 強力なフルタイプ依存性注入
  • 様々なセットのデコレータによる着信データ検証(AJVを使用)
  • リポジトリ注入, CLSを用いたトランザクション支援
  • 拡張JWT認証
  • フレームワークのすべての部分は完全にタイプされ、全体のインフラストラクチャと統合されます.
    最高のパフォーマンスのために、フードの下で.Fastify を使用する.フレームワークは宣言的ですが、また、デコレーターを使用することは可能です.だから、それはすべてのシンプルでクリーンでミニマルである.

    概要


    コントローラ


    コントローラは、最小限のスタイルでシンプルで強力なルーティングメカニズムとして機能します.
        @Controller('foo') 
        export class FooController extends IController {      
    
            @RoutePatch('{id}')     
            bar(id: string, payload: FooDTO) {         
                ...some updates..          
                return Ok();     
            } 
    
            @Get index() {
                return 'Foo';
            }
        } 
    
    それで、あなたが見るように、HTTP要求から注射データのためにどんな追加paramデコレーターも提供する必要はありません.それはちょうど小さなコントローラの概要です、他の多くの可能性があります.を読むことができますdocs .

    依存性注入


    ODIはボックスから強力な依存性注入メカニズムを持っています.
    (想像してみましょうFooRepository )
        //foo.service.ts
        @Service()
        export class FooService {
    
            @Autowired()
            repository: FooRepository;
    
            public getFoo(id: string) {
                return this.repository.findOne(id);
            }
        }
    
    
        //foo.controller.ts
        @Controller('foo')
        export class OrderController extends IController {
    
            @Autowired()
            fooService: OrderService;
    
            @Get async '{id}' (id: string) {
                const foo = this.fooService.getFoo(id);
    
                if(!foo)
                    return NotFound();
    
                return foo;
            }
        } 
    
    ご覧のように、すべての依存関係が自動的にすべてのアプリケーションコンポーネントに提供されます.
    現在、ODIサポートは3つの注入方法です
  • コンストラクタによって
  • 不動産
  • 方法によって
  • ODIコンポーネントでないクラスはDIに参加できます.単にプリセットプロパティとコンストラクタargsとの動作を定義することができます.
    
        class Pet {
            ...
        }
    
    
        define(Pet)
            .set('default', {
                constructorArgs: [...],        
                props: {...},
                type: 'singleton'
            })
            .set('special', {
                constructorArgs: [...],        
                props: {...},
                type: 'scoped'
            });
    
    

    DTO


    Webサーバが処理する前にデータを検証するのは一般的なシナリオです.DTOは最適化し、このプロセスを自動化することができます.
        @Data()
        export class TodoDTO {
    
            @MaxLength(80)
            title: string;
    
            @IsOptional()
            @MaxLength(255)
            desctiption: string;
    
    }
    
    次に、コントローラメソッドの引数としてDTOクラスを追加する必要があります
        @Controller('todo')
        export class TodoController extends IController {
    
            @Autowired()
            todoService: TodoService;   
    
            @Post async index(payload: TodoDTO) {
                ...
            }
        }
    
    そして、それはすべてです!ODIはこの引数で検証されたリクエスト本体を自動的に注入します.バリデーション中にエラーが発生した場合、400個のステータスコードがエラー記述で送信されます.
    ODIはDTO記述のための広いセットを提供します.そして、ネストしたDTOS、配列、enumsなどをサポートします.

    まとめる


    それはいくつかの機能の小さな概要だった.もっと興味があればDocs .

    カミングスーン

  • アープ

  • GRPC 積分
  • グラフ
  • CLI
  • OpenAPI
  • その他
  • リンク


    ODI TS / ODI


    🌪🌌 スケーラブルで,安全で信頼性の高いエンタープライズアプリケーションを構築するための独創的,宣言的,慣用的枠組み











    シンプルで最小のAPIを持つエンタープライズグレード(Web)アプリケーションを作成するためのTypeScriptフレームワークは、ビジネスロジックに焦点を当てることができます.宣言と命令プログラミングに基づいてASP.NET / Spring .
    チェックDocs 詳細は
    ODIは簡単に移植性とスケーラブルなWebアプリケーションの作成のための機能セットを提供します.
    機能概要:
    MVCフルタイプのDI/IOT認証ウェブソケットタイプ統合グラフアープSSR今後の更新チェックRoadmap
    アイデア、提案や機能のリクエストを得たか.自由に感じるSubmit それ!

    🚀 始める


  • パッケージのインストールnpm install odi --save

  • メタデータのインストールnpm install reflect-metadata --save

  • インポートリフレクションメタデータindex.ts ):import "reflect-metadata";

  • 以下の設定を有効にしますtsconfig.json"EmpeColoratorMetadata ": true
    "実験的な装飾子":真
  • 🌪 概要


    コントローラ


    コントローラは、最小限のスタイルでシンプルで強力なルーティングメカニズムとして機能します.
    コントローラ(' foo ')
    エクスポートクラスFooControllerはicontroller { }を拡張します.
    View on GitHub
    Docs
    また、我々はサポートを目指してDeno 将来的に.

    NESTJSの違い


    基本的には、いくつかの一般的なNSTEJ : MVCパターンと宣言的なスタイルがあります.しかし、全体のインフラストラクチャ、デコレータの使用、依存性注入や他の多くのように、多くの違いがあります.違いをまとめる
  • NESTJSはデコレータを大量に使用しており、ODIはこの使用量を最小限に抑えます.
  • ODIは、AjV経由でHTTPデータ用の箱の組み込み検証を提供します.
  • DI/IOT動作は非常に異なります.ODIにはもっと魔法があります.
  • 完全に他のフレームワークモジュールと統合されたボックスの認証.
  • コントローラとWebSockets処理
  • ODIが巣より別の方法で最初から設計されて、将来的に、それはすべての統合とテクノロジーの大きな違いです.
    私の目では、NESTJSはより多くですSpring , しかし、我々のフレームワークは、より多くですASP :)

    追伸


    最初から、フレームワークはオープンソースとして設計されました.私は本当にあなたのフィードバックが必要、それは私にとって非常に重要です!

    京大理


    リトルビッグプラネット™2でアップロード私の小さな子猫ナンシー😄😄