English Русский Español 日本語 Português
preview
Developing an MQL5 Reinforcement Learning agent with RestAPI integration (Part 1): How to use RestAPIs in MQL5

Developing an MQL5 Reinforcement Learning agent with RestAPI integration (Part 1): How to use RestAPIs in MQL5

MetaTrader 5Integration | 16 Mai 2024, 11:17
72 0
Jonathan Pereira
Jonathan Pereira

Einführung

Bei der Programmierung und Systementwicklung ist die Kommunikation zwischen verschiedenen Anwendungen von entscheidender Bedeutung. APIs (Application Programming Interfaces) spielen in diesem Zusammenhang eine wichtige Rolle, da sie es Systemen ermöglichen, effizient zu kommunizieren und Daten auszutauschen. In diesem Artikel geht es speziell um RestAPI, das die Art und Weise, wie Systeme im Web interagieren, verändert hat.

RestAPI (Representational State Transfer Application Programming Interface) legen eine Reihe von Regeln fest, wie Systeme im Internet kommunizieren sollten. Es basiert auf einfachen und skalierbaren Architekturprinzipien und verwendet Konzepte wie Ressourcen und Bezeichner zur Verwaltung von Daten. Eigentlich handelt es sich um eine Kommunikationsmethode, die es Anwendungen ermöglicht, Informationen auf organisierte Weise anzufordern und zu senden.

Die REST-Architektur entstand in den 2000er Jahren dank eines Artikels von Roy Fielding, der die Grundsätze für den Aufbau zuverlässiger und skalierbarer Websysteme darlegte. Seitdem haben RestAPIs stark an Popularität gewonnen. Dies ist auf ihre Einfachheit im Vergleich zu früheren Protokollen wie SOAP (Simple Object Access Protocol) zurückzuführen.

SOAP, das auf XML basiert, war sehr beliebt, aber es war bekannt, dass es komplex ist und große Datenmengen für einfache Transaktionen benötigt. RestAPIs haben das Spiel erheblich verändert, indem sie zu einer einfacheren und vielseitigeren Alternative für die Kommunikation von System zu System wurden.

RestAPIs sind vielseitig und werden in verschiedenen Systemen und Anwendungen eingesetzt. Seine Einfachheit und die Einhaltung der REST-Prinzipien ermöglichen die Schaffung skalierbarer, integrierbarer und leicht zu wartender Systeme. Sie sind in verschiedenen Branchen weit verbreitet, auch im Finanzbereich.

Wenn man sie mit dem SOAP-Protokoll vergleicht, wird klar, warum RestAPIs eine starke Position erlangt haben. Während SOAP unflexibel und umständlich war, sind RestAPIs leichtgewichtig, einfach zu verwenden und ideal für moderne Systeme, die eine effiziente Kommunikation benötigen. Außerdem können sie in fast jeder Programmiersprache implementiert werden, was sie zu einer idealen Wahl für Entwickler auf der ganzen Welt macht.


Was ist eine API?

Was ist eine Api?


In einer zunehmend digitalen Welt ist der Begriff „API“ weit verbreitet, aber was genau bedeutet er? Die Abkürzung „API“ steht für „Application Programming Interface“. Sie ist ein grundlegendes Konzept in der Softwareentwicklung und Systemintegration.

Im Wesentlichen ist eine API ein Satz von Regeln und Protokollen, die es verschiedenen Programmen ermöglichen, miteinander zu kommunizieren. Es fungiert als Brücke, die es einem Programm ermöglicht, die Funktionalität eines anderen zu nutzen, ohne alle internen Details dieses Programms verstehen zu müssen. APIs sind für die Erstellung von Anwendungen unverzichtbar, da sie es Entwicklern ermöglichen, Ressourcen Dritter oder sogar interne Systeme zu nutzen.

Schauen wir uns die wichtigsten Aspekte der API an:

1.Kommunikation zwischen Anwendungen:

Eine der wichtigsten Funktionen einer API ist die Erleichterung der Kommunikation zwischen verschiedenen Anwendungen oder Systemen. Stellen Sie sich vor, Sie entwickeln eine Wettervorhersage-App und möchten diese mit einer Echtzeit-Wettervorhersage versehen. Anstatt ein komplettes Wettervorhersagesystem von Grund auf zu entwickeln, können Sie die API eines bestehenden Wetterdienstes nutzen. Die API bietet eine Reihe von Anweisungen und Methoden, mit denen Ihre Anwendung aktuelle Wetterdaten abrufen kann.

2. Abstraktion der Komplexität:

