collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 43
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13797
  • stats Beiträge insgesamt: 63470
  • stats Themen insgesamt: 8600
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 16
  • stats Am meisten online: 415

Autor Thema: RESTful API / Datendienst-Verbindungsdefinition  (Gelesen 198 mal)

Offline infowuehler

  • Newbie
  • Beiträge: 2
RESTful API / Datendienst-Verbindungsdefinition
« am: Oktober 07, 2017, 07:34:24 »
Moinchen liebe Community,

gerade als Frischling hier gelandet, habe ich natürlich gleich eine Frage mit im Gepäck.
Bin mit den Basis-Funktionen von Access soweit fit, auch was externe Daten über ODBC anbetrifft. Nun -seit gestern- eine völlig neue Herausforderung für mich: Eine permanente Verbindung in die Weiten des www zur einer RESTful API!

Da finde ich keinen rechten geistigen Zugang. Der naheliegende Schritt über den Assi "Datendienste" endet schnell bei der Notwendigkeit eine Verbindungsdatei zu wählen. Herr Google hält sich (zumindest für mich) vage bedeckt und erwähnt hier und da lediglich mal eine xml-Datei, in der die Verbindungsdaten drin stehen sollten. Ein "Bespiel zum Umbiegen" leider bisher nicht gefunden. Nun bin ich leider auch kein Programmier sondern ganz banaler Access-USER, von daher auch mehr oder minder ratlos was Inhalte und Syntax dieses ominösen xml-Files anbetrifft.

Könnt Ihr mich bitte auf den richtigen Weg bringen? Ein kräftiger Wink in die richtige Richtung wäre klasse!

Ich dank´ schon mal recht sakkrisch,
LG infowuehler
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 850
Re: RESTful API / Datendienst-Verbindungsdefinition
« Antwort #1 am: Oktober 07, 2017, 08:31:15 »
Das Framework VBA-tools/VBA-Web sollte Einstiegsmöglichkeiten aufzeigen.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: infowuehler

Offline infowuehler

  • Newbie
  • Beiträge: 2
Re: RESTful API / Datendienst-Verbindungsdefinition
« Antwort #2 am: Oktober 08, 2017, 10:33:49 »
Hallo Lachtaube,

1000 Dank für Deine schnelle Antwort! Ich denke, das geht in die richtige Richtung.

