Anypoint DataGraph のオブジェクト種別間のリンクのしくみ

現在のオブジェクト種別を別の対象オブジェクト種別にリンクして、クエリ結果を向上させることができます。リンクにより、異なるオブジェクトを説明する 2 つの関連する種別の項目を結合して、この 2 つの種別をつなぎ合わせることができます。

現在の種別のコラボレーションが有効になっていなくても、現在のオブジェクト種別を対象オブジェクト種別にリンクできますが、対象のコラボレーションが有効になっている必要があります。コラボレーションのしくみについての詳細は、「Anypoint DataGraph でのオブジェクト種別コラボレーションの有効化」を参照してください。

オブジェクト種別間のリンクの作成

2 つの API スキーマがあり、1 つに ​Order​ オブジェクト種別、もう 1 つに ​Customer​ オブジェクト種別があるとします。

注文スキーマ 顧客スキーマ
ordersByOrderId (orderId:String!):Order
--------------------
--------------------
Order
--------------------
orderId: String!
Items: Item[]
customerId: String!
customersByCustomerId (customerId:String!): Customer
--------------------
--------------------
Customer
--------------------
customerId: String!
name: String!

現在、統合スキーマは次のようになっています。

ordersByOrderId (orderId:String!):Order
customersByCustomerId (customerId:String!): Customer
--------------------
--------------------
Order
--------------------
orderId: String!
Items: Item[]
customerId: String!
--------------------
--------------------
Customer
--------------------
customerId: String!
name: String!

現在のこの設定で、注文データセットと顧客データセットを同時に照会するには、両方の種別を別々に照会する必要があります。

ordersByOrderId (orderId: “123”) {
  orderId
  customerId
}
customersByCustomerId (customerId: “CC83”) {
  customerId
  name
}

また、注文の顧客データを照会するには、その注文に関連付けられている顧客 ID が必要です。

ただし、​Order​ オブジェクト種別には ​customerId​ を返す項目があります。​customerId: String!​ を​外部キー​として、​Order​ オブジェクト種別を ​Customer​ オブジェクト種別に​リンク​すれば、​Customer​ を対象種別として参照できます。このリンクによって選択した外部キーが ​Customer​ 種別の主キー ​customerId:String!​ にマッピングされます。

その結果、次のようになります。

  • Order​ オブジェクト種別に ​Customer​ という新しい項目が作成され、リンクされた ​Customer​ オブジェクト種別を返します。

  • API スキーマで生成された新しいオブジェクト種別が ​Customer​ API スキーマの種別への参照として機能するため、​Customer​ API スキーマに行った変更が ​Order​ API スキーマに影響することがありません。

    ordersByOrderId (orderId:String!):Order
    --------------------
    --------------------
    Order
    --------------------
    orderId: String!
    Items: Item[]
    customer: Customer
    --------------------
    --------------------
    Customer
    --------------------
    --------------------
    customerId: String!

更新された統合スキーマで、​Order​ 種別が ​Customer​ 種別にリンクされていることがわかります。

ordersByOrderId (orderId:String!):Order
--------------------
--------------------
Order
--------------------
orderId: String!
Items: Item[]
customer: Customer
--------------------
--------------------
Customer
--------------------
--------------------
customerId: String
name: String

リンク後は、統合スキーマの消費者が、関連付けられている ​customerId​ を知らなくても、​Order​ データセットと関連する ​Customer​ データセットを同時に照会できます。

ordersByOrderId (orderId: “123”) {
  orderId
  customer {
    name
  }
}

複合キーを使用するオブジェクト種別間のリンクの作成

種別のデフォルトのクエリメソッドに​複合キー​を使用することもできます。

デフォルトのクエリメソッドに ​customerId​ と ​customerStatus​ の複合キーを使用する ​Customer​ 対象種別について考えてみます。

customerDetail (id: string!, status: string!): Customer
--------------------
--------------------
Customer
--------------------
customerDetail: string!, string!
customerId: String!
customerStatus: String!

Order​ スキーマは上記と同じであるものとします。

ordersByOrderId (orderId:String!):Order
--------------------
--------------------
Order
--------------------
orderId: String!
Items: Item[]
customerId: String!

Customer​ 種別を ​Order​ 種別の対象としてリンクすると、統合スキーマにリンクが次のように示されます。

ordersByOrderId (orderId:String!):Order
--------------------
--------------------
Order
--------------------
orderId: String!
Items: Item[]
customerId: Customer
customerStatus: Customer
--------------------
--------------------
Customer
--------------------
--------------------
customerDetail: String!, String!
customerId: String!
customerStatus: String!