[SWIFT] NS API gebruiken

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • dennissimeau
  • Registratie: Februari 2013
  • Laatst online: 24-08 17:13
Geachte mensen die in dit gedeelte van het forum komen,

Momenteel heb ik wat meer tijd om een beetje te hobbyen met swift (en het op die manier dus te leren) en ik wilde voor een bepaalde toepassing graag gebruik maken van de API die onze Nederlandse Spoorwegen ter beschikking heeft gesteld ( zie deze link). Nu loop ik een beetje tegen een aantal problemen aan.

Een hele simpele API call naar een API welke verder geen authentication nodig heeft lukt mij nog wel. Bij de API van de NS moet je echter een gebruikersnaam en wachtwoord aanmaken en deze ook meesturen richting hun server. In theorie moet ik dan XML (of all things...,maar dat is een andere discussie) terug krijgen. Ook zegt de NS op hun site dat het een REST API is, maar een ongeautoriseerde call naar de URL, laat wat dingen zien waarin SOAP genoemd wordt.
Ik kan op internet eigen vrij weinig vinden over een goeie implementatie van dit soort calls en ik hoopte dat er hier enkele super slimme tweakers zaten welke mij een stapje verder zouden kunnen helpen.

Gracias! :)

Dennis

Acties:
  • +1 Henk 'm!

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Advies: Ga eens aan de slag met SoapUI.
Ideale tool om met dit soort dingen te gaan frutten.
Je zal vast wel iets van een WSDL optie hebben die je kan inladen in SoapUI, die geeft je dan alle mogelijke calls en voorbeeldberichten (indien de WSDL goed ingevuld is ofcourse).
Daar kan jij dan weer prachtig mee aan de knutsel om te zien hoe het werkt.

Iemand een Tina2 in de aanbieding?


Acties:
  • +2 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Of test met postman. Er zijn redelijk wat tools voor.

Los van het NS verhaal; gebruik een standaard library om XML, SOAP, REST, JSON, HTTP enz. te doen. Het zelf opnieuw implementeren levert meestal voornamelijk meer problemen dan oplossingen op.

Acties:
  • 0 Henk 'm!

  • dennissimeau
  • Registratie: Februari 2013
  • Laatst online: 24-08 17:13
Thnx voor de tips, mensen! Het geeft me in ieder geval meer inzicht in hoe de api aangeroepen wordt en welke parameters naar de server gestuurd worden.
Helaas lijken er zo goed als geen up to date libraries te zijn die in Swift 3 (en al helemaal niet in Swift 4) fatsoenlijk werken of ze zijn Obj-c gebaseerd. Ik denk dat ik me maar moet gaan verdiepen in het opzetten van een server die de API afhandelt voor me (en meteen cached). Mocht iemand nog een pareltje op het internet weten of toevallig de API zelf gebruikt hebben, dan houd ik me aanbevolen :-).

Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 17:12

AW_Bos

Liefhebber van nostalgie... 🕰️

Die API van de NS lijkt naar mijn idee een beetje een allergaartje.
Errors krijg je in een SOAP-interface terug, en voor de rest komt er gewoon simpele XML uit.

Verder moet je wel weten dat deze NS-API behoorlijk beperkt is met wat de NS-app voor informatie geeft. Ik hoop dat er snel eens tijd bij de NS komt dat ze deze API weer eens gaan updaten, maar de laatste gecommuniceerde update is al 3 jaar geleden.

