春の雲どのように多くのマイクロサービス・インターフェースのデバッグ?

序文

今日は、サービス・インターフェースのデバッグおよび管理のトピックの下に春とマイクロクラウドサービスについての話します!当社は、これらのサービス間の双方向のコミュニケーションが必要と、あなたがサービス・インターフェースを幅広く定義する必要があり、マイクロサービスアーキテクチャでは、ソフトウェアシステムは、スタンドアローンのサービスの数に分割されますことを知っています。具体的には、スプリングクラウド、個々のマイクロサービスに基づくマイクロ・サービス・モデルは、複数のインターフェイスのスプリングMVCコントローラに基づいて定義される外部へのマイクロサービスを公開する必要があります。

個々のマイクロサービス機能定義された境界に応じて、多少のサービスは、このような支払インターフェース、アカウントのインターフェースとして、特定のビジネス関連のインターフェイスを提供します。わずかサービスは、統一認証などのテキスト・メッセージング・インターフェースとして、インターフェースの公共サービスの本質を、提供しながら、インターフェース等を挙げることができます。これらのサービスは、多くの場合、マイクロあり、伝統的な方法のサービス・インターフェース定義はしばしば良い、それはより便利でドッキングテストすることができ、比較的高い可読性インターフェイスのドキュメントを提供するために、サービスプロバイダが必要と、再び開発と保守の異なるチームの数です時間は、多くの場合、多くの場合、反復更新担当者は、これらの初期のインタフェースのマニュアルを進むにつれて実際には、何のメンテナンスは、すぐにもかかわらず、古くなることなくなりますのでとき、マイクロサービスモデルは、となるような方法の下でドキュメントインターフェースが多すぎると、開発者はクレイジーに見えるしましょう!

より簡単に開発者が同じ時間をインタフェースすることができますする方法はあり、それが自動的に行うためのサービス・インターフェース文書と非常に一貫生成することができますか?答えはイエス、我々は最後に一緒にそれについて話すと、どのようなインターフェースマイクロ管理サービスがより簡単になるようにする方法であります!

インターフェイスの管理プレゼンテーション

実際には、市場には、このようなサポートを提供するオープンソースプロジェクトの様々なています!以下のような:それはどのように春のクラウドシステムでは、より適しているので闊歩、ApiDoc、RAP、DOCLever、CrapApi、これらのプロジェクトは、アピオンラインドキュメント管理機能を提供しますか?ここでは、これらのプロジェクトの利点と欠点のコントラストを取ります。

濶歩

闊歩はYAML、自動的に生成されたJSON文書をオンライン言語およびコード生成ツールに基づいています。次のようにその利点は以下のとおりです。

1)それは、自動的にインターフェイス文書を生成開発によって直接書き込まスプリングブートプロジェクトに埋め込まれたコメントすることができる高度に一貫したコードのドキュメントを達成するために;
)2、インタフェースの構造を分析することができ、また、開始要求によって確認することができます正確インタフェース;
3)、定義に基づいて、サーバまたはクライアントコード言語をエクスポートするためのインタフェースの様々なサポート分離溶液の終了前後のプログラミング言語の多様性を提供する;
4)、それはまた、闊歩エディタを含み、そのYAMLが闊歩APIエディタのサポートのinterfacesファイルのエクスポートYAMLやJSON形式の言語を使用することです;
5)、闊歩UIが含まれ、HTML形式で表示するように闊歩エディタインタフェースのドキュメントを編集することができます;
6)、無料オープンソースは、国際化、エコ豊富な、コミュニティの活動をサポートしています。

欠点は、次のとおりです。

; 1)、コード侵襲があり
、闊歩インターフェイスのドキュメントが別の場所に行く必要が別にある2)、異なるプロジェクト
、闊歩は、UIインターフェイスのドキュメントのうち、分類の欠如、経験を表示するために、比較的貧しい3);
4) 、異なるプロジェクトが許可管理インタフェースのマニュアルを持っていない、モックが不足しています。

ApiDoc

ApiDocが闊歩オンラインドキュメント生成ツールのように軽量です。欠点は、自動テストおよび他の機能は比較的弱いも闊歩、インターフェース管理と同様であり、そのコミュニティは、生態学的側面は闊歩の国際として良好とされません。

RAP

