GraphQL-rajapinnan suodattimen TrainWhere.version tyyppi pitäisi olla IntWhere eikä StringWhere

82 views
Skip to first unread message

Vili Ketonen

unread,
Mar 11, 2024, 10:31:13 AM3/11/24
to rata.digitraffic.fi

Moi,

Nykyisellään GraphQL-rajapinnan eri queryissä ei voi tehdä versionumerosuodatusta samalla tavalla kuin REST-rajapinnassa. Esimerkiksi REST-rajapinta Liikennepaikan saapuvat ja lähtevät junat (lukumäärärajoitus) tukee myös version-parametria jolla voi tehdä versiosuodatusta: “Versiorajaus. Palauttaa kaikki junat, jotka ovat muuttuneet sitten version-version. Jos versionumeroa ei anneta, palautetaan uusimmat tiedot.”

Vastaava GraphQL:n query trainsByStationAndQuantity ei suoraan query:n argumenteissa tue samaa version-parametria, jolla voisi tehdä tuollaisen suodatuksen. Query trainsByStationAndQuantity tukee kuitenkin where argumenttia, joka on tyyppiä TrainWhere johon voi asettaa version suodatuksen. Ikävä kyllä tämä version-kentän suodatus on jostain syystä (bugi?) tyyppiä StringWhere joka tukee vain equals / unequals tyyppistä suodatusta, vaikka tarve olisi tehdä IntWhere tyyppinen suodatus jossa olisi vaihtoehdot equals / unquals / greaterThan / lessThan.

Onkohan tässä kyseessä bugi, vai miksi tuo version suodatus on tyyppiä StringWhere eikä IntWhere?

Esimerkiksi seuraavanlaista kyselyä ei voi tehdä:

{ trainsByStationAndQuantity(station: "HKI", where: {version: { greaterThan: 287845501943}}) { trainNumber } }

Tämä on ristiriidassa sen kanssa, että esim. junanumerolla joka on myös Int voi kuitenkin tehdä vastaavanalaisen rajauksen:

{ trainsByStationAndQuantity(station: "HKI", where: {trainNumber: { greaterThan: 1234}}) { trainNumber version } }

- Vili

rata.digitraffic.fi

unread,
Mar 12, 2024, 3:32:07 AM3/12/24
to rata.digitraffic.fi
Hei

Kiitos erinomaisesta bugiraportista, korjaamme tämän jossain kohtaa.

Ystävällisin terveisin / Best regards

– Digitraffic asiakastuki / Digitraffic support –

rata.digitraffic.fi

unread,
May 23, 2024, 4:55:04 AM5/23/24
to rata.digitraffic.fi
Terve,

junan versionumero on liian suuri GraphQL:n Int-tyypille. Float-tyyppiin se menisi, mutta tyypin muutos vaatisi tässä kohtaa oikeastaan uutta rajapintaversiota. Auttaisiko, jos junan versionumeron saisi Train-tyypissä myös Float-tyyppisenä toisessa kentässä?

Ystävällisin terveisin / Best regards
– Digitraffic asiakastuki / Digitraffic support –

Vili Ketonen

unread,
May 26, 2024, 9:05:18 AM5/26/24
to rata.digitraffic.fi
Moi,

Float-tyyppisellä omalla kentällä voisi varmasti ratkaista ongelman, jos näette ettei se aiheuta liikaa hämmennystä rajapinnan käyttäjille - liukuluvun käyttö esittämään kokonaislukua, joka esittää junan versiota voi olla semanttisesti vähän huono, ja liukuluvullakin tarkkuus voi tulla vastaan jos versionumerot olisivat kaukaisessa tulevaisuudessa muutamaa kokoluokkaa suurempia (ei välttämättä kovin relevantti huoli, toki riippuu client-pään toteutuksesta).

Yhtenä vaihtoehtona voisi olla myös oman BigInt-tyylisen scalar-tyypin määrittäminen GraphQL:ssä, jossa arvo serialisoitaisiin string-tyyppisenä, mutta client-päässä voi tarvittaessa tehdä haluamansa käsittelyn tuolle omalle scalar-tyypille. Ja vielä toisena vaihtoehtona: oisiko vaihtoehtoinen versio-kenttä mahdollista esittää yksinkertaisesti String-tyyppisenä? Jos käyttäisi String-tyyppiä, se vaatisi rajapintaan tuen, että myös String-tyyppisten kenttien kanssa voisi käyttää suodatuksessa (StringWhere) greaterThan ja lessThan vaihtoehtoja, jotta siitä olisi hyötyä.

- Vili

rata.digitraffic.fi

unread,
Jun 11, 2024, 5:38:50 AM6/11/24
to rata.digitraffic.fi
Moi,

versionumeron vertailu on nyt tehty mahdolliseksi sallimmalla greaterThan ja lessThan -vertailut merkkijonoille. Versionumeron tapauksessa merkkijono parsitaan numeroksi, ja vertailu toimii odotetusti kunhan merkkijonon sisältö on validi numero.

Ystävällisin terveisin / Best regards
– Digitraffic asiakastuki / Digitraffic support –

Vili Ketonen

unread,
Jun 17, 2024, 9:10:49 AM6/17/24
to rata.digitraffic.fi
Moi,

Kiitoksia paljon, tämän avulla saa nyt toteutettua GraphQL-puolella versionumerosuodatusta samalla tavalla kuin REST-puolella: https://www.digitraffic.fi/rautatieliikenne/#versionumeroiden-k%C3%A4ytt%C3%B6

- Vili

Reply all
Reply to author
Forward
0 new messages