[ Voor 45% gewijzigd door AW_Bos op 09-07-2017 23:25 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 10-09 11:48
Ik ben zelf ook al eens bezig geweest met de NS Api, maar dan met C#. De stappen die je moet nemen zijn echter hetzelfde. Zorg dat je headers kan toevoegen aan je HTTP Client.

Vervolgens voeg je een header toe:
naam:
Authorization

Waarde:
basic XXXXXXXXXXX


op de plaats van de X'en moet je username en password van de NS api komen. Dit moet als volgt worden gedaan:
<gebruikersnaam>:<wachtwoord>

Dit moet je vervolgens omzetten in Base64 encoding en plaatsen op de X'en.

Voorbeeld:
Gebruikersnaam: henk
wachtwoord: wachtwoord123
wordt:
henk:wachtwoord123

Dit in Base64 encoding wordt:
aGVuazp3YWNodHdvb3JkMTIz

en de waarde van je header wordt dan:
basic aGVuazp3YWNodHdvb3JkMTIz


Dit is overigens mijn implementatie in C#
C#:
1
2
string basicAuthValue = Base64Converter.To(string.Format("{0}:{1}", ApiConfiguration.ApiUsername, ApiConfiguration.ApiPassword));
headers.Add("Authorization", string.Format("basic {0}", basicAuthValue));

Acties:
  • 0 Henk 'm!

  • Ofyles2
  • Registratie: Februari 2010
  • Laatst online: 11-01-2024
AW_Bos schreef op zondag 9 juli 2017 @ 23:23:
Die API van de NS lijkt naar mijn idee een beetje een allergaartje.
Errors krijg je in een SOAP-interface terug, en voor de rest komt er gewoon simpele XML uit.

Verder moet je wel weten dat deze NS-API behoorlijk beperkt is met wat de NS-app voor informatie geeft. Ik hoop dat er snel eens tijd bij de NS komt dat ze deze API weer eens gaan updaten, maar de laatste gecommuniceerde update is al 3 jaar geleden.
Dan smacht je naar een oplossing zoals de Zwitsers dat nu doen: link.

Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 17:12

AW_Bos

Liefhebber van nostalgie... 🕰️

Er is een oplossing in realtime data van Nederlandse en grensoverschrijdende vervoerders. Dit gaat via het NDOV-loket wat een centrale organisatie is die de GTFS-schema's exploiteert, en datastromen heeft van real-time data. Denk aan GPS-posities van treinen en realtime vertrekdata. Voor dat laatste gebruik ik dit open-source Python-script.

[ Voor 7% gewijzigd door AW_Bos op 10-07-2017 15:04 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • dennissimeau
  • Registratie: Februari 2013
  • Laatst online: 24-08 17:13
Bedankt voor jullie reacties, guys! Ik heb de afgelopen dagen liggen stoeien met 't appje. De NS maakt het helaas inderdaad lastig om met hun API te werken. Bovendien, maar dat ligt natuurlijk ook aan swift, werken een aantal libraries niet meer onder swift 4, en swift 3.2 builden wilt ook niet altijd goed meewerken. Daarnaast hoop ik dat ze toch echt heel erg snel afstappen van XML en de API naar JSON ombouwen, want ook hiervoor is het best lastig om een fatsoenlijke library te vinden.

Ik twijfel nu of ik een servertje ga optuigen dat met C# of java een tussen API vormt, of dat ik andere bronnen ga gebruiken om mijn doel te bereiken.

Acties:
  • 0 Henk 'm!

  • xFeverr
  • Registratie: Juni 2011
  • Laatst online: 10-09 11:48
Volgens mij heeft de laatste ook de voorkeur bij NS. Je hebt namelijk maar een beperkt aantal calls. Zoiets als de stationslijst veranderd max een aantal keren op een jaar, en meestal zelfs op 1 moment in december tijdens de wisseling van dienstregeling. Zoiets zou je al op je server laten cachen, want dat is natuurlijk zonde van de calls

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 10-09 18:14

alienfruit

the alien you never expected

@dennissimeau Gewoon Xcode 8.3 downloaden dan? Het klinkt alsof je een Xcode 9 beta gebruikt

Acties:
  • 0 Henk 'm!

  • dennissimeau
  • Registratie: Februari 2013
  • Laatst online: 24-08 17:13
@xFeverr Ik kan volgensmij is van 50.000 calls maken per service per dag. Voor intern gebruik, een proof of concept wat ik een beetje aan het maken ben, maak ik me daar niet zo'n zorgen over. Als oefening uiteraard wel een goed idee om ook al caching in te bouwen natuurlijk

@alienfruit Had op de verkeerde plek Swift 3.2 geconfigd, werkt nu wel :-). Vanwege ARKit in het zelfde project heb ik wel Xc9 en Swift 4 nodig.

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Mocht je niet genoeg hebben aan 50k requests per dag, dan kun je aan NS vragen of de limiet verhoogd kan worden.

We are shaping the future

Pagina: 1