Importieren von Webdienstdaten: Die neue HTTP-Anfrage in JMP® 14 (US 2018 231)
Niveau: Mittelstufe
Bryan Boone, JMP Principal Software Developer, SAS
Staatliche und private Einrichtungen stellen ihre Daten zunehmend über RESTful-Dienste über das Internet zur Verfügung. JMP 14 hat eine neue Funktion namens HTTP-Anfrage , verfügbar über JSL, das Ihnen den Zugriff auf diese RESTful-Dienste ermöglicht. In diesem Dokument wird beschrieben, was RESTful-Dienste sind, und es werden mehrere Beispiele für deren Verwendung bereitgestellt HTTP-Anfrage um neue Daten in JMP zu importieren.
Was ist REST
REST oder Representational State Transfer ist eine Möglichkeit, Interoperabilität zwischen Computersystemen im Internet bereitzustellen. Ein RESTful-Dienst ist ein webbasierter Dienst, der dieses Paradigma nutzt. Eine RESTful API ist eine Anwendungsprogrammschnittstelle (API), die HTTP-Anfragen verwendet ERHALTEN , POST , SETZEN Und LÖSCHEN Daten zur Interaktion mit dem RESTful-Dienst.
Das HTTP-Protokoll definiert eine Reihe von HTTP-Anforderungsmethoden, um die Aktion anzugeben, die ein Client von einem Server für eine Ressource ausführen lassen möchte. Sie sind:
ERHALTEN
|
Fordern Sie die Ressource an
|
KOPF
|
Fordern Sie nur Ressourcenmetadaten an
|
POST
|
Anfragen zur Annahme der Ressource
|
SETZEN
|
Anfragen zum Speichern oder Erstellen der Ressource
|
LÖSCHEN
|
Anfragen zum Löschen der Ressource
|
PATCH
|
Anforderung, den Status einer Ressource zu ändern
|
Neue Terminologie, bekannte Aktivitäten
Dies mag wie ein völlig neues Konzept erscheinen, aber Sie sind bereits mit zwei der gängigsten Anfragemethoden vertraut: ERHALTEN Und POST .
ERHALTEN
ERHALTEN hat zwei Persönlichkeiten.
Die erste Persönlichkeit ist gerecht ERHALTEN -ting eine Ressource. Das heißt, die Absicht besteht lediglich darin, auf eine Webressource zuzugreifen. Dies ist in Abbildung 1 zu sehen. Hier greift der Browser auf die Webseite zu.
Abbildung 1. „ ERHALTEN für eine Webressource“
Das zweite ist ERHALTEN -ting (Zugriff) auf eine Ressource, zusammen mit einer sogenannten Abfragezeichenfolge. Eine Abfragezeichenfolge ist ein Satz von Schlüssel-/Wertpaaren, die von der Webressource definiert und vom Client verwendet werden, um den Server aufzufordern, die Ressource zu filtern oder zu ändern ERHALTEN Anfrage mit diesen Parametern. Dies ist in Abbildung 2 zu sehen. Hier fordert der Browser den Server auf, a zu ändern ERHALTEN Anfrage mit:
POST
POST ist dagegen komplexer. A POST fordert den Server auf, eine Ressource zu ändern oder zu erstellen. A POST Enthält typischerweise ein HTML-Formular, das wiederum eine Sammlung von Schlüssel/Wert-Paaren von Zeichendaten und/oder Schlüssel/Wert-Paaren von Dateien enthält. Abbildung 3 ist ein Beispiel, das einen Benutzer bei Amazon anmeldet. Hier sind die Schlüssel/Wert-Paare:
Email
|
Melden Sie sich mit Ihrer E-Mail-Adresse an
|
Passwort
|
Ihr Passwort
|
Der "Anmelden" Die Schaltfläche führt den Vorgang aus POST

