web-dev-qa-db-ja.com

いくつかのマイクロサービスに対する1つの大きなAPIと、独自のAPIを持つ多数の小さなAPI

いくつかのサービスに分割されたアプリケーションがあります。ここでの前の質問から、私は最初はJSON/RESTがコミュニケーションに行く方法だと思います。

サードパーティが使用できるように、私のマイクロサービスの一部を公開する必要があります。

だから私は今これを構造化する最良の方法について疑問に思っています。 2つの異なる構造があり、それぞれに長所と短所があります。

  1. 各サービスには独自のドメインとWebサービスレイヤーがあるため、api.customers.mycompany.comapi.documents.mycompany.comapi.users.mycompany.comなど.
  2. すべてのサービスは共通のWebサービス層の背後にあるため、私は持っています。 api.mycompany.com/customersapi.mycompany.com/documentsなど...

オプション1を使用すると、依存関係と保守性をより適切に削減できますが、さらに多くのドメインを管理する必要があり、サードパーティが複数の異なるサービスにアクセスする必要がある場合は、複数の異なるURLを保存して管理する必要があります

オプション2では、APIに新しいメソッドが追加されるとWebレイヤー全体を更新する必要があり、Webレイヤーが特定の各サービスへのマーシャリング呼び出しの知識を引き継ぐため、メンテナンスと開発が明らかに困難になります。ただし、オプション2では、ロギング、セキュリティサービスのエラー処理なども集中管理します。また、私たち(および私たちのサードパーティ)は、心配するドメインが1つしかないことも意味しています。

だから私の質問です。この道を進んだあなたのために、あなたはどのオプションを選びましたか、そしてあなたはそれを後悔しましたか?

7
Matt

本当にこれは、ラッパーの背後ではなく、マイクロサービスを個別に公開することです。あなたのサービスがすでにサードパーティの準備ができているなら」と私は言うでしょう、そして単にそれらを公開することは理にかなっています。

ただし、セキュリティと顧客の使いやすさから、外部APIを内部サービスAPIに転送または変換する単一のアクセスポイントが必要であるとしています。

どれが「最適」かを判断するのに十分な情報が提供されていないと思いますが、単一の外部APIがある場合は、顧客に表示されるAPIに影響を与えずにマイクロサービスを変更できます。つまり、あるサービスを変更して別のAPIを使用する場合、外部APIを変更せずに、それが行う呼び出しのみを変更できます。

したがって、おそらくオプション2を使用して、ほとんどの場合マイクロサービスから独立した、別個のプロジェクトとしてそれを実行します。内部的には、この層を完全にバイパスします-外部アクセスのみ。

5
gbjbaanb