APIs ermöglichen es Ihnen, die dem System zugrunde liegende Komplexität zu abstrahieren. Das bedeutet, dass Sie bei der Verwendung einer API nicht alle technischen Details des Systems oder Dienstes verstehen müssen, mit dem Sie interagieren. Sie müssen nur wissen, wie Sie die API nutzen können. Dies macht die Entwicklung effizienter und ermöglicht es den Entwicklern, sich auf ihre Aufgaben zu konzentrieren, anstatt das Rad jedes Mal neu zu erfinden.

3. API-Typen:

Wie bereits erwähnt, gibt es mehrere Arten von APIs. Web-APIs sind im Internet weit verbreitet und beruhen auf Webprotokollen wie HTTP. Lokale APIs ermöglichen den Zugriff auf Ressourcen des Betriebssystems oder der Middleware. Programm-APIs werden für den Zugriff auf entfernte Programmkomponenten verwendet. Es gibt verschiedene Technologien und Standards, um sie zu implementieren, z. B. gRPC und REST. RESTful APIs folgen den Grundsätzen von REST, während SOAP APIs XML-basiert und komplexer sind. Die GraphQL-API ist beispielsweise bekannt für ihre Flexibilität bei der Abfrage spezifischer Daten durch Kunden.

4. Beispiele aus der Praxis:

Schauen wir uns einige Beispiele aus der Praxis an, um zu verstehen, wie die APIs verwendet werden. Soziale Netzwerke wie Facebook oder Twitter bieten APIs an, die es Entwicklern ermöglichen, Funktionen zum Teilen von Inhalten oder zur Authentifizierung in ihre eigenen Anwendungen zu integrieren. Zahlungsdienste wie PayPal bieten APIs an, die finanzielle Transaktionen ermöglichen. Sogar einige Kartendienste wie Google Maps verfügen über APIs, mit denen interaktive Karten in Anwendungen integriert werden können.

5. Sicherheit und Authentifizierung:

APIs enthalten oft Sicherheitsmechanismen, um sicherzustellen, dass nur autorisierte Anwendungen auf Ressourcen zugreifen können. Dies kann die Generierung von API-Schlüsseln, Token-Authentifizierung oder andere Methoden zum Schutz sensibler Daten umfassen.


Was ist RestAPI?

Api-Diagramm


Bevor wir die Welt der RestAPIs betreten haben, kommunizierten Softwaresysteme in der Regel über strengere und kompliziertere Protokolle. Die Kommunikation zwischen den Systemen war nicht so flüssig, was den Austausch von Informationen zwischen verschiedenen Anwendungen zu einer schwierigen Aufgabe machte.
Dann kam die Ära von REST, die einen revolutionären Ansatz für die Kommunikation zwischen Systemen mit sich brachte. REST steht für Representational State Transfer und wurde erstmals im Jahr 2000 von Roy Fielding eingeführt. Dieser innovative Ansatz für die Softwarearchitektur wurde zur Grundlage von RestAPI. REST definiert eine Reihe von Grundsätzen für die Interaktion von Systemen, einschließlich der Verwendung von URLs (Uniform Resource Locators) zur Identifizierung von Ressourcen und HTTP-Methoden zur Interaktion mit ihnen.

RestAPIs spielen eine grundlegende Rolle bei der Kommunikation von Anwendungen und Systemen im digitalen Zeitalter. Sie ermöglichen es einem System, Informationen oder Aktionen von einem anderen System anzufordern, wodurch der Datenaustausch und die Abläufe effizienter und flexibler werden.
Lassen Sie uns ein einfaches Beispiel betrachten. Angenommen, Sie verwenden eine Wettervorhersage-App auf Ihrem Smartphone. Diese App sollte Ihnen die neuesten Informationen über Temperatur und Wetterbedingungen an Ihrem aktuellen Standort anzeigen. Er generiert diese Informationen jedoch nicht selbst, sondern erhält sie von einem entfernten Server, der Wetterinformationen aus verschiedenen Quellen sammelt.

Hier ist die RestAPI hilfreich. Wenn wir die Wetter-App öffnen, sendet sie über RestAPI eine Anfrage an den Remote-Server. Diese Anfrage, normalerweise eine GET-Anfrage, fragt Informationen über die Wetterbedingungen an Ihrem Standort ab. Der Server verarbeitet die Anfrage und erstellt eine Antwort, normalerweise im JSON- oder XML-Format, mit den angeforderten Wetterdaten. Die Anwendung verwendet diese Daten dann, um sie in der entsprechenden Schnittstelle anzuzeigen. Was RestAPIs so leistungsfähig macht, ist die Standardisierung der Interaktion. Systeme können zuverlässig kommunizieren, d. h. sie wissen, dass Informationen zuverlässig übertragen werden, wenn sie die REST-Grundsätze befolgen.