RAPは、マイクロ自動化ツールの一連の協調サービス配信モデルの効率を高めるために、インターフェイス定義の周りに実際のインタフェースの正しさを確認し、インターフェース動的に生成されたシミュレーションデータの構造を分析することができ、視覚的インターフェース管理ツールです。

次のようにその利点は以下のとおりです。

1)、プロジェクト管理、チーム管理、ドキュメントのバージョン管理のためのサポート;
2)模擬テストデータをサポートする;
3)、アリメーカーは内部アリババで練習を取得し、生産が;
4)取得するためのインタフェースをサポートするために、
5)、インターフェースを解析することができます構造、要求はインタフェースの正しさをチェック開始し、
6)、フリーでオープンソース

次のような欠点があります:

1)文書およびインターフェースの分離は、それが矛盾する傾向がある
; 2)、各インタフェースは、手動編集が必要
3)、書き込まnodejsを使用してバックエンド、Javaベースのスプリングクラウド技術スタックと矛盾します。

DOCLever

DOCLeverは、管理ツールのインターフェイス無料のオープンソースであり、以下のように、その利点は以下のとおりです。

1)、プロジェクト管理のためのサポート、チーム管理、ドキュメント作成ツールの豊富な;
2)、豊富な模擬テスト・データをサポートしています;
3)、ユーザーは、より豊富なケースです、米国のグループ、58都市、都市観光低下;
4)、支援を取得するためのインターフェース;
5)、インターフェースはパラメータの正当性も非常に豊富でチェック要求を開始するために、インタフェースの構造を分析することができます;
、)6このようなアクセス認証コードのような複雑なシーンの自動テストのためのサポート、ログインする、注文のリストを取得し、さらにGET A特定の注文の詳細や他の操作に関連付けられたコンテキスト。

次のような欠点があります:

1)文書およびインターフェース分離、それが矛盾する傾向がある;
2)、各インタフェースは手動編集を必要と
3)、バックエンドはnodejsを使用して書かれている、Java技術スタックとスプリングクラウド矛盾。

CrapApi

利点は次のとおりです。

1)、プロジェクト管理のためのサポート、チーム管理、ドキュメントのバージョン管理、
2)模擬テストデータをサポートする;
3)取得するために、インタフェースをサポートするためには、
4)、構造インターフェース分析要求インタフェースの正しさをチェック開始することができる;
5)、サポート監視インタフェース、アラームルールを設定し、インターフェイスが利用できない場合、速やかにサービスの担当者に通知する;
6)、バックエンドのJava開発、Javaと春クラウドテクノロジー・スタックの一致に基づいて、
7)、フリーでオープンソース。

短所:

1)文書およびインターフェース分離、それが矛盾する傾向があり、
2)、各インタフェースは手動編集を必要と
3)、以下のユースケースを、関数は、多くのピットが存在し得る、完全ではありません。

春のクラウド統合闊歩

これらのオープンソース・プロジェクトの分析によって、プロジェクトを取るための方法の残りの外のすべてのドキュメントとコードの分離闊歩に加えて、これはコードの侵入を軽減しますが、またドキュメントやコードの不一致原因、それは春クラウドに基づいていることができますが、マイクロサービスは、我々は、管理ツールのインターフェースマイクロサービスとして闊歩を選択します。

春の雲春のブートマイクロサービスが闊歩に基づいてどのようにそれを統合するには?

1)、春ブーツマイクロMavenの中に導入されたサービスプロジェクトを依存しています:

 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-swagger2</artifactId>
     <version>2.2.2</version>
 </dependency>
 <dependency>
     <groupId>io.springfox</groupId>
     <artifactId>springfox-swagger-ui</artifactId>
     <version>2.2.2</version>
 </dependency>

2)Swagger2の設定クラスを作成します。

@Configuration
@EnableSwagger2
@Profile("!production")
public class SwaggerConfiguration {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("Api")
                .select()
                .apis(withClassAnnotation(RestController.class))
                .build()
                .globalOperationParameters(commonParameters())
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Api")
                .version("1.0.0-SNAPSHOT")
                .build();
    }

    private List<Parameter> commonParameters() {
        List<Parameter> parameters = Lists.newArrayList();
        parameters.add(new ParameterBuilder()
                .name("war")
                .description("backdoor 在测试环境绕过鉴权")
                .modelRef(new ModelRef("string"))
                .parameterType("query")
                .required(false)
                .defaultValue("war123")
                .build());
        parameters.add(new ParameterBuilder()
                .name("uid")
                .description("backdoor 设定的用户ID")
                .modelRef(new ModelRef("string"))
                .parameterType("query")
                .required(false)
                .defaultValue("1000053")
                .build());
        parameters.add(new ParameterBuilder()
                .name("Authorization")
                .description("生产环境中,需要传递的用户当前 Token")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .defaultValue("Bearer XXXXX")
                .build());
        return parameters;
    }
}

