この記事は、Huawei Cloud Community「Java Chassis 3 Technology Decryption: Contract First (API First) Development」(著者: liubao68) から共有されたものです。
コントラクトファースト (API ファースト) 開発とは、API 設計をアプリケーション開発プロセスの最優先タスクにすることを指します。 Web サービスの概念の発展に伴い、コントラクトファースト開発は引き続き注目されており、特にマイクロサービス アーキテクチャの出現以降、API の設計は機能の公開やパフォーマンスの最適化などの課題に影響を与える重要な要素となっています。一般的なコントラクトファースト開発フレームワークとパターンには、次のようなものがあります。
- Web サービス テクノロジを使用すると、設計者はまず WSDL を記述して WEB サービスのコンテンツを記述し、それをツールと組み合わせてコードを生成できます。 WSDL は配布でき、さまざまな言語を WSDL と組み合わせてクライアントを生成できます。
- gRPC テクノロジーを使用すると、設計者はまず IDL を記述して RPC サービスのコンテンツを記述し、それをツールと組み合わせてコードを生成できます。 gRPC は主にサービス間の呼び出しを解決します。
- Spring Boot を使用すると、開発者は Swagger ツールを使用して最初に Open API インターフェイスを作成し、次にツールを通じて RESTFul サーバー コードを生成できます。
これらのテクノロジーはすべて、設計者が言語に依存しない記述言語 (WSDL、IDL、Swagger など) を習得し、ツールを使用して言語固有のコードを生成することを必要とします。 Web サービスは外部 WEB サービスに適しており、gRPC は内部 RPC サービスに適しています。 Java Chassis コントラクトファースト開発では、次のような改善が行われています。
- 設計者が新しい記述言語を習得する必要がなく、Java 言語を直接使用してサービス インターフェイスを定義できるようになります。
- Webサービスインターフェースと内部RPCインターフェースを同時に定義します。
Spring Boot と同様に、Java Chassis の言語に依存しない記述言語は依然として Open API であり、Open API を通じて、言語間およびサービス分散の要件を満たすことができます。
契約優先開発プロセス
コントラクトファースト開発では、設計、開発、テスト、展開、運用、保守などのソフトウェア開発のプロセス全体をカバーでき、契約を通じて異なるリンクでの並行作業が実現され、開発効率が向上します。簡単な受託開発プロセスは次のとおりです。
次のコードは、Java セマンティクスを通じてコントラクトを定義し、プロバイダーとコンシューマーを実装するプロセスを簡単に示しています。
- サービス契約を定義する
@RequestMapping(パス = "/プロバイダー") パブリック インターフェイス ProviderService { @GetMapping("/sayHello") String SayHello(@RequestParam("name") 文字列名); }
- プロバイダーの定義
@RestSchema(schemaId = "ProviderController", schemaInterface = ProviderService.class) パブリック クラス ProviderController は ProviderService を実装します { @オーバーライド public String SayHello(文字列名) { "Hello " + 名前を返します。 } }
- 消費者の定義
@構成 パブリック クラス ProviderServiceConfiguration { @豆 public ProviderService ProviderService() { return Invoker.createProxy("プロバイダ", "ProviderController", ProviderService.class); } }
RPC を使用してプロバイダーにアクセスします。
@RestSchema(schemaId = "ConsumerController", schemaInterface = ConsumerService.class) パブリック クラス ConsumerController は ConsumerService を実装します { プライベート ProviderService プロバイダー サービス; @Autowired public void setProviderService(ProviderService ProviderService) { this.providerService = ProviderService; } @オーバーライド public String SayHello(文字列名) { ProviderService.sayHello(名前)を返します; } }
- サービスの配布とWebサービスへのアクセス
プロバイダーのサービス定義は、次のオープン API 情報を生成します。
焚き火: 3.0.1 情報: タイトル: org.apache.servicecomb.samples.api.ProviderService の Swagger 定義 バージョン: 1.0.0 サーバー: - URL: /プロバイダー パス: /こんにちはと言う: 得る: 操作ID:sayHello パラメーター: - 名前: 名前 で: クエリ 必須: true スキーマ: タイプ: 文字列 反応: 「200」: 説明: 200 の応答 コンテンツ: アプリケーション/json: スキーマ: タイプ: 文字列 アプリケーション/プロトバッファ: スキーマ: タイプ: 文字列 テキスト/プレーン: スキーマ: タイプ: 文字列 コンポーネント: {}
この情報は、例えば上記のようなWEBサービスへのアクセスに利用することができる。
GET /providers/sayHello?name=World
アクセスするためのHTTPリクエスト。他のフレームワークや言語の場合は、Open API を使用して、アクセス用の対応するコードを生成することもできます。
サービスガバナンス
サービス ガバナンスは開発プロセスに依存しないように設計されており、Open API とサービス ガバナンス ルール記述言語を組み合わせることで、API のサービス ガバナンスを構成できます。
サービスコム: マッチグループ: こんにちはオペレーション: | 一致します: - APIパス: プレフィックス: "/provider/sayHello" レート制限: ## 現在のリミッターでは、10 ミリ秒ごとに 100 件のリクエストが許可されます。リクエストが 1000 ミリ秒を超えて受信されない場合、 ## 許可は拒否されます こんにちはオペレーション: | レート: 100 制限更新期間: 10 タイムアウト期間: 1000
上記のルールにより、API インターフェイスのフローが制限されます。
規約優先の開発のその他の側面
テストに関しては、API テストをカバーする契約を通じて自動テスト コードを生成できます。導入と実装の観点から、オープン API 情報をゲートウェイにインポートして、API 機能の公開、認証、アカウンティングを実現できます。さらに、コントラクトはドキュメントの生成やアプリケーションの監視統計など、さまざまな側面でも使用できます。
要約する
Java Chassis は JAVA 言語のインターフェース定義に基づいており、ネイティブ言語とプラットフォームに依存しない記述言語の両方の SDK ディストリビューションを満たすことができ、追加の実行コードを生成するためのツールを使用する必要がなく、統一された一貫したアプローチを提供します。外部サービス開発および内部サービス開発の経験。コントラクトファースト開発は、サービス指向/マイクロサービス指向にとって非常に効率的なプロセス方法です。Java Chassis は、コントラクトファースト開発をサポートする優れたツール サポートを提供します。
クリックしてフォローし、できるだけ早くHuawei Cloudの新しいテクノロジーについて学びましょう~
高校生が成人式として独自のオープンソースプログラミング言語を作成―ネットユーザーの鋭いコメント: アップル、M4チップ RustDeskをリリース 不正行為横行で国内サービス停止 雲峰氏がアリババを辞任。将来的には、Windows プラットフォームの タオバオ (taabao.com) で独立したゲームを制作する予定です。Web バージョンの最適化作業を再開し、 プログラマの目的地、 Visual Studio Code 1.89 が最も一般的に使用される Java LTS バージョンである Java 17 をリリースします。Windows 10 には、市場シェアは70%、Windows 11は減少し続けるOpen Source Daily | GoogleはオープンソースのRabbit R1を支持、Microsoftの不安と野心;