Allerdings hört es dann bei mir auch relativ schnell nach bzw bei "Getting Started" auch schon wieder auf – um ehrlich zu sein, schon sofort nach der Installation >:(.

Es beginnt und endet bereits bei der Anmeldung: Keine Ahnung, welche Authentifikationsmethode die richtige ist, auch "Create Your Own"  https://github.com/VBA-tools/VBA-Web/wiki/Implementing-your-own-IWebAuthenticator bringt mich nicht wirklich weiter.

Infos die ich habe sind:
-die URL zur API
-einen 14-stelligen alphanumerischen Public Key
-einen 37-stelligen alphanumerischen Sicherungsschlüssel
-den Info-Text auf der HP:
"Für die Authentifizierung verwenden wir einfache HMAC basierte Prinzipien.
Denken Sie daran - senden Sie niemals PRIVATE Schlüssel mit API Aufrufe. Sie dürfen uns nur die öffentlichen Schlüssel in offenen Format zu kommen lassen und verwenden Sie die privaten Schlüssel ausschließlich auf Ihrer Seite zum verschlüsseln und um die API Anfragen zu "unterzeichnen".
"

Ganz zu schweigen davon, wie dann im Nachgang vielleicht "Mr.JaSON" dazu bringe, mir alles zu GETten, was GETbar ist.  (Ich möchte ausschließlich nur ziehen…   …nix ändern, zurückschreiben, etc)

Lachtaube, kannst Du mir bitte noch ein bißchen weiterhelfen? Das wäre grandios!


Abschließend noch kurz eine generelle Verständnisfrage: Zwischen meinen Datenbanken und auch Tabellen hatte ich bisher immer "Live-Verknüpfungen". Also wenn sich irgendwelche Inhalte ändern – schwupps sind die in nachgelagerten DBs vorhanden, also immer "Echtzeit". Klar – ist ja eine DB… Klar ist auch, dass das nicht von Zauberhand geschieht, sondern über Requests, die aber bei einer DB natürlich im Hintergrund laufen – sonst wär´s ja irgendwie keine DB.
Nun zum API-Konstrukt: Wenn ich das richtig verstehe, ballere ich bei Web-Abfragen da ja aktiv eine Anfrage an die API und erhalte dann meine Rückmeldung. Tut sich danach was am Datenbestand im Web, krieg ich also erstmal nix davon mit, bis ich wieder einen Request sende. Wie ist es denn dann möglich, zumindest halbwegs eine Echtzeit-Abbildung zu bekommen? Wenn meine Anwendung jetzt angenommen 30-sekündlich eine Anfrage an die API schickt, um "Live" zu sein und dabei "immer alles" saugt – erzeugt man da nicht eine "fette" Systemlast…   …und damit den Ärger der Entwickler? Oder fällt das nicht ins Gewicht oder geht eine Abfrage an eine API auch inkrementell? Wohl eher nicht, oder?

Freue mich auf Dein Feedback, bis dahin viele Grüße
infowuehler
 

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 850
Re: RESTful API / Datendienst-Verbindungsdefinition
« Antwort #3 am: Oktober 09, 2017, 11:05:52 »
Ohne spezifische Fragen kann ich nur ein allgemeines Beispiel für OpenStreetMap zeigen, was ohne privaten Schlüssel auskommt.Sub Test()
   Dim url$
   Dim req, json, key, addr

   Set req = CreateObject("WinHttp.WinHttpRequest.5.1")
   'weiteres im Wiki: http://wiki.openstreetmap.org/wiki/Nominatim
   url = "http://nominatim.openstreetmap.org/search?format=json" & _
         "&addressdetails=1&q=Hofbräuhaus München"

   'Request (synchron) öffnen
   req.Open "GET", url, False
   'und senden
   req.Send

   'ScriptControl zum Parsen von JSON vewenden
   With CreateObject("ScriptControl")
      'Sprache setzen
      .Language = "jscript"
      'Antwort auswerten
      Set json = .Eval("(" & req.responseText & ")")
     
      'Objekte holen
      Set key = CallByName(json, "0", VbGet)
      Set addr = CallByName(key, "address", VbGet)
     
      'weil nicht jede Antwort alle Schlüssel enthält
      On Error Resume Next
      'im Direktbereich <Strg-G> Ausgabe ansehen
      Debug.Print "Staat:", CallByName(addr, "country", VbGet)
      Debug.Print "Land:", CallByName(addr, "state", VbGet)
      Debug.Print "Bezirk:", CallByName(addr, "state_district", VbGet)
      Debug.Print "Region:", CallByName(addr, "county", VbGet)
      Debug.Print "Stadt:", CallByName(addr, "city", VbGet)
      Debug.Print "Stadtteil:", CallByName(addr, "suburb", VbGet)
      Debug.Print "PLZ:", CallByName(addr, "postcode", VbGet)
      Debug.Print "Anschrift:", CallByName(addr, "pedestrian", VbGet)
      Debug.Print "Hausnr.:", CallByName(addr, "house_number", VbGet)
      Debug.Print "Länge:", CallByName(key, "lon", VbGet)
      Debug.Print "Breite:", CallByName(key, "lat", VbGet)
   End With
End Sub
Ansonsten muss man sich, was die Frequenz der Anfragen angeht, beim Datenlieferanten erkundigen, was statthaft ist. Aus dem Bauch heraus würde ich daher für ein so häufig wie nötig und nicht so häufig wie möglich plädieren. Bei einem Wetterdienst mag die Nötigkeit natürlich eine andere sein, als bei einer Wertpapierbörse.
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: PhilS

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 248
    • Tipps zu Access, VBA, SQL und Co.
Re: RESTful API / Datendienst-Verbindungsdefinition
« Antwort #4 am: Oktober 09, 2017, 12:25:34 »
Das ganze ist ein recht umfangreiches Thema und ich kann noch kein konkretes Problem lokalisieren, bei dem man gut ansetzen könnte.

Für spezielle Themen, wie Authentifizierung mit API-Keys u.ä., ist oft die Dokumentation des Anbieters die beste Anlaufstelle für den Start. Darin findest du sicherlich auch eine acceptable use policy, die erläutert, wie häufig du die Schnittstelle ansprechen darfst.

Ganz zu schweigen davon, wie dann im Nachgang vielleicht "Mr.JaSON" dazu bringe, mir alles zu GETten, was GETbar ist.  (Ich möchte ausschließlich nur ziehen…   …nix ändern, zurückschreiben, etc)

Zum Thema JSON hat Jack Leach kürzlich einen hilfreichen Beitrag auf seinem Blog veröffentlicht (allerdings Englisch). How to Parse JSON with VBA

Offline Lachtaube

  • Access-Meister
  • ***
  • Beiträge: 850
Re: RESTful API / Datendienst-Verbindungsdefinition
« Antwort #5 am: Oktober 09, 2017, 13:20:39 »
@PhilS,

für den Zugriff auf ScriptTypeInfo-Objekte kommt man mit CallByName-Methoden aus, ohne die beiden JScript-Einzeiler involvieren zu müssen. Leider versagt das Control bei größeren Datasets und verabschiedet sich mit einem Subscript out of range.

PS: Und für 64-Bit Versionen gibt es das TablacusScriptControl.

PPS: ... und natürlich sollte man der Datenquelle voll vertrauen können, denn die Eval-Methode des Controls könnte auch böse Dinge verrichten.
« Letzte Änderung: Oktober 09, 2017, 13:35:20 von Lachtaube »
Grüße von der (⌒▽⌒)