Priklausomybės

Dažnai duomenys teikiami web servisų pagalba, nesuteikiant galimybės gauti visų vienos lentelės duomenų vienu kartu. Pavyzdžiui, tarkime turime tokį web servisą, kuris teikia duomenis apie miestus ir šalis. Visų šalių sąrašą galima gauti kviečiant šį prieigos tašką:

htts://example.com/salys/

Šis prieigos taškas grąžina duomenis JSON formatu:

{
    "resources": [
        {"code": "lt", "country": "Lietuva"}
    ]
}

Miestų sąrašą galima gauti tik turinti šalies kodą, pavyzdžiui:

htts://example.com/salys/lt/miestai/

Šis miestų prieigos taškas grąžina:

{
    "resources": [
        {"city": "Vilnius"},
        {"city": "Kaunas"}
    ]
}

Tokio duomenų šaltinio duomenų struktūros aprašas atrodo taip:

name: pavyzdziai/priklausomybes
type: dataset
resources:
  salys:
    type: json
    source: https://example.com/salys/
    objects:
      geografija/salis:
        source: resources
        properties:
          id:
            type: pk
            source: code
          kodas:
            type: string
            source: code
          pavadinimas:
            type: string
            source: country
  miestai:
    type: json
    source: https://example.com/salys/{salis.kodas}/miestai/
    objects:
      geografija/miestas:
        source: resources
        dependencies:
          salis: geografija/salis/:dataset/pavyzdziai/priklausomybes
        properties:
          id:
            type: pk
            source: city
          salis:
            type: ref
            object: geografija/salis
            dependency: salis.id
          pavadinimas:
            type: string
            source: city

Šioje vietoje, panaudojant priklausomybę:

dependencies:
   salis: geografija/salis/:dataset/pavyzdziai/priklausomybes

Prieš kreipiantis į miestų prieigos tašką vykdoma užklausa:

/geografija/salis/:dataset/pavyzdziai/priklausomybes

Tada kviečiamas miestų prieigos taškas tiek kartų, kiek yra kiek užklausa grąžino eilučių. Miestų prieigos taško URL adrese esantis {salis.kodas} pakeičiamas į užklausos eilutėje esančią reikšme. Tokiu būdu, gauname visus miestus.

Papildomai, geografija/miestas savybė salis, reikšmę gauna ne iš source, o iš dependency: salis.id, tokiu būdu susiejant miestą su šalimi.

Galutiniame rezultate gauname tokias dvi lenteles:

geografija/salis

id pavadinimas
552c4c24 Lietuva

geografija/miestas

id salis pavadinimas
8e65fec0 552c4c24 Vilnius
4fe80490 552c4c24 Kaunas

Atkreipkite dėmesį, kad visuose pavyzdžiuose, nepriklausomai nuo duomenų šaltinio, naudodami vieningą žodyną visą laiką gauname tuose pačius duomenis, tokios pačios struktūros ir tokiais pačiais objektų ir laukų pavadinimais.