Anwendungsbeispiele:

In Anwendungen der sozialen Medien. Wenn Sie ein Foto auf Ihre bevorzugte soziale Plattform hochladen, kümmert sich RestAPI um die Übertragung der Daten an den Server und macht das Foto dann für andere Nutzer verfügbar. Diese Interaktion basiert auf Anfragen und Antworten über RestAPI.



Hauptunterschiede zwischen API und REST API

Die API vereinfacht die Integration zahlreicher Anwendungen, indem sie leicht zugänglichen Code und Informationskanäle bereitstellt, die Entwicklern helfen, robuste digitale Lösungen zu entwickeln. Die API fungiert als Vermittler zwischen Anwendungen und erleichtert die Interaktion zwischen ihnen. Aufgrund der unterschiedlichen Anwendungsarchitekturen können APIs jedoch von verschiedenen Typen sein, wie z. B. programmatische, lokale, Web- oder REST-APIs.

Die API ermöglicht es, Computer oder Computerprogramme zu verbinden. Im Grunde handelt es sich um eine Softwareschnittstelle, die anderen Programmen Dienste zur Verfügung stellt, um die erforderliche Funktionalität zu verbessern. In den letzten Jahren sind APIs auf dem Markt immer beliebter geworden, da fast alle Webanwendungen sie verwenden. Wenn Sie zum Beispiel auf Ihrem Smartphone das Wetter abfragen oder ein Reiseticket buchen, wird im Hintergrund eine API aufgerufen.

Da APIs es Unternehmen ermöglichen, die Daten und Funktionen ihrer Anwendungen für externe Entwickler von Drittanbietern zu öffnen, führt dies letztendlich zu Geschäftspartnerschaften und damit zu höheren Einnahmen.


Arten von API

API-Web

  1. Webbasierte Architektur, die im Wesentlichen dem REST-Stil folgt.
  2. Kommunikation über das HTTP-Protokoll.
  3. Es kann verwendet werden, um Ressourcen und Dienste über das Internet bereitzustellen.


API-Lokal

  1. Spezifische Architektur für den Zugriff auf lokale Dienste oder Systemressourcen.
  2. Sie kann Zugang zu Betriebssystem- oder Middleware-Ressourcen bieten.
  3. Sie kann auf verschiedenen Betriebssystemen verfügbar sein und ist nicht auf eine bestimmte Plattform beschränkt.
Programm-API
  1. Basiert auf der Remote Procedure Calling (RPC)-Technologie und umfasst Varianten wie gRPC, JSON-RPC und andere.
  2. Sie ermöglicht den Zugriff auf entfernte Softwarekomponenten, als ob sie lokal wären, und erleichtert die Kommunikation zwischen verteilten Systemen.
  3. Für die Implementierung von Programm-APIs gibt es verschiedene Technologien und Standards.
RESTful-API
  1. RESTful-Architektur auf der Grundlage der REST-Prinzipien, einschließlich Ressourcen, HTTP-Methoden und Datendarstellung.
  2. Es verwendet Standard-HTTP-Methoden (GET, POST, PUT, DELETE), um Operationen mit Ressourcen durchzuführen.
  3. Gibt normalerweise Daten im JSON- oder XML-Format zurück.
API SOAP
  1. Basiert auf XML und folgt dem Simple Object Access Protocol (SOAP).
  2. Bietet hochgradig konforme Dienste mit erweiterten Funktionen wie Sicherheit und Transaktionen.
  3. Komplexer als RESTful APIs.

API GraphQL

  1. Verwendet eine flexible Abfragesprache, die es den Kunden ermöglicht, nur die Daten anzufordern, die sie benötigen.
  2. Sie ermöglicht es den Kunden, die Struktur der gewünschten Antworten zu spezifizieren, was sie in modernen Anwendungen beliebt macht.
  3. Sie folgt nicht unbedingt einer RESTful- oder SOAP-Architektur und ist flexibler in Bezug auf Abfragen.


