Auto-Swaggerインタフェースファイルの自動アクセス

4629 ワード

Auto-Swagger auto-swaggerは、swagger-uiを取得し、インタフェースファイルを要求するコマンドラインツールであり、インタフェース呼び出し者がインタフェースコードファイルを一クリックで生成することを支援することを目的としています.
転送先:https://github.com/pablezhang/auto-swagger
なぜauto-swaggerを作るのですか?
仕事の中で、通常バックグラウンド開発の同窓会はswaggerインタフェースのドキュメントを提供します.フロントエンドの学生は、ドキュメントを検索するたびにインタフェースを呼び出します.つまり、swagger-uiからインタフェースの使用方法を抜粋し、開発中に以下の問題に遭遇したことがあるかどうかを想像します.
  • インタフェース発見インタフェース新聞404を呼び出し、苦労して単語のスペルを間違えたことを発見した~
  • インタフェース発見インタフェース新聞400を呼び出し、swaagerとよく比較するとパラメータタイプ書き間違い、パラメータ名書き間違い~
  • を発見する.
  • 一時大意でリクエストタイプを書き間違えました~
  • ....仕事中に上記の問題に遭遇したことがある場合は、心の中で自分の不注意を非難するかもしれませんが、少し心が疲れているかもしれません.開発者はswagger-uiドキュメントにインタフェースをコピーすると、インタフェースのurl、パラメータタイプ、パラメータ名などを書き間違える可能性があります.特に、開発者は、プロジェクトの進捗状況を急ぎ、swagger-uiインタフェースの数が多く、ドキュメントが規範化されていないなどの問題に直面したときにエラーが発生する可能性があります.Autoswaggerは,上述した機械的繰返しのswagger抄録作業を解決するために現れたものである.

  • 使用方法
    1、auto-swaggerのインストールnpm install auto-swagger -gまたはyarn add auto-swagger -g2、プロファイルswaggerを追加する.config.js
    初めて使用する場合は、初期化構成コマンドを使用することをお勧めします.コマンドラインツールauto-swagger initを開くと、ディレクトリの下にswagger.config.jsファイルがあるはずです.
    // swagger-url  ,      json   
    const urlAddress = 'http://your-swagger-url/v2/api-docs';
    //      swaager         ,       。
    const outputPath ='Services';
    //          ,              ,           
    const excludeParamName = [
     "Application-Key",
     "Access-Token",
     "extFields"
    ];
    const config = {
     excludeParamName,
     outputPath,
     url: urlAddress
    };
    module.exports = config; 

    上記のコードは、簡単に構成されたswagger.config.jsファイルです.
    3、swagger-uiのインタフェースファイルの取得を開始する
    次のコマンドを実行します.
    auto-swagger run 

    この場合、指定したoutputPathにSomeServiceファイルが追加されます.これらのファイルはインタフェース呼び出しファイルです.これで、基本的な使い方が完成しました
    プロジェクトにauto-swaggerで生成されたインタフェースファイルを統合する方法
    まず、生成されたインタフェースファイルの長さを見てみましょう.ここでは、共通のswaggerアドレスを使用しています.http://petstore.swagger.io/
    //Operationsaboutuser.ts
    /**
     * @Description: User
     */
     
     /**   Request      ajax    ,      。 */
    import Request from 'utils/Request';
    class Operationsaboutuser {
     
     /**
     *      This can only be done by the logged in user.
     *      This can only be done by the logged in user.
     *      post
     *      /user
     * @param body [object Object] Created user object
     */
     public async createUser ({body}) {
     return Request({
     url:`/user`,
     method:'POST',
     data: body,
     query: {},
     app: 'user',
     })
     }
     
    }
    //       Controller      ,  Controller          
    export default new Operationsaboutuser 

    これらのインタフェースファイルをプロジェクトでどのように使用しますか?
    最初のステップは、Requestファイルを自分で実現する必要があります.いくつかの必須パラメータ1、url:すなわちswaggerリクエストパス2、method:[POST]|[GET]|[DELETE]|[PUT]など、サポートする必要があるメソッド3、data:通常はPOSTとPUTメソッドで4、query:クエリーパラメータは、Requestが自分で実現しているため、これらのパラメータをサポートする可能性があると述べています.あなたは完全に自主的に形参を決定することができます.
    第2のステップでは、上記のファイルの観察を呼び出すと、インタフェースメソッドが1つの例にカプセル化されているため、使用時も極めて簡単であることがわかります.
    import Operationsaboutuser from 'Services/Operationsaboutuser';
    async function  createBody(body) {
     const {resultCode, resultMsg} =  await Operationsaboutuser.createUser({body})
     if(resultCode === "0"){
     console.log("    ")
     }
    }
    createBody({id: "123", name: "foo"}) //      

    既存のプロジェクトに統合するために、インタフェースファイルフォーマットをカスタマイズする方法.たとえば、プロジェクトにはRequest.jsがありますが、ファイルはutilsにありません.また、いくつかの理由でこれらの履歴コードを変更できません.auto-swaggerは、インタフェースファイルを生成する方法をカスタマイズすることができ、以下のように完全に構成されている.
  • url: string:swagger-uiにおけるjson情報インタフェース
  • outputPath: string:swagger.config.jsが存在するフォルダをルートディレクトリとして、インタフェースファイルを指定するパス
  • に出力することを指定する.
  • excludeParamName: string[]:Application-keytokenなどの各インタフェースに必要なパラメータをフィルタリングする必要があり、各インタフェースファイルパラメータに反映する必要はありません.
  • childFunTemplate: string:各インタフェース関数のテンプレート文字列.デフォルト値は次のとおりです
  • const childFunTemplate = `
     /**
    
    
     */
     public async  ({}) {
     return Request({
     ,
     method:,
     data: ,
     query: {},
     app: 'user',
     })
     }
    `; 

    5 . parentFunTemplate: string:各インタフェースファイルの構成文字列.デフォルトは次のとおりです.
    const parentFunTemplate = `
    /**
     * @Description: 
     */
    import Request from 'utils/Request'; //          Request  
    class  { //          ,    、
     
    }
    export default new `;