Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerAPI スキーマのオブジェクト種別を、統合スキーマの別のオブジェクト種別か、同じ API スキーマの別のオブジェクト種別のいずれかにマージできます。種別のマージにより、類似の種別を 1 つの種別に結合して項目やデータセットを拡張し、クエリ結果を向上させることができます。
オブジェクト種別は他のオブジェクト種別にのみマージできます。拡張マージでは種別のマージによってデータが結合され、複合マージでは種別のマージによって統合スキーマが整理されますが、この場合は主キーなしで結合されます。
Anypoint DataGraph では、マージを設定する種別を現在の種別、マージ先の種別を対象種別とします。
現在の種別をコラボレーションが有効になっている対象種別にマージできます。両方の種別が主キーを指定している場合は、両方の主キーが同じオブジェクトを表し、そのオブジェクトの同じレコードを識別することを確認します。拡張マージと呼ばれるこの種のマージでは、両方のオブジェクト種別から同じデータセットが返されます。
たとえば、デフォルトの customersById(id) クエリメソッドと id 主キーを使用して Customer 種別を返す Customer API スキーマがあるとします。
customersById(id): Customer
--------------------
--------------------
Customer
--------------------
id: string!
email:
firstName:
lastName:
telephone:
また、User 種別がある UserAccount という API スキーマもあります。
usersById(id): User
--------------------
--------------------
User
--------------------
id:
email:
address: Address
accountId:
type:
organization:
--------------------
--------------------
Address
--------------------
addressLine1:
addressLine2:
city:
postalCode:
state:
country:
Customer 種別と User 種別の両方が同じオブジェクト種別を参照し、その同じオブジェクトの同じ情報を返すとします。主キーの値を同じにするには、両方の種別が同じ Customer オブジェクトを識別する必要があります。さらに、両方の種別に共通する項目も、同じ値を返す必要があります。たとえば、Customer 種別の id = 1 と User 種別の id = 1 の場合、メール項目の値がまったく同じでなければなりません。
この 2 つの種別をマージすると、同じ顧客に関するデータが結合され、1 回の要求で照合できます。
また、どちらの種別にも、同じオブジェクトを取得するデフォルトのクエリメソッドが設定されているため、この 2 つの種別をマージして、統合スキーマに結合されたクエリメソッドと種別が 1 つだけ存在するようにすることも可能です。
Customer 種別
デフォルトのクエリメソッド: customersById(id): Customer
主キー: id
UserAccount 種別:
デフォルトのクエリメソッド: usersById(id): User
主キー: id
この結果、統合スキーマにマージされ、拡張された種別が 1 つ存在することになります。
統合スキーマに最初に追加された種別が、マージ後の種別と対応するデフォルトのクエリメソッドの名前を優先的に定義します。
この例では、Customer API の種別が最初に追加されたため、統合スキーマに生成された種別は Customer という名前になり、Customer 種別と UserAccount 種別の両方のすべての項目が含まれます。生成されたクエリメソッドは customersById という名前で、マージされた Customer 種別を返します。
customersById(id): Customer
--------------------
--------------------
Customer
--------------------
id: string!
email:
firstName:
lastName:
telephone:
address: Address
accountId:
type:
organization:
--------------------
--------------------
Address
--------------------
addressLine1:
addressLine2:
city:
postalCode:
state:
country:
2 つの種別の一方のコラボレーションのみが有効になっている場合でもマージできます。この種のマージでは、現在の種別 (マージを設定する種別) が対象種別 (マージ先の種別) への参照として機能します。マージを実行するためには、対象種別のコラボレーションが有効になっている必要があり、また、両方の種別が 1 つの主キーを定義するか、複合キーを使用する必要があります。
マージが完了すると、参照が宣言され、対象種別の項目のみを取得できます。現在の種別の主キー以外の項目は非表示になり、照会できません。
たとえば、Product 種別を返す Order API スキーマがあるとします。
ordersById(id: string!) : Order
Order
----------
id: string!
amount: float!
date: string!
product: Product
-----------
-----------
Product
-----------
id: string!
name: string
------------
Product API Schema も Product 種別を返します。
productsById(id: string!) : Product
Product
------------
id: string!
name: string
brand: string
description: string
unitPrice: float!
quantityRemaining: int!
-----------
Order API スキーマの Product 種別を Product API スキーマの Product 種別にマージできます。この場合、Order API スキーマの Product 種別が Product API スキーマの Product 種別の参照になります。
マージ後の統合スキーマは次のようになります。
ordersById(id: string!) : Order
productsById(id: string!) : Product
Order
----------
id: string!
amount: float!
date: string!
product: Product
-----------
-----------
Product
-----------
id: string!
name: string
brand: string
description: string
unitPrice: float!
quantityRemaining: int!
-----------
Order 種別によって関連する商品のより多くのデータが返されるようになり、別のクエリを作成する必要がありません。
この例では、どちらの種別も主キーが id で、どちらの API も、id で同じ商品オブジェクトレコードを返します。
マージする種別に、複合キーを使用するクエリメソッドを設定することもできます。
たとえば、同じ Order API スキーマが Product 種別を返すとします。
ordersById(id: string!) : Order
Order
----------
id: string!
amount: float!
date: string!
product: Product
-----------
-----------
Product
-----------
id: string!
name: string
sku: string
------------
他方、SalesOrder API は Product 種別を返しますが、id と sku の複合キーを使用します。
SalesOrder(id: string!, sku: string!) : SalesOrder
Product
------------
id: string!
sku: string!
name: string
brand: string
description: string
unitPrice: float!
quantityRemaining: int!
-----------
マージ後の統合スキーマは次のようになります。
ordersById(id: string!, sku: string!) : Order
SalesOrderByID(id: string!, sku: string!) : SalesOrder
Order
----------
id: string!
amount: float!
date: string!
product: Product
-----------
-----------
Product
-----------
id: string!
sku: string!
name: string
brand: string
description: string
unitPrice: float!
quantityRemaining: int!
-----------
マージする 2 つの種別のいずれにも主キーが定義されていない場合は、複合マージが行われます。このマージ方法では、デフォルトのクエリメソッドも主キーも指定する必要がありません。
どちらの種別にも主キーがないため、マージした場合、種別から返されるデータセットが結合されるのではなく、両方の種別が 1 つの種別に結合されます。このマージでは、同じオブジェクトを参照せず、項目を結合します。現在の種別と対象種別をマージすると、現在の種別のすべての項目が統合スキーマで null 可能になります。このマージによる種別のクエリ結果への影響はありませんが、重複する種別によって返されるデータセットが異なる場合に統合スキーマが整理されます。
たとえば、Amount 種別を返す Europe Sales API Schema があるとします。
Amount
----------
currency: String
price: float
North America API Schema も Amount 種別を返します。
Amount
----------
currency: String
price: float
この 2 つをマージすると、統合スキーマには、クエリに応じて Europe Sales API と North America Sales API のいずれかから返される Amount 種別が 1 つのみ存在します。この 2 つの種別は似ていますが、データセットが結合されていません。
入力種別は、変異を実行するときに統合スキーマの情報を変更するために使用する POST、PUT、および DELETE オブジェクトです。
すべての項目が一致する場合にのみ、2 つの入力種別をマージできます。両方の種別に同じ数の項目が必要であり、項目のサブセットを含めることはできません。
たとえば、次の同一の項目を含む OrderInput API と PurchaseInput API があるとします。
OrderInput ---------- orderId: String! customerEmail: String! customerId: String! OrderDate: String! product: Product Status: OrderStatus totalAmount: float
統合スキーマで OrderInput API を PurchaseInput API にマージして、これらの種別を統合できます。
入力種別をマージするために、コラボレーションを有効にする必要はなく、有効にすることもできません。
オブジェクト種別を同じ API スキーマの別のオブジェクト種別にマージする場合はローカルマージが行われます。生成されたこの種別を、ローカルの別のオブジェクト種別や統合スキーマの種別にマージすることもできます。
ローカルマージ後は、マージによって生成された種別のみを表示して編集できます。さらに、種別のコラボレーションを有効または無効にすることや、そのデフォルトのクエリメソッドや主キーを変更することはできません。オブジェクト種別や項目の名前変更、オブジェクト種別や項目の非表示、別のオブジェクト種別とのマージやリンクは実行できます。