Protokolle und API-Architektur

  1. XML-RPC: Dieses Protokoll wurde für den Informationsaustausch zwischen zwei oder mehreren Netzen entwickelt. Der Client führt RPC durch, indem er XML zur Kodierung seiner Aufrufe und HTTP-Anfragen zur Datenübertragung verwendet.

  1. JSON-RPC: Eine leichtgewichtige JSON-kodierte RPC, ähnlich wie XML-RPC, die mehrere Benachrichtigungen und Serveraufrufe ermöglicht, auf die asynchron geantwortet werden kann.

  2. SOAP: Ein Web-API-Protokoll für den Austausch strukturierter Informationen. Es verwendet XML zur Authentifizierung, Autorisierung und Kommunikation zwischen Prozessen, die auf Betriebssystemen laufen. Da Webprotokolle wie HTTP auf den meisten Betriebssystemen laufen, ermöglicht SOAP den Clients, Webdienste aufzurufen und Antworten unabhängig von der verwendeten Sprache und Plattform zu erhalten.

  3. REST: Ein Architekturstil für die Bereitstellung von Standards zwischen Systemen im Internet. Da es sich nicht um ein Protokoll, eine Bibliothek oder ein Werkzeug handelt, erleichtert es die Kommunikation zwischen Systemen. Die REST-Architektur macht die Client- und Server-Implementierungen unabhängig, ohne die Funktionsweise des jeweils anderen zu beeinträchtigen.


Verständnis für den Bedarf an einer API


  1. Die Automatisierung beschleunigt API-Tests und steigert so die Effizienz. APIs verbinden nicht nur die digitale Welt mit ihrer Dynamik, sondern ermöglichen es Unternehmen auch, durch die Automatisierung von Arbeitsabläufen agiler zu werden.

  2. Die Integration von Plattformen und Anwendungen kann über APIs realisiert werden, sodass Sie die Vorteile einer kontinuierlichen Kommunikation nutzen können. Ohne APIs fehlte es den Unternehmen an Konnektivität, was die Produktivität und Leistung entsprechend verringerte. Durch die Systemintegration können Sie Daten verschieben und so Ihre Arbeitsabläufe automatisieren und die Zusammenarbeit bei der Arbeit verbessern.

  3. Die Effizienz steigt, je weniger der Mensch eingreift. Durch die Bereitstellung des Zugangs zu APIs wird die Duplizierung von Inhalten vermieden, was den Unternehmen mehr Flexibilität verschafft, sodass sie mehr Zeit für hochwertige Innovationen aufwenden können.

  4. Die Sicherheit ist ein zusätzlicher Vorteil, da die API eine zusätzliche Sicherheitsebene zwischen Ihren Daten und dem Server schafft. Entwickler können die Sicherheit mit Token, Signaturen und Transport Layer Security (TLS)-Verschlüsselung weiter erhöhen.


Einführung in die REST-API:


REST API ist ein Softwarearchitekturmodell, das die Regeln und Standards für die Interaktion zwischen Anwendungen und Diensten im Internet festlegt. Wenn eine API strikt den Grundsätzen der REST-Architektur folgt, wird sie oft als RESTful API bezeichnet.

Einer der Hauptvorteile der RESTful API ist ihr flexibler Ansatz für den Zugriff auf Webdienste. Dies liegt daran, dass sie Standard-HTTP-Protokolle und -Methoden (wie GET, POST, PUT und DELETE) verwenden, um Operationen mit den durch URLs dargestellten Ressourcen durchzuführen. Diese Einfachheit des Designs macht die Interaktion mit Webdiensten zugänglicher, selbst auf Geräten oder in Umgebungen mit begrenzten Computerressourcen.


REST-Architektur

  1. Nicht-Stationarität: Systeme, die nach dem REST-Paradigma arbeiten, müssen nicht-stationär sein. Bei der Kommunikation zwischen einem Client und einem Server macht die zustandslose Beschränkung die Server immun gegen den Zustand des Clients und umgekehrt. Einschränkungen werden mit Hilfe von Ressourcen anstelle von Befehlen angewendet. Sie sind Web-Substantive, die jedes Objekt, Dokument oder Ding beschreiben, das gespeichert/an andere Ressourcen gesendet werden kann.

  2. Cache-Kompatibilität. Die Zwischenspeicherung hilft den Servern, einige der Einschränkungen zu mildern, die damit verbunden sind, dass sie nicht statisch sind. Dies ist ein entscheidender Faktor, der die Leistung moderner Webanwendungen verbessert. Die Zwischenspeicherung verbessert nicht nur die Leistung auf der Client-Seite, sondern bringt auch erhebliche Vorteile auf der Server-Seite. Ein gut funktionierender Caching-Mechanismus wird die durchschnittliche Antwortzeit unseres Servers erheblich reduzieren.

  3. Verteilte Natur. REST verwendet einen verteilten Ansatz, bei dem Client- und Serveranwendungen voneinander getrennt sind. Unabhängig davon, wo die Anfragen gestartet werden, ist die einzige Information, die der Client-Anwendung bekannt ist, der URI (Uniform Resource Identifier) der angeforderten Ressource. Die Server-Anwendung sollte die angeforderten Daten über HTTP übermitteln, aber nicht versuchen, die Client-Anwendung zu ändern.

  4. Mehrschichtig. Das mehrschichtige System macht die REST-Architektur skalierbar. In einer RESTful-Architektur sind Client- und Serveranwendungen getrennt, sodass REST-API-Aufrufe und -Antworten verschiedene Schichten durchlaufen. Da die REST-API mehrschichtig ist, muss sie so konzipiert sein, dass weder der Client noch der Server ihre Interaktion mit den End- oder Zwischenanwendungen erkennen kann.