Figur 3. „ POST Formulardaten zu einer Webressource“
Warum es verwenden?
Das HTTP-Protokoll ermöglicht es uns, uns die Informations-Superautobahnen wie folgt vorzustellen: „Die Autobahnen sind asphaltiert; Die Straßenschilder sind angebracht und Brücken wurden gebaut.“ Der Standard hat die Gründung neuer Datenverwaltungsunternehmen ermöglicht. Darüber hinaus wurden durch die Einführung des HTTP-Standards die in etablierten Unternehmen häufig anzutreffenden Informationssilos beseitigt. Zu diesen Unternehmen gehören unter anderem:
Text-Processing.com (Stimmungsdaten)
|
Jenkins
|
Jira
|
Der HUB
|
Büro 365
|
Google
|
Dropbox
|
Eine Fahrt
|
AWS (Amazon Web Services)
|
US-Volkszählungsamt
|
NASA
|
PubChem
|
New York Times
|
Fitbit
|
Yahoo
|
Bitcoin
|
Marvel-Comics
|
SAS
|
OpenAQ
|
JMP
|
So verwenden Sie es
JSON
JSON (JavaScript Object Notation) ist ein leichtes Datenaustauschformat. Es basiert auf einer Teilmenge der Programmiersprache JavaScript. JSON ist ein sprachunabhängiges Textformat, das jedoch Konzepte verwendet, die den meisten Programmierern bereits vertraut sind.
JSON basiert auf zwei Strukturen:
- Eine Sammlung von Name/Wert-Paaren. (Wörterbuch, Hash-Tabelle, assoziatives Array, …)
- Eine geordnete Liste von Werten. (Array, Vektor, Liste, ...)
Neue Terminologie, bekannte Aktivitäten (wieder)
JSL
JSL ist die Skriptsprache der Wahl, wenn JMP beteiligt ist. JSON mag ein neuer Begriff sein, aber JSL unterstützt die beiden Datenstrukturen, die JSON benötigt.
Aufführen
Listen sind Behälter zum Aufbewahren von Gegenständen wie den folgenden:
- Zahlen
- Variablen
- Zeichenketten
- Ausdrücke (zum Beispiel Zuweisungen oder Funktionsaufrufe)
- Matrizen
- verschachtelte Listen
Assoziatives Array
- Ein Assoziatives Array ordnet eindeutige Schlüssel Werten zu, die nicht eindeutig sein können. Ein assoziatives Array wird auch als Wörterbuch, Karte, Hash-Map oder Hash-Tabelle bezeichnet.
JSL enthält außerdem zwei Funktionen, die speziell für die JSON-Verarbeitung gelten.
JSON analysieren
- Konvertiert JSON-Text basierend auf der Struktur der JSON-Daten in ein assoziatives Array oder eine Liste.
Als JSON Expr
- Gibt eine JSON-Darstellung des Ausdrucks zurück.
Diese Funktionen ermöglichen dem Skriptautor eine nahtlose Konvertierung in und aus JSL-Containern und JSON.
HTTP-Anfrage
HTTP-Anfrage ist neu in JMP 14. Ursprünglich wurde die Technologie entwickelt, um die Interaktion zwischen JMP und JMP Public abzuwickeln. Es wurde schnell erkannt, dass es weitere Anwendungen als die Veröffentlichung von Daten auf JMP Public gab, und die Technologie wurde in JSL als veröffentlicht HTTP-Anfrage .
HTTP-Request-Primer
HTTP-Anfrage Unterstützt nahtlos sowohl das HTTP- als auch das https-Protokoll und kapselt einen Großteil des Verhaltens, das Sie von cURL erwarten würden.
„cURL wird in Befehlszeilen oder Skripten zum Übertragen von Daten verwendet. Es wird auch in Autos, Fernsehgeräten, Routern, Druckern, Audiogeräten, Mobiltelefonen, Tablets, Set-Top-Boxen und Mediaplayern verwendet und ist das Rückgrat der Internetübertragung für Tausende von Softwareanwendungen, die täglich Milliarden von Menschen betreffen.“
Noch wichtiger ist, dass Sie daran denken können HTTP-Anfrage als Klebstoff, der Webressourcen an JSL bindet. Das ist, HTTP-Anfrage kommuniziert mit einer Webressource und ermöglicht dem Skriptautor, Antworten in JSL zu verarbeiten. Die JSL-Komplexität wird vom Autor gesteuert.
Die häufigsten HTTP-Methoden, die Sie bei der Interaktion mit einer Webressource verwenden, sind:
Verwenden einer HTTP-Anfrage in einer GET-Aktion
A ERHALTEN Aktion ist wahrscheinlich die häufigste HTTP-Anfrage Aktion. Bei dieser Aktion handelt es sich um eine schreibgeschützte Aktion, die Daten in JMP übertragen kann.
Allgemeine Nachrichten für HTTP-Anfrage :
- "Methode"
- „URL“
- „Abfragezeichenfolge“
- "Schicken"

