1

異なるソースの API から 1 つのクエリを作成することは可能ですか? つまり、

従来の Web 開発では、次のモジュールがあるとします。

  • クライアント: clientID、clientName
  • 注文: orderID、clientID

1 つのデータベースに 2 つのテーブルを作成し、結合を使用して外部キーを作成し、クエリを作成します。

私がやりたいのは、1 つのデータベースではなく、モジュールごとに 1 つの 2 つのデータベースを作成し (この方法で、各モジュールを独自のエンティティとして簡単に拡張できます)、API を介して 2 つのデータベースを「結び付ける」ことです。

したがって、クライアントと注文を「結びつける」ために「外部キー」(つまり、Orders テーブルの clientID) を引き続き使用しますが、それらが同じデータベースにないため、それらを「結合」することはできませんでした。

したがって、私のインターフェースでは次のようになります。

  • http:mysite.com/showallClientsAPI のようなクライアント API
  • http:mysite.com/showallOrdersAPI のような OrdersAPI

モジュール間の API を介してこの応答を取得するには、どのようにクエリを実行しますか (または可能ですか):

  • セールA
    • クライアント名 1
    • クライアント名 2
  • セールB
    • クライアント名 1
    • クライアント名 3

clientID=1 を持つすべての Orders ( http://mysite.com/showSalesAPI ) を表示できますが、 clientNameではなくclientIDを含む json 応答が返されます。

それは理にかなっていますか?

(なぜこれを行う必要があるのか​​ と尋ねるかもしれません。これは、将来の開発または他のアプリケーションとの相互作用のために、巨大なデータベースの一部としてではなく、モジュールを分離しておくことが理にかなっているマルチモジュールアプリケーションの一部です)

何かご意見は?

4

1 に答える 1

1

データベースを分割してサービスの背後に置くというアイデアは気に入っていますが、慎重に行う必要があると思います。クライアントと注文の間で常に結合を行う場合、サービスを介して通信する必要はありません。

いくつかの考え:

  • サーバーからサーバーにデータを複製して、クライアント/注文のクエリをすばやく実行できるようにすることもできます。そうすれば、各サーバーはまだ権限があります。

  • もちろん、コードでエンティティに参加することは間違いありません。各 API の上にあるラッパーを作成し、次のようなことを行うことができます (C#):


List clientNames = new List();
var orders = OrderService.GetOrders();

foreach (var order in orders)
{
   var client = ClientService.GetClient(order.ClientId);
   clientNames.Add(client.FirstName + " " + client.LastName);
}


(注: これは非効率的です。クライアント ID のリストを渡したい場合があります)

上記のようなものは、単純な方法で 2 つのサービスを呼び出し、アプリケーションでそれらを「結合」します。それが大変な作業だと感じたら、レプリケーションを検討してください! =)

  • Mule ( http://www.mulesoft.org/ ) などを使用して、サービスの統合を処理します。Mule を使用すると、REST サービス (ま​​たは任意の HTTP Web サービス) へのエンドポイントを作成し、それらを 1 つの「メッセージ」にまとめることができます。

  • 何をするにしても、サーバー間でデータを分割すると、クエリの料金が少し高くなります。エンティティが同じサーバー/データベース上にある場合のパフォーマンスに近いとは思えません。

于 2013-02-13T01:16:32.680 に答える