Die wichtigsten Vorteile von REST API

  1. Die REST-API reagiert flexibel auf verschiedene Arten von Aufrufen, gibt z. B. verschiedene Datenformate zurück und ändert sich strukturell mit der richtigen Implementierung von Hypermedia. Dadurch können Nutzer bidirektional mit Clients und Servern interagieren, auch wenn sie sich auf verschiedenen Servern befinden.

  2. Die REST-API passt sich allen Änderungen an den in der Datenbank gespeicherten Daten an, auch wenn sie sich auf verschiedenen internen und externen Servern befinden. Da es bis zu einem gewissen Grad auf Code beruht, hilft es bei der Synchronisierung von Daten zwischen verschiedenen Standorten.

  3. Der Datenfluss verwendet HTTP-Methoden (GET, POST, PUT oder DELETE) für die Kommunikation, diese Methoden sind selbsterklärend. Darüber hinaus trägt die REST-Architektur dazu bei, die Produktivität der Entwickler zu verbessern, da sie Informationen auf der Client-Seite anzeigen und Daten auf der Server-Seite speichern oder bearbeiten können.


API vs. REST API

  1. Struktur. Während die meisten APIs strukturell einem Anwendung-zu-Anwendung-Format folgen, arbeiten REST-APIs strikt nach einem webbasierten Client- und Serverkonzept. Der Client und der Server sind voneinander getrennt, was eine größere Flexibilität ermöglicht.

  2. Entwurf. APIs sind in der Regel leichtgewichtige Architekturen, die für begrenzte Geräte konzipiert sind. Im Gegensatz dazu interagieren REST-APIs auf der Ebene der einzelnen Systeme, was ihre Architektur komplexer macht.

  3. Protokoll. Der Hauptzweck der API ist die Standardisierung des Datenaustauschs zwischen Webdiensten. Je nach Art der API ist die Wahl des Protokolls unterschiedlich. Andererseits ist REST API ein architektonischer Stil zur Erstellung von Webdiensten, die über HTTP kommunizieren. Obwohl die REST-API bereits im Jahr 2000 von dem Informatiker Roy Fielding formuliert wurde, ist sie nach wie vor der Goldstandard für öffentliche APIs.

  4. Unterstützung. Die meisten APIs sind einfach zu implementieren, da sie nicht zustandslos sind. Die REST-API wiederum wird auch dann ausgeführt, wenn der Nutzer die Namen der Funktionen und Parameter nicht in einer bestimmten Reihenfolge kennt.

  5. Vereinheitlichte Schnittstelle. Nicht viele APIs trennen Client und Server oder eine Anwendung von einer anderen. Die REST-API hält sich an die Grundsätze einer einzigen Schnittstelle und verbietet die Verwendung mehrerer oder getrennter Schnittstellen innerhalb einer API. Hypermedia-Verbindungen sollten idealerweise für die Verteilung einer einzigen Schnittstelle verwendet werden. Damit soll auch sichergestellt werden, dass ähnliche Daten (z. B. Nutzername oder E-Mail) nur zu einem URI gehören. Infolgedessen müssen alle API-Anfragen für dieselben Ressourcen unabhängig von der ursprünglichen Anfrage gleich aussehen

  6. Skalierbarkeit. Während die Skalierbarkeit ein Problem für generische APIs ist, hat die REST-API eine mehrschichtige Struktur, wodurch sie modular und flexibler ist, um Skalierbarkeit zu erreichen.


Beispiele: Verwendung der WebRequest-Funktion in MQL5