Figur 4. „ HTTP-Anfrage ERHALTEN ”
HTTP-Anfrage ERHALTEN Aktionen werden oft begleitet von a „Abfragezeichenfolge“ um Parameter an eine Webressource zu senden. Abbildung 5 verwendet eine HTTP-Anfrage mit einem „Abfragezeichenfolge“ . In JSL, a „Abfragezeichenfolge“ ist ein Assoziatives Array das einen Schlüssel einem Zeichenwert oder einem zuordnet Aufführen von Zeichenwerten. Wenn das Skript in Abbildung 5 ausgeführt wird, wird die URL automatisch wie folgt erweitert:
http://quotes.rest/qod.json?category=inspire
Abbildung 5. „ HTTP-Anfrage ERHALTEN Verwendung einer ' Abfragezeichenfolge' ”
Verwenden einer HTTP-Anfrage in einer POST-Aktion
HTTP-Anfrage POST Aktionen sind oft komplexer.
Allgemeine Nachrichten für HTTP-Anfrage :
- "Methode"
- „URL“
- "Form"
- „JSON“
- "Datei"
- "Klecks"
- "Schicken"
Abbildung 6 zeigt eine HTTP-Anfrage „ Form" Daten. In JSL, "Form" Daten können zwei Attribute haben: „Felder“ und/oder „Dateien“ . Sie sind beide JSL Assoziative Arrays die einen Schlüssel einem Zeichenwert oder einem zuordnen Aufführen von Zeichenwerten. Im Fall der „Dateien“ , der Zeichenwert oder Aufführen Zeichenwerte sind die Dateinamen, die Sie dem „“ hinzufügen möchten. Form".