私たちは、本番環境を除いて、ここで設定された上記の構成クラス、私たちすることができます(「!プロダクション」)は、@Profileの発効により、指定された環境を指摘し、他の環境では効果的です。

3)、ドキュメントのコンテンツを追加

上記設定後、実際には、文書の内容を生成しますが、この文書は、それ自体の要求であることができ、メインソースがネーミング機能を説明し、マルチユーザー非友好的、読みやすく、理解した文書を容易にするために、我々はできます闊歩注釈は、いくつかの説明を追加します。これらのアノテーションは以下のとおりです。

@Api:クラスで、クラスの役割を説明しました。BR /> @ ApiOperation:APIメソッドの説明を高めるためのアノテーション。
@ApiImplicitParamsは:記載された方法で使用されるパラメータのセットを含みます。
BR /> @ ApiImplicitParam:説明パラメータを増加させる方法へのアノテーション。
@ApiResponsesは:応答の集合を表すために使用されます。
BR /> @ ApiResponse:エラー応答メッセージのための一般的な式で使用@ApiResponses。
@ApiModel:モデルの記述(注釈リクエスト@ApiImplicitParamパラメータは、本明細書に記載される場合、一般的に使用できません)。

次に、我々は定義インターフェースマイクロサービスの実際のケースを通じて、次を示します。

@Api(value = "运维端系统用户层外部接口", description = "用于组装直接面向运维App端相关服务")
@RestController
@Slf4j
public class OperationUserController {

    @Autowired
    OperationUserService operationUserServiceImpl;

    @ApiOperation(value = "运维端用户注册", httpMethod = "POST")
    @RequestMapping(value = "/userRegister", method = RequestMethod.POST)
    public APIResponse sysUserRegister(@RequestParam(value = "mobileNo") String mobileNo,
            @RequestParam(value = "email") String email,
            @RequestParam(value = "nickName", required = false) String nickName,
            @RequestParam(value = "idName") String idName, @RequestParam(value = "idType") String idType,
            @RequestParam(value = "idNo") String idNo, @RequestParam(value = "gender") String gender,
            @RequestParam(value = "password") String password, @RequestParam(value = "verifyCode") String verifyCode,
            @RequestParam(value = "creator") String creator) {
        UserRegisterReqVo userRegisterReqVo = UserRegisterReqVo.builder().mobileNo(mobileNo).email(email)
                .nickName(nickName).idName(idName).idType(idType).idNo(idNo).gender(gender).passwd(password)
                .passcode(verifyCode).creator(creator).build();
        UserRegisterResVo userRegisterResVo;
        try {
            userRegisterResVo = operationUserServiceImpl.userRegister(userRegisterReqVo);
        } catch (BizException e) {
            log.error(e.toString() + "_" + e.getMessage(), e);
            return APIResponse.error(e.getCode(), e.getMessage());
        } catch (Exception e) {
            log.error(e.toString() + "_" + e.getMessage(), e);
            return APIResponse
                    .error(ApiResultStatus.INTERNAL_SERVER_ERROR.getApiResultStatus(),
                            ApiResultStatus.INTERNAL_SERVER_ERROR.getMessageResourceName());
        }
        return APIResponse
                .success(ApiResultStatus.SUCCESS.getApiResultStatus(), ApiResultStatus.SUCCESS.getMessageResourceName(),
                        userRegisterResVo);
    }
}

我々上記マイクロサービスのユーザー登録インターフェースを定義するには、その後、マイクロサービスを開始した後、マイクロサービスIP +ポート+ /威張っ-ui.htmlを入力して、あなたが闊歩-UIを見ることができる、とのように、次のとおりです。

春の雲どのように多くのマイクロサービス・インターフェースのデバッグ?

威張っ-UIとは、テストインタフェース方法を確認することができますが、そうこれらのインタフェースに基づいて、UIの説明と一時のインターフェイスフィールドので、実際のコードと完全に一致しているが、それにドッキングドッキングに定義されています!

おすすめ

転載: blog.51cto.com/14570694/2464681