Jetzt, wo wir die Welt der APIs und REST-APIs betreten haben, sind Sie wahrscheinlich neugierig: „Wie passt MQL5 in diese Geschichte?“ Es ist also an der Zeit, dass wir die Ärmel hochkrempeln und mit praktischen Beispielen in MQL5 arbeiten. Schließlich gibt es nichts Besseres als ein gutes praktisches Beispiel.

Um die Beispiele vollständiger und interessanter zu machen, werden wir mit jsonplaceholder.typicode.com arbeiten. Wir werden auch einige Endpunkte von Coinbase hinzufügen.

Die Idee ist einfach: Beginnen wir mit grundlegenden CRUD-Operationen unter Verwendung von jsonplaceholder, da dies zum Verständnis der Grundlagen und zum Testen hervorragend geeignet ist. Aber dann werden wir es auf ein höheres Niveau bringen und dieses Wissen auf ein komplexeres und anspruchsvolleres Szenario der Coinbase API anwenden. Es bietet alles: Kurse, historische Daten und sogar die Möglichkeit, in die Welt des Handels einzusteigen. Es hängt alles davon ab, auf welche Endpunkte wir zugreifen.

Beginnen wir mit CRUD-Operationen.

Neuer Post - POST

int CreateNewPost(string title, string body, int userId)
  {
   uchar result[];
   string result_headers;
   string url = "https://jsonplaceholder.typicode.com/posts";

   char post_data[];
   StringToCharArray(StringFormat("{\"title\": \"%s\", \"body\": \"%s\", \"userId\": %d}", title, body, userId), post_data);

   string headers = "Content-Type: application/json\r\n";
   int timeout = 5000;

   int res = WebRequest("POST", url, headers, timeout, post_data, result, result_headers);

   if(res > 0)
     {
      Print("Post created successfully.");
     }
   else
     {
      Print("Error: Failed to create post.");
     }

   return -1;
  }

Post aktualisieren - PUT

bool UpdatePost(int postId, string newTitle, string newBody)
  {
   uchar result[];
   string result_headers;
   string url = StringFormat("https://jsonplaceholder.typicode.com/posts/%d", postId);

   char put_data[]; // Declare post_data as char[]
   StringToCharArray(StringFormat("{\"title\": \"%s\", \"body\": \"%s\"}", newTitle, newBody), put_data);

   string headers = "Content-Type: application/json\r\n"; // Declare headers as char[]
   int timeout = 5000;

   int res = WebRequest("PUT", url, headers, timeout, put_data, result, result_headers);

   if(res > 0)
     {
      Print("Post updated successfully.");
      return true;
     }
   else
     {
      Print("Error: Failed to update post.");
      return false;
     }
  }

Post löschen - DELETE

bool DeletePost(int postId)
  {
   char data[];
   uchar result[];
   string result_headers;
   string url = StringFormat("https://jsonplaceholder.typicode.com/posts/%d", postId);
   int timeout = 5000;

   int res = WebRequest("DELETE", url, NULL, timeout, data, result, result_headers);

   if(res > 0)
     {
      Print("Post deleted successfully.");
      return true;
     }
   else
     {
      Print("Error: Failed to delete post.");
      return false;
     }
  }

Post holen - GET

string GetPostById(int postId)
  {
   char data[];
   uchar result[];
   string result_headers;
   string url = StringFormat("https://jsonplaceholder.typicode.com/posts/%d", postId);
   int timeout = 5000;

   int res = WebRequest("GET", url, NULL, timeout, data, result, result_headers);

   if(res > 0)
     {
      CJAVal jv;
      if(jv.Deserialize(result))
        {
         string postTitle = jv["title"].ToStr();
         Print("Post title: ", postTitle);
         return postTitle;
        }
      else
        {
         Print("Error: Unable to parse the response.");
        }
     }
   else
     {
      Print("Error: Failed to fetch post.");
     }

   return "";
  }

 

Stellen Sie sich vor, Sie möchten den aktuellen Bitcoin-Kurs überprüfen (wer möchte das nicht?). Neben dem allgemeinen Preis können Sie sich auch für den Geld-, Brief- und Kassakurs von BTC interessieren. Um diese Informationen über die API zu erhalten, verwenden wir die Funktion WebRequest in MQL5:

string GetBitcoinPrice(string priceType)
  {
   char data[];
   uchar result[];
   string result_headers;

   string baseURL = "https://api.coinbase.com/v2/prices/";
   if(priceType == "buy")
      baseURL += "buy";
   else
      if(priceType == "sell")
         baseURL += "sell";
      else
         baseURL += "spot";

   string url = baseURL + "?currency=USD";
   char headers[];
   int timeout = 5000;
   int res;

   Print("Fetching Bitcoin price for type: ", priceType);
   res = WebRequest("GET", url, NULL, NULL, timeout, data, 0, result, result_headers);

   string price = "";
   if(res > 0)
     {
      Print("Response received from Coinbase API"); 

      CJAVal jv;
      if(jv.Deserialize(result))
        {
         price = jv["data"]["amount"].ToStr();
         Print("Price fetched: ", price);
        }
      else
        {
         Print("Error: Unable to parse the response.");
        }
     }
   else
     {
      Print("Error: No response from Coinbase API or an error occurred.");
     }

   return price;
  }


Wir können auch alle Währungen auflisten. 

string GetAvailableCurrencies()
  {
   char data[];
   uchar result[];
   string result_headers;
   string url = "https://api.coinbase.com/v2/currencies";
   char headers[];
   int timeout = 5000;
   int res;

   Print("Fetching list of available currencies from Coinbase API");
   res = WebRequest("GET", url, NULL, NULL, timeout, data, 0, result, result_headers);

   string currencies = "";
   if(res > 0)
     {
      Print("Response received from Coinbase API");

      CJAVal jv;
      if(jv.Deserialize(result))
        {
         // Considerando que a resposta é uma lista de moedas
         for(int i = 0; i < jv["data"].Size(); i++)
           {
            currencies += "Currency: " + jv["data"][i]["id"].ToStr();
            currencies += ", Name: " + jv["data"][i]["name"].ToStr();
            currencies += ", Min Size: " + jv["data"][i]["min_size"].ToStr();
            currencies += "\n";
           }
         Print(currencies);
        }
      else
        {
         Print("Error: Unable to parse the response.");
        }
     }
   else
     {
      Print("Error: No response from Coinbase API or an error occurred.");
     }

   return currencies;
  }


Nachdem wir nun alle erstellten Funktionen gesehen haben, können wir sie ausführen und das Ergebnis sehen.

#include "libraries/RESTFunctions.mqh"

int OnStart()
  {
//--- CRUD Operations on Posts ---//

// 1. Create a new post
   int userId = 1; // exemplo de userID, você pode ajustar conforme necessário
   string title = "Exemplo de Título";
   string body = "Este é o conteúdo do post para demonstração.";
   int newPostId = CreateNewPost(title, body, userId);
   if(newPostId != -1)
      Print("New Post ID: ", newPostId);

// 2. Update the created post
   string updatedTitle = "Título Atualizado";
   string updatedBody = "Conteúdo do post atualizado.";
   if(UpdatePost(newPostId, updatedTitle, updatedBody))
      Print("Post atualizado com sucesso.");

// 3. Get the updated post
   string fetchedTitle = GetPostById(newPostId);
   if(StringLen(fetchedTitle) > 0)
      Print("Título do Post Obtido: ", fetchedTitle);

// 4. Delete the post
   if(DeletePost(newPostId))
      Print("Post excluído com sucesso.");

//--- Coinbase Operations ---//

   const string buyPrice = GetBitcoinPrice("buy");
   const string sellPrice = GetBitcoinPrice("sell");
   const string spotPrice = GetBitcoinPrice("spot");

   Print("Buy Price: ", buyPrice);
   Print("Sell Price: ", sellPrice);
   Print("Spot Price: ", spotPrice);

   const string currencies = GetAvailableCurrencies();
   Print("Available Currencies: ", currencies);

//---
   return(INIT_SUCCEEDED);
  }

Daraus ergibt sich folgendes Bild:




Schlussfolgerung:

Kurz gesagt, APIs spielen eine grundlegende Rolle in der Welt der Programmierung und Systementwicklung, da sie es ermöglichen, dass verschiedene Anwendungen und Systeme effizient und flexibel miteinander kommunizieren können. RestAPIs, die auf der REST-Architektur basieren, haben sich zu einer beliebten Wahl entwickelt, da sie im Vergleich zu älteren Protokollen wie SOAP eine größere Einfachheit und Vielseitigkeit bieten. Sie sind in verschiedenen Bereichen weit verbreitet, auch im Finanzwesen, da sie die Schaffung skalierbarer, integrierter und leicht zu wartender Systeme ermöglichen.

APIs werden benötigt, um die Kommunikation zwischen verschiedenen Anwendungen zu erleichtern, die zugrundeliegende Komplexität zu abstrahieren und den Entwicklern die Nutzung von Ressourcen Dritter zu ermöglichen. Es gibt verschiedene Arten wie Web API, Local, Programmatic, RESTful, SOAP und GraphQL, jede mit ihren eigenen Merkmalen und Verwendungszwecken.