Abbildung 6. „ HTTP-Anfrage POST Verwendung einer Form ”
Abbildung 7 zeigt eine HTTP-Anfrage „ JSON“ Daten. In JSL, „JSON“ kann entweder ein sein Assoziatives Array oder Zeichendaten im JSON-Format. Als JSON Expr erstellt ein wohldefiniertes JSON-Objekt zur Verwendung HTTP-Anfrage . JSON-Daten werden als Hauptteil der Anfrage gesendet.
Abbildung 7. „ HTTP-Anfrage POST mit ' JSON' ”
Abbildung 8 zeigt eine HTTP-Anfrage „ Datei" Daten. In JSL, "Datei" ist der Dateiname, den Sie als Hauptteil der Anfrage senden möchten.
Abbildung 8. „ HTTP-Anfrage POST mit ' Datei' ”
Eine letzte Aktion für HTTP-Anfrage „ Klecks" Daten. In JSL, "Klecks" sind binäre Blob-Daten, die Sie als Hauptteil der Anforderung senden möchten. Das bedeutet, dass Sie eine Datei nicht auf die Festplatte schreiben müssen, bevor Sie sie als Teil einer Anfrage senden.
Der ERHALTEN action ist die einfachste Anfrage, die man während des Vorgangs stellen kann POST ist am komplexesten. Die Interaktion zwischen HTTP-Anfrage und die Webressource wird immer vom Server definiert. Obwohl das HTTP-Protokoll ein klar definierter Standard ist, werden die Daten (und Datenstrukturen) für jede Webressource definiert. Das heißt, die API für One Drive unterscheidet sich von der für Dropbox, obwohl sie ähnliche Funktionen ausführen.
Zurück an den Absender
Daten von einem HTTP-Anfrage „ Schicken" Die Nachricht kann je nach Webressource entweder Zeichendaten, binäre Blob-Daten oder leer sein. Überprüfen „ Ist leer" Bei den zurückgegebenen Daten handelt es sich um die gröbste Ebene der Datenuntersuchung (außer keiner). Wenn Sie jedoch eine detaillierte Untersuchung benötigen, können Sie „ Ist String“ um nach Zeichendaten zu suchen.
Für eine noch detailliertere Untersuchung können Sie verwenden „MIME-Typ abrufen“ . Gängige MIME-Typen finden Sie im Unvollständige Liste der MIME-Typen Artikel im Referenzteil des Papiers.
Schließlich können Sie bei Bedarf mithilfe dieser Meldungen Low-Level-HTTP-Statuscodes einer Webressource untersuchen:
„Hat Informationen“
|
100-199
|
"Ist erfolgreich"
|
200-299
|
„Hat Umleitung“
|
300-399
|
„Hat einen Clientfehler“
|
400-499
|
„Hat einen Serverfehler“
|
500-599
|
„Hat einen Fehler“
|
Es liegt entweder ein Client- oder ein Serverfehler vor
|
"Status bekommen"
|
Der HTTP-Statuscode
|
Beschreibungen der HTTP-Statuscodes finden Sie im Statuscode-Definitionen Artikel im Referenzteil des Papiers.
Wo man es verwendet
Obwohl HTTP-Anfrage entweder Zeichendaten oder binäre Blob-Daten von jeder Webressource verarbeiten kann, konzentrieren wir uns auf Zeichendaten von RESTful-Diensten, nämlich JSON-Daten.
Das ist süß
Eines der neuen Datenverwaltungsunternehmen, das auf dem HTTP-Protokollstandard basiert und REST verwendet, ist PubChem. PubChem wurde 2004 als offene Chemiedatenquelle an den National Institutes of Health (NIH) gegründet. Hunderte von Datenquellen von Institutionen wie Universitäten, Pharmaunternehmen, Regierungsbehörden und Chemieanbietern werden jeden Monat zur Aktualisierung der PubChem-Datensätze genutzt. Es handelt sich um die größte Sammlung öffentlich zugänglicher chemischer Informationsquellen.
PubChem unterteilt seine Datenabfragen in Substanzen, Verbindungen und Tests usw. Von dort aus können Sie eine Vielzahl von Eigenschaften, Beschreibungen, Dosen und anderen interessanten Merkmalen abrufen.
Ich habe das als M&M-Zutaten gelesen.
Abbildung 9. „Einfache M&M-Zutaten“
Ich habe ein JSL-Skript geschrieben, das eine JMP-Datentabelle der Zutaten von Plain M&Ms erstellt hat, um zu sehen, was darin enthalten ist. Es war keine Überraschung, dass die Inhaltsstoffe einen hohen Anteil an künstlichen Farbstoffen enthielten.
Eine JMP-Teildatentabellendarstellung sieht folgendermaßen aus:
Abbildung 10. „Datentabelle zu teilweise einfachen M&M-Zutaten“
Wenn das JSL-Skript ausgeführt wird, HTTP-Anfrage wird verwendet, um die Substanz oder das zusammengesetzte Bild sowie andere Eigenschaften abzurufen, die vom RESTful-Dienst von PubChem bereitgestellt werden.
Abbildung 11. „Teilweise reine M&M-Inhaltsstoffdatentabelle mit PubChem-Daten“
Die interessanten RESTful-Dienst-URLs sind:
( [NAME] ist der in den Abbildungen 9 und 10 zu findende Stoff- oder Verbindungsname.)
Um die Bilddaten einer Verbindung wie Laktose abzurufen, muss die HTTP-Anfrage sieht aus wie:
Abbildung 12. „ ERHALTEN -ing das Bild von Laktose von PubChem“

Abbildung 13. „
ERHALTEN -ing und Anzeige des Bildes von Laktose von PubChem“
Die Lactose-Anfrage verwendet den Endpunkt von PubChem für die Verbindung. Hier werden zwei zusätzliche Konzepte verwendet. Das erste ist URI kodieren . Die URI-Kodierung, auch bekannt als Percent Encoding, stellt sicher, dass die RESTful-URL nur ASCII-Zeichen enthält (glücklicherweise ist dies bei Lactose der Fall). Das zweite Konzept ist „MIME-Typ abrufen“ . Die Rückgabe von diesem PubChem-Endpunkt sind binäre Blob-Daten (ein PNG-Bild). Der „MIME-Typ abrufen“ Durch die Überprüfung wird sichergestellt, dass es sich bei dem Blob tatsächlich um ein PNG handelt, bevor es mit „Neues Bild“ verwendet wird, da dieser Endpunkt Zeichendaten zurückgibt, wenn kein PNG gefunden wird.
Um den vollständigen Datensatz von Lactose in JSON-Daten abzurufen, müssen Sie Folgendes tun: HTTP-Anfrage sieht aus wie:

