Bonjour David,
je prends la main sur le sujet.
En effet, Simplicité est de fait conforme au design guide API en vigueur à l’heure actuelle.
Cependant, nos Urbanistes des API travaillent (si si) sur l’élévation de nos pratiques pour que nous puissions accéder au graal de l’API tout en alignant l’ensemble des providers de ressources (que nous sommes) sur la sémantique d’Entreprise (notre fameux MIM). Comme nous serons parmi les premiers en interne à atteindre cette cible, autant orienter les spécifications du nouveau design guide.
Nous souhaitons maintenir la possibilité de servir les propriétés “à plat” dans la plupart des cas (fonctionnement actuel). Ce comportement est explicitement paramétré dans les mappings. Cela convient parfaitement.
Dans d’autres cas, nous souhaitons exploiter les paramètres des relations (0-n ou n-n) entre objets - à nouveau de manière spécifiquement activable comme c’est le cas actuellement via le flag booléen de addRefField.
Afin d’illustrer la suite, considérons cette partie du modèle:
- Objet métier Company (hérite de Organization)
- Objet métier Structural unit
- Une Structural unit -belongs to-1 Company
- Une Company -has-n- Structural units
Je laisse de côté pour l’instant la relation réflexive car c’est un cas qui n’est pas encore implémenté dans mon modèle BCSI
- Une Structural unit -is part of-n Structural unit
- Une Structural unit -has part-n Structural unit
Mapping:
addObject(“companies”, “BCSILegalEntity”, “Renault group legal entities (companies).”)
addObject(“structural-units”, “BCSILegalEntityDep”, “Renault group legal entities structural-units (departments).”)
actuellement / mode non embedded addRefField(“structural-units”, “companies”, “belongs-to”, “DepLegalEntityId”, “has”, false, “Structural-units (department) structuring the legal entity (organization).”)
Get Company
{
"corporateName": "ALD AUTOMATIVE",
"_links": [
{
"rel": "has",
"href": "companies/2/has"
}
],
"row_id": "2",
"rowId": "2"
}
Get Structural unit (champ d’objet Company.corporateName explicitement mappé “à plat” dans Structural unit)
{
"corporateName": "ALD AUTOMATIVE",
"belongs-to": "2",
"label": "Achats",
"row_id": "1",
"rowId": "1"
}
-
actuellement / mode embedded addRefField(“structural-units”, “companies”, “belongs-to”, “DepLegalEntityId”, “has”, true, “Structural-units (department) structuring the legal entity (organization).”)
{
"corporateName": "ALD AUTOMATIVE",
"has": [
{
"corporateName": "ALD AUTOMATIVE",
"belongs-to": "2",
"label": "Achats",
"row_id": "1",
"rowId": "1"
},
{
"corporateName": "ALD AUTOMATIVE",
"belongs-to": "2",
"label": "ACO",
"row_id": "2",
"rowId": "2"
},
{
"corporateName": "ALD AUTOMATIVE",
"belongs-to": "2",
"label": "Agence RH",
"row_id": "6",
"rowId": "6"
}
],
"row_id": "2",
"rowId": "2"
}
Première évolution demandée:
-
En mode embedded, la patte ‘n’ de la relation est effectivement imbriquée mais la valeur de la clé “has” est un tableau de structural-units, il faudrait que ce tableau de structural-units soit imbriqué dans un objet : “has”: { “structural-units”: […] } au lieu de “has”:[…]
{
"corporateName": "ALD AUTOMATIVE",
"has": {
"structural-units": [
{
"corporateName": "ALD AUTOMATIVE",
"belongs-to": "2",
"label": "Achats",
"row_id": "1",
"rowId": "1"
},
...
]
},
"row_id": "2",
"rowId": "2"
}
Deuxième évolution demandée :
-
En mode embedded, la patte ‘1’ de la relation n’est pas imbriquée, la seule option disponible est de mapper à plat, nous souhaitons pouvoir substituer aux champs actuellement mappés “à plat” un bloc contenant les propriétés mappés sur l’objet lié (companies) sans ses links et idéalement uniquement celles reportées comme object field de structural-units (ici, corporateName)
Get Structural unit (champ d’objet Company.corporateName ne serait plus mappé “à plat” dans Structural unit mais imbriqué dans le bloc “belongs-to”)
{
"belongs-to": {
"companies": [
{
"corporateName": "ALD AUTOMATIVE",
"row_id": "2",
"rowId": "2"
}
]
},
"label": "Achats",
"row_id": "1",
"rowId": "1"
}
Troisième évolution demandée :
-
En mode non embedded, la patte ‘1’ de la relation n’est pas reportée dans les links.
Get Structural unit (champ d’objet Company.corporateName reste ici explicitement mappé “à plat” dans Structural unit mais pourrait ne plus l’être)
{
"_links": [
{
"rel": "belongs-to",
"href": "structural-units/1/belongs-to"
}
],
"corporateName": "ALD AUTOMATIVE",
"belongs-to": "2",
"label": "Achats",
"row_id": "1",
"rowId": "1"
}