Die REST-API wiederum folgt einer Reihe von Architekturprinzipien, die sie flexibel, anpassungsfähig und leicht verständlich machen. Die REST-API eignet sich besonders für die Webkommunikation, verwendet das HTTP-Protokoll für die Durchführung von Operationen mit Ressourcen und liefert häufig Daten im JSON- oder XML-Format.

Wenn wir APIs mit REST-APIs vergleichen, können wir feststellen, dass REST-APIs eine strengere Struktur haben, den Client vom Server trennen und hauptsächlich in einem Web-Kontext funktionieren. Beide halten sich an eine einzige Schnittstelle und fördern dank einer mehrstufigen Struktur die Skalierbarkeit.

Schließlich können wir durch die Anwendung dieser Konzepte auf praktische Beispiele mit MQL5 verstehen, wie APIs in der realen Welt verwendet werden, von grundlegenden CRUD-Operationen bis zum Abrufen von Finanzdaten mit der Coinbase-API.

Nun, Leute, wir sind am Ende dieses Gesprächs über APIs, REST, MQL5 und alles andere angelangt. Bitte beachten Sie, dass alles, was hier gesagt wurde, das Ergebnis meiner professionellen Vision ist: immer mit Liebe zum Detail - denn man weiß nie, wann ein Fehler aus dem Nichts auftauchen kann! 

Es ist wichtig, daran zu denken, dass sich in der Welt der Technologie die Dinge schnell ändern können, daher ist es immer eine gute Idee, sich über die neuesten Trends und Updates zu informieren. Und natürlich kann es nie schaden, zu überprüfen, ob alles so funktioniert, wie es soll.

Ich hoffe, dieser Vortrag war für Sie nützlich und lehrreich. Vergessen Sie nicht, dass trotz aller Technologie eine gute Portion Neugierde in der Welt des Programmierens immer von Vorteil ist.

Jetzt hoffe ich, dass Sie die Leistungsfähigkeit von APIs erkunden, Ihre eigenen Integrationen erstellen und erstaunliche Systeme entwickeln werden. Denken Sie daran: Wenn etwas nicht nach Plan läuft, machen Sie sich keine Sorgen - so sammeln wir Erfahrungen. 

Wenn Sie weitere Fragen haben oder Hilfe benötigen, können Sie mich gerne kontaktieren. Ich bin bereit, Ihnen auf jede erdenkliche Weise zu helfen.

Bis später, Leute!


Übersetzt aus dem Portugiesischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/pt/articles/13661

Beigefügte Dateien |
Parte_01.zip (431.78 KB)
Developing an MQL5 RL agent with RestAPI integration (Part 2): MQL5 functions for HTTP interaction with the tic-tac-toe game REST API Developing an MQL5 RL agent with RestAPI integration (Part 2): MQL5 functions for HTTP interaction with the tic-tac-toe game REST API
In this article we will talk about how MQL5 can interact with Python and FastAPI, using HTTP calls in MQL5 to interact with the tic-tac-toe game in Python. The article discusses the creation of an API using FastAPI for this integration and provides a test script in MQL5, highlighting the versatility of MQL5, the simplicity of Python, and the effectiveness of FastAPI in connecting different technologies to create innovative solutions.
Developing a Replay System (Part 37): Paving the Path (I) Developing a Replay System (Part 37): Paving the Path (I)
In this article, we will finally begin to do what we wanted to do much earlier. However, due to the lack of "solid ground", I did not feel confident to present this part publicly. Now I have the basis to do this. I suggest that you focus as much as possible on understanding the content of this article. I mean not simply reading it. I want to emphasize that if you do not understand this article, you can completely give up hope of understanding the content of the following ones.
Data label for time series mining (Part 5):Apply and Test in EA Using Socket Data label for time series mining (Part 5):Apply and Test in EA Using Socket
This series of articles introduces several time series labeling methods, which can create data that meets most artificial intelligence models, and targeted data labeling according to needs can make the trained artificial intelligence model more in line with the expected design, improve the accuracy of our model, and even help the model make a qualitative leap!
Developing a Replay System (Part 36): Making Adjustments (II) Developing a Replay System (Part 36): Making Adjustments (II)
One of the things that can make our lives as programmers difficult is assumptions. In this article, I will show you how dangerous it is to make assumptions: both in MQL5 programming, where you assume that the type will have a certain value, and in MetaTrader 5, where you assume that different servers work the same.