Abbildung 14. „ ERHALTEN -ing die vollständige Aufzeichnung von Laktose von PubChem“
Der von PubChem definierte Endpunkt gibt an, dass der /JSON Das Suffix gibt an, dass der RESTful-Dienst JSON-Daten zurückgeben soll, daher wird der MIME-Typ überprüft "Daten" ist nicht notwendig. Allerdings müssen wir den JSON verarbeiten. Es gibt [mindestens] zwei Möglichkeiten, wie Sie die zurückgegebenen Daten bearbeiten können. Daten" . Die erste ist die Verwendung „JSON zur Datentabelle“ . Dadurch wird versucht, eine JMP-Datentabelle aus zu erstellen "Daten" . Bei rechteckigen oder tabellarischen Daten funktioniert dies gut (und schnell). Allerdings geben nicht alle RESTful-Dienste tabellarische Daten zurück (PubChem ist einer, der dies nicht tut). Die zweite Möglichkeit zur Verarbeitung zurückgegebener Daten ist „JSON analysieren“ . Dadurch wird eine JSL erstellt Assoziatives Array . Das bedeutet, dass Sie den JSON nicht analysieren müssen. Sie müssen jedoch wissen, wie die zurückgegebenen Daten strukturiert sind. Das heißt, Sie müssen wissen, ob es sich um ein Schlüssel/Wert-Paar oder ein Schlüssel/Wert-Paar handelt. Das ist gar nicht so schwierig, wie es scheint, da Sie den rohen JSON-Code im JMP-Protokoll erfassen und mit einem beliebigen JSON-Editor seine Struktur untersuchen können.
Eine Teilanzeige der JSON-Daten für Laktose sieht folgendermaßen aus:
Abbildung 15. „Partielle Laktose-JSON-Daten von PubChem“
Dieser Editor zeigt eine Nebeneinanderdarstellung von Roh-JSON mit dem entsprechenden JSON-Objekt an. Wenn Sie die Daten untersuchen, denken Sie an ein {..} in JSON, JSL Assoziatives Array . Ebenso, wenn Sie auf ein [..] stoßen, denken Sie an JSL Aufführen .
Mit dieser Technik können Sie das in Abbildung 14 gezeigte vollständige Datensatzskript ändern und damit eine JMP-Datentabelle für die Eigenschaften von Laktose erstellen:
Abbildung 16. „ ERHALTEN -die vollständige Aufzeichnung von Laktose von PubChem erstellen und „ Requisiten" eine Datentabelle“
Dieses Beispiel verwendet JSON analysieren um den Roh-JSON von PubChem in eine JSL zu übersetzen Assoziatives Array . Nachdem wir die JSON-Datenstruktur untersucht haben, stellen wir fest, dass wir nur für die „Requisiten“-Daten im Lactose-JSON interessant sind. Wir können dann das bekannte JSL verwenden Assoziatives Array Navigation zum Abrufen der JSL Aufführen gefunden bei „PC_Compounds“. Wir möchten nur das erste Element in der Liste (da die meisten „ Requisiten" werden wiederholt)
"Requisiten" Daten sind eine JSL Assoziatives Array damit wir es nutzen können Als JSON Expr übersetzen "Requisiten" zurück zu JSON und verwenden Sie es in JSON zu Datentabelle . Das Ergebnis ist in Abbildung 17 dargestellt.
Abbildung 17. „Datentabelle zu Eigenschaften von partieller Laktose“
Erinnern, HTTP-Anfrage ist nur ein Klebstoff, der Webressourcen an JSL bindet. Sobald Sie Ihre Daten in JSL eingegeben haben, können Sie sie je nach Bedarf so einfach oder komplex verwenden.
Etwas zum Staunen
Im Jahr 2014 hat Marvel Comics einen RESTful-Dienst erstellt, der Benutzern den Zugriff auf Comic-Informationen aus 70 Jahren ermöglicht. Die Marvel Comics API ist nur durch die Vorstellungskraft des Drehbuchautors begrenzt, also musste ich mich natürlich für einen Schlüssel registrieren und darauf tippen, um zu sehen, was ich finden konnte. Ich habe ein geschrieben Wunder:API JSL-Funktion, die verschiedene Spalten verwendet, die das Marvel-Universum durchsuchen.
Als Deadpool-Fan kam ich mit einer ersten Anfrage, die diese Datentabelle erstellte:
Abbildung 18. „Teilweise Deadpool-Datentabelle.“
Dadurch wurden 4 verschiedene Deadpool-Charaktere im Marvel-Comics-Universum entlarvt. Ich interessierte mich für die Identität des ersten Charakters und wählte ihn aus Serie Click-Event-Handler, den ich erstellt habe. Angesichts des Ursprungs des Klicks, der Wunder:API Die Funktion kann eine neue Abfrage an Marvel generieren, wobei der Rückgabewert zeigt, wo Deadpool in der MCU übergeht. Ich habe die Ergebnisse auf 50 Zeilen beschränkt; Allerdings konnte ich einige interessante Ergebnisse entdecken. Ich habe eine kurze Verteilungsanalyse zu „ Titel" Und „startYear“ nur um zu sehen, wann Deadpools Popularität stieg und sank (und wieder stieg).

Abbildung 19. „Teilweise Deadpool-Verteilung.“
Abbildung 19 zeigt, dass Deadpool 2007 in viele verschiedene Marvel-Comic-Titel überging, darunter:
- Avengers: Die Initiative (2007–2010)
- Kabel & Deadpool
- Bürgerkrieg: X-Men-Universum.
Das Interesse an Deadpool ließ nach 2007 wieder nach, nahm aber (wie aus der Analyse hervorgeht) wieder zu, nachdem Ryan Reynolds die Figur zum ersten Mal in X-Men Origins: Wolverine (2009) spielte, sodass das Interesse an der Figur erneut anstieg und 2011 einen Höhepunkt erreichte.
In den Jahren 2012–2015 explodiert das Marvel-Comic-Universum in „Deadpool Kills the Marvel Universe“ für einen Marvel-Neustart.
Schließlich gibt es für 2016–2018 keine Überraschung. Damals kamen die Filme heraus.
Peter von Deadpool 2 fasst die Marvel Comics API am besten zusammen: „Ich habe gerade die Anzeige gesehen und fand sie lustig.“
Verwendete Konventionen
Der Begriff RESTful-Dienst wird verwendet, wenn die Webressource REST-basiert ist
Der Begriff „Webressource“ ist ein allgemeiner Begriff, der verwendet wird, wenn allgemeiner Webzugriff impliziert wird.
HTTP-Aktionen sind fett gedruckt
Schaltflächen/Dialogsteuerelemente sind „ zitiert und fett“
Hyperlinks sind unterstrichen
JSL-Objekte und -Funktionen sind kursiv geschrieben
JSL-Variablen/Spalten/Nachrichtennamen sind „ zitiert und kursiv geschrieben ”
Verweise
Hawk, Sandro (2011, 16. Dezember) AUSRUHEN abgerufen von https://www.w3.org/2001/sw/wiki/REST
W3.org Methodendefinitionen abgerufen von https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
W3.org Statuscode-Definitionen abgerufen https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Mozilla.org (2018, 13. Mai) HTTP-Anfragemethoden abgerufen von https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
JSON.org (2017, Dezember) Einführung von JSON abgerufen von https://www.json.org
JMP.com (2018, 12. Juli) Listen abgerufen von https://www.jmp.com/support/help/14/lists.shtml
JMP.com (2018, 12. Juli) Arbeiten Sie mit assoziativen Arrays abgerufen von https://www.jmp.com/support/help/14/work-with-associative-arrays.shtml
CURL-Befehlszeilentool und Bibliothek zum Übertragen von Daten mit URLs abgerufen von https://curl.haxx.se/
W3.org (2015, 22. Januar) Das Web sichern abgerufen von https://www.w3.org/2001/tag/doc/web-https
W3.org (2014, 11. Juni) HTTP – Hypertext Transfer Protocol abgerufen von https://www.w3.org/Protocols/
Mozilla.org (2018, 3. Juli) Unvollständige Liste der MIME-Typen abgerufen von https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types
PubChem.ncbi.nlm.nih.gov Über PubChem abgerufen von https://pubchemdocs.ncbi.nlm.nih.gov/
MMs.com Zutaten abgerufen von http://www.mms.com/us/nutrition
W3Schools.com Referenz zur HTML-URL-Kodierung abgerufen von https://www.w3schools.com/tags/ref_urlencode.asp
Developer.marvel.com Entwicklerportal abgerufen von https://developer.marvel.com/