English Русский 中文 Español Deutsch Português
preview
RestAPIを統合したMQL5強化学習エージェントの開発(第1回):MQL5でRestAPIを使用する方法

RestAPIを統合したMQL5強化学習エージェントの開発(第1回):MQL5でRestAPIを使用する方法

MetaTrader 5統合 | 17 5月 2024, 12:51
138 0
Jonathan Pereira
Jonathan Pereira

はじめに

プログラミングやシステム開発において、異なるアプリケーション間のコミュニケーションは非常に重要です。API (Application Programming Interface)は、システムが効率的に通信し、データを交換できるようにするため、この文脈で重要な役割を果たします。この記事では、Web上でのシステムの相互作用の方法を変えたRestAPIについて特に説明します。

RestAPI (Representational State Transfer Application Programming Interface)は、インターネット上でシステムがどのように通信すべきかを定義する一連のルールです。データは、シンプルでスケーラブルなアーキテクチャの原則に基づき、リソースや識別子といった概念を使用して管理されます。実際には、RestAPIは、アプリケーションが組織的に情報を要求し、送信することを可能にする通信方法です。

RESTアーキテクチャは、信頼性が高くスケーラブルなWebシステムを構築するための原則を概説したロイ・フィールディングの記事によって、2000年代に登場しました。それ以来、RestAPIは人気を博しています。SOAP (Simple Object Access Protocol)のような以前のプロトコルに比べてシンプルなためです。

XMLをベースにしたSOAPは非常に人気がありましたが、複雑で、単純なトランザクションに大量のデータを必要とすることが知られていました。RestAPIは、システム間通信のための、より簡単で汎用的な代替手段となり、状況を大きく変えました。

RestAPIは汎用性があり、様々なシステムやアプリケーションで広く使用されています。シンプルでRESTの原則に忠実であるため、スケーラブルで、統合可能で、メンテナンスが容易なシステムを構築することができます。RestAPIは、金融分野をはじめ、さまざまな業界で広く使用されています。

SOAPプロトコルと比較すれば、なぜRestAPIが強力な地位を獲得したかは明らかです。SOAPが柔軟性に欠け、煩雑であったのに対し、RestAPIは軽量で使いやすく、効率的なコミュニケーションを必要とする最新のシステムにとって理想的です。さらに、ほとんどのプログラミング言語で実装できるため、世界中の開発者にとって理想的な選択肢となっています。


APIについて

APIについて


ますますデジタル化が進む世界で、「API」という言葉は広く使用されていますが、それはいったい何を意味するのでしょうか。APIはApplication Programming Interfaceの略です。これは、ソフトウェア開発とシステム統合における基本的な概念です。

要するに、APIとは、異なるソフトウェアが相互に通信するためのルールとプロトコルのセットです。橋渡しの役割を果たし、あるプログラムが他のプログラムの機能を、そのプログラムの内部の詳細をすべて理解することなく使用できるようにします。APIは、開発者がサードパーティのリソースや社内システムを利用することを可能にするため、アプリケーションを構築する上で不可欠です。

APIの主な側面を探ってみましょう。

1. アプリケーション間の通信

APIの最も重要な機能の1つは、異なるアプリケーションやシステム間の通信の円滑化です。天気予報アプリを開発していて、その中にリアルタイムの天気予報を入れたいとします。天気予報システム全体をゼロから構築する代わりに、既存の天気予報サービスのAPIを利用することができます。APIは、アプリが最新の気象データを要求するために使用できる一連の命令とメソッドを提供します。

2. 複雑さの抽象化

APIは、システムの根本的な複雑さを抽象化することを可能にします。つまり、APIを使用する際、相互作用するシステムやサービスの技術的な詳細をすべて理解する必要はないということです。APIの使い方を知っているだけで大丈夫です。これによって開発がより効率的になり、開発者は毎回車輪の再発明をするのではなく、自分の仕事に集中することができます。

3. APIの種類

前述したように、APIにはいくつかの種類があります。WebAPIはインターネット上で広く使用されており、HTTPなどのWebプロトコルに基づいています。ローカルAPIは、オペレーティングシステムやミドルウェアのリソースへのアクセスを提供します。プログラムAPIは、リモートのプログラムコンポーネントにアクセスするために使用されます。gRPCやRESTなど、それらを実装するための技術や標準がいくつかあります。SOAP APIはXMLベースでより複雑であった一方、RESTful APIはRESTの原則に従いますが。例えば、GraphQL APIは、クライアントが特定のデータを照会できる柔軟性で知られています。

4. 実例

APIがどのように使用されているかを理解するために、いくつかの実例を見てみましょう。FacebookやTwitterのようなSNSは、開発者がコンテンツ共有や認証機能を自分のアプリケーションに統合できるAPIを提供しています。PayPalなどの決済サービスは、金融取引を可能にするAPIを提供しています。Googleマップのような一部の地図サービスでも、アプリケーションにインタラクティブな地図を含めることができるAPIを持っています。

5. セキュリティと認証

APIには、許可されたアプリケーションだけがリソースにアクセスできるようにするためのセキュリティメカニズムが含まれていることが多いです。これには、APIキーの生成、トークン認証、またはその他の機密データ保護方法が含まれます。


RestAPIについて

APIダイアグラム


RestAPIの世界に入る前、ソフトウェアシステムは通常、より厳格で複雑なプロトコルを介して通信していました。システム間の通信はそれほど流動的ではなく、異なるアプリケーション間の情報交換は困難な作業でした。
その後、RESTの時代が到来し、システム間コミュニケーションに革命的なアプローチがもたらされました。RESTとはRepresentational State Transferの略で、2000年にロイ・フィールディングによって初めて紹介されました。ソフトウェアアーキテクチャに対するこの革新的なアプローチが、RestAPIの基礎となりました。RESTは、リソースを特定するためのURL (Uniform Resource Locators)や、リソースと対話するためのHTTPメソッドの使用など、システムがどのように相互作用すべきかを導く一連の原則を定義しています。

RestAPIは、デジタル時代のアプリケーションとシステムの通信方法において基本的な役割を果たしています。システムは他のシステムに情報やアクションを要求できるようになり、データ交換や操作はより効率的で柔軟になります。
簡単な例を考えてみましょう。スマートフォンの天気予報アプリを使うとします。このアプリは、現在地の気温や天候に関する最新情報を表示してくれるはずです。しかし、この情報は単独で生成されるのではなく、さまざまな情報源から気象情報を収集するリモートサーバーから受信されます。

ここでRestAPIが役に立ちます。天気予報アプリを開くと、RestAPIを介してリモートサーバーにリクエストが送信されます。このリクエストは、通常はGETリクエストで、あなたの場所の天候に関する情報を問い合わせます。サーバーはリクエストを処理し、通常はJSONまたはXML形式で、リクエストされた気象データを含むレスポンスを生成します。そして、アプリケーションはこのデータを使用して、適切なインターフェイスに表示します。RestAPIをこれほど強力にしているのは、相互作用の標準化です。システムは確実に通信できます。言い換えれば、システムはRESTの原則に従えば、信頼できる方法で情報が伝達されることを知っています。

使用例

SNSアプリケーション:お気に入りのソーシャルプラットフォームに写真をアップロードすると、RestAPIがサーバーへのデータ転送を行い、その写真を他のユーザーが利用できるようにします。このやりとりは、RestAPIを介したリクエストとレスポンスに基づいています。



APIとREST APIの主な違い

APIは、開発者が堅牢なデジタルソルーションを構築できるよう、すぐに利用できるコードと情報チャネルを提供することで、多くのアプリケーションを統合するプロセスを簡素化します。APIはアプリケーション間の仲介役として機能し、アプリケーション間の相互作用を促進します。しかし、アプリケーションアーキテクチャが異なるため、APIにはプログラム型、ローカル型、Web型、REST型など、さまざまな種類があります。

APIは、コンピュータやコンピュータプログラムの接続を可能にします。基本的には、必要な機能を強化するために他のプログラムにサービスを提供するソフトウェアのインターフェイスです。近年、ほとんどのWebアプリケーションがAPIを使用しているため、APIは市場で人気を博しています。例えば、スマートフォンで天気を確認したり、旅行のチケットを予約したりするときは、いつも裏でAPIが呼び出されています。

APIによって、企業は自社のアプリケーションのデータや機能を外部のサードパーティ開発者に公開することができるため、最終的にはビジネスパートナーシップが生まれ、収益が増加します。


APIの種類

Web API

  1. Webベースのアーキテクチャで、基本的にRESTスタイルに従います。
  2. HTTPプロトコルによる通信
  3. インターネット上でリソースやサービスを提供するために利用


ローカルAPI

  1. ローカルサービスやシステムリソースにアクセスするための特定のアーキテクチャ
  2. オペレーティングシステムやミドルウェアのリソースへのアクセスを提供
  3. さまざまなオペレーティングシステムで利用可能であり、特定のプラットフォームに限定されない
プログラムAPI
  1. RPC (Remote Procedure Calling)技術をベースにしており、gRPC、JSON-RPCなどのバリエーションがある
  2. あたかもローカルであるかのようにリモートソフトウェアコンポーネントにアクセスでき、分散システム間の通信を容易にする
  3. プログラムAPIを実装するための様々な技術や標準がある
RESTful API
  1. リソース、HTTPメソッド、データ表示など、RESTの原則に基づいたRESTfulなアーキテクチャ
  2. 標準的なHTTPメソッド(GET、POST、PUT、DELETE)を使用して、リソースに対する操作を実行
  3. 通常はJSONまたはXML形式でデータを返す
API SOAP
  1. XMLをベースとし、SOAP (Simple Object Access Protocol)に準拠
  2. セキュリティやトランザクションなどの高度な機能を備えた、コンプライアンスに優れたサービスを提供
  3. RESTful APIよりも複雑

API GraphQL

  1. クライアントが必要なデータのみをリクエストできる柔軟なクエリー言語を使用
  2. クライアントが希望するレスポンスの構造を指定できるため、最近のアプリケーションではよく使用される
  3. 必ずしもRESTfulやSOAPのアーキテクチャに従っているわけではなく、クエリーの面ではより柔軟


プロトコルとAPIアーキテクチャ

  1. XML-RPC:このプロトコルは、2つ以上のネットワーク間で情報を交換するために作成されました。クライアントは、呼び出しをエンコードするXMLと、データ転送のためのHTTPリクエストを使用してRPCを実行します。

  1. JSON-RPC:XML-RPCに似た軽量なJSONエンコードRPCで、非同期で応答できる複数の通知とサーバーコールを可能にします。

  2. SOAP:構造化された情報を交換するために設計されたWeb APIプロトコル。XMLを使用して、オペレーティングシステム上で動作するプロセス間の認証、認可、通信をおこないます。HTTPのようなWebプロトコルはほとんどのオペレーティングシステムで動作するため、SOAPを使えば、クライアントは使用する言語やプラットフォームに関係なくWebサービスを呼び出し、レスポンスを受け取ることができます。

  3. REST:インターネット上のシステム間で標準を提供するためのアーキテクチャスタイル。プロトコルでもライブラリでもツールでもないため、システム間のコミュニケーションを容易にします。RESTアーキテクチャは、クライアントとサーバーの実装を独立させ、互いの機能に影響を与えません。


APIの必要性について


  1. 自動化はAPIテストを加速し、それによって効率を高めます。APIは、デジタルの世界をそのダイナミズムでつなぐだけでなく、ワークフローを自動化することで、企業がより俊敏になることを可能にします。

  2. プラットフォームとアプリケーションの統合は、APIを介して実装することができ、継続的な通信を利用することができます。APIがなければ、企業は接続性を欠き、それに比例して生産性とパフォーマンスが低下します。システム統合により、データの移動が可能になり、ワークフローの自動化や職場での共同作業が容易になります。

  3. 人間の介入が減るため、効率が上がります。APIへのアクセスを提供することで、コンテンツの重複を避け、企業はより柔軟な対応が可能となり、質の高いイノベーションに時間を費やすことができます。

  4. APIはデータとサーバーの間に追加のセキュリティ層を追加するので、セキュリティは追加の利点です。開発者は、トークン、署名、TLS (Transport Layer Security)暗号化を使用して、セキュリティをさらに強化することができます。


REST API入門


REST APIは、インターネット上のアプリケーションとサービス間の相互作用のルールと標準を確立するソフトウェアアーキテクチャモデルです。APIがRESTアーキテクチャの原則に厳密に従う場合、それはしばしばRESTful APIと呼ばれます。

RESTful APIの主な利点の1つは、Webサービスにアクセスするための柔軟なアプローチです。標準的なHTTPプロトコルとメソッド(GET、POST、PUT、DELETEなど)を使用して、URLで表されるリソースに対する操作を実行するためです。このシンプルなデザインは、コンピューティングリソースが限られたデバイスや環境であっても、Webサービスとの対話をより身近なものにします。


RESTアーキテクチャ

  1. 非定常性:RESTパラダイムで運用されるシステムは、非定常でなければなりません。クライアントとサーバー間の通信では、ステートレス制限によりサーバーはクライアントの状態に影響されず、逆もまた同様です。制約はコマンドの代わりにリソースを用いて適用されます。オブジェクト、ドキュメント、または他のリソースに保存/送信できるものを表すWeb名詞です。

  2. キャッシュの互換性:キャッシュは、サーバーが静的でないことに伴う制限を軽減するのに役立ちます。これは、最新のWebアプリケーションのパフォーマンスを向上させる重要な要素です。キャッシュはクライアントサイドのパフォーマンスを向上させるだけでなく、サーバーサイドにも大きなメリットをもたらします。うまく機能するキャッシュメカニズムは、サーバーの平均応答時間を大幅に短縮します。

  3. 分散性:RESTは、クライアントとサーバーのアプリケーションが互いに分離された分散型アプローチを採用しています。要求がどこで開始されるかに関係なく、クライアントアプリケーションが知っている唯一の情報は、要求されたリソースのURI (Uniform Resource Identifier)です。サーバーアプリケーションは、要求されたデータをHTTPで送信しなければなりませんが、クライアントアプリケーションを変更しようとしてはなりません。

  4. 多層:多層システムはRESTアーキテクチャをスケーラブルにします。RESTfulアーキテクチャでは、クライアントとサーバーのアプリケーションは分離されているため、REST APIの呼び出しと応答は異なる層を通過します。REST APIは多層的であるため、クライアントもサーバーもエンドアプリケーションや中間アプリケーションとの相互作用を特定できないように設計しなければなりません。


REST APIの主な利点

  1. REST APIはさまざまなタイプの呼び出しに柔軟に対応し、たとえば異なるデータ形式を返したり、ハイパーメディアの正しい実装によって構造的に変化したりします。これによりユーザーは、クライアントとサーバーが異なる場合でも、双方向にやり取りすることができます。

  2. REST APIは、データベースに保存されたデータに加えられた変更に適応します。たとえそれらが異なる内部サーバーと外部サーバーに配置されていたとしてもです。ある程度コードに依存しているため、異なるサイト間でのデータの同期に役立ちます。

  3. データフローでは、通信にHTTP(GET、POST、PUT、DELETE)メソッドを使用します。これらのメソッドは一目瞭然です。さらに、RESTアーキテクチャは、クライアントサイドで情報を表示し、サーバーサイドでデータを保存または操作できるようにすることで、開発者の生産性を向上させるのに役立ちます。


APIとREST APIの比較

  1. 構造:ほとんどのAPIが構造的にアプリケーション間の形式に従っているのに対し、REST APIは厳密にWebベースのクライアントとサーバーの概念で動作します。クライアントとサーバーが分離されているため、柔軟性が高くなります。

  2. 設計:APIは通常、限られたデバイスのために設計された軽量アーキテクチャです。対照的に、REST APIは個々のシステムレベルで相互作用するため、そのアーキテクチャはより複雑になります。

  3. プロトコル:APIの主な目的は、Webサービス間のデータ交換を標準化することです。APIの種類によって、プロトコルの選択は異なります。一方、REST APIは、HTTPで通信するWebサービスを作成するためのアーキテクチャスタイルです。REST APIはコンピュータ科学者のロイ・フィールディングによって2000年に形成され、公開APIのゴールドスタンダードであり続けています。

  4. サポート:ほとんどのAPIはステートレスに直面しないため、実装が容易です。つまり、REST APIは、ユーザーが特定の順番で関数やパラメータの名前を知らなくても実行されます。

  5. 統一インターフェイス:クライアントとサーバー、あるいはアプリケーションとアプリケーションを分離するAPIはあまりないです。REST APIは単一インターフェイスの原則を遵守し、API内で複数の、あるいは別々のインターフェイスを使用することを禁止しています。ハイパーメディア接続は、理想的には単一インターフェイスを配布するために使用されるべきです。これにより、類似のデータ(ユーザー名や電子メールなど)が1つのURIのみに属することも保証されるはずです。その結果、最初のリクエストに関係なく、同じリソースに対するすべてのAPIリクエストは同じように示されなければなりません。

  6. スケーラビリティ:一般的なAPIではスケーラビリティが問題になりますが、REST APIは層構造になっているため、モジュール化され、より柔軟にスケーラビリティを実現できます。


例:MQL5でのWebRequest関数の使用

APIとREST APIの世界に足を踏み入れた今、読者はMQL5はこの物語にどう関わってくるのかを疑問に思っているかもしれません。 袖をまくって、MQL5で実践的な例題に取り掛かる時です。やはり、良い実例に勝るものはありません。

例をより完全で興味深いものにするために、jsonplaceholder.typicode.comを使用します。また、Coinbaseからのエンドポイントも追加する予定です。

考え方は簡単です。jsonplaceholderを使用した基本的なCRUD操作から始めましょう。基本を理解し、テストをおこなうには最適だからです。そして、次に、この知識をより高いレベルに引き上げ、Coinbase APIのより複雑で困難なシナリオに適用してみましょう。相場、過去のデータ、そして取引の世界に参入する機能まで、すべてが備わっています。どのエンドポイントにアクセスするかによります。

CRUD操作から始めましょう。

新しいポスト - 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;
  }

ポストの更新 - 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;
     }
  }

ポストの削除 - 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;
     }
  }

ポストの取得 - 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 "";
  }

 

さて、ビットコインの現在の価格を確認したいと想像してみましょう(したくない人はいないでしょう)。一般的な価格に加え、BTCのBid、Ask、スポット価格に興味があるかもしれません。API経由でこの情報を取得するには、MQL5のWebRequest関数を使用します。

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;
  }


全通貨をリストすることもできます。 

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;
  }


さて、作成した関数をすべて見たので、実行して結果を見てみましょう。

#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);
  }

その結果、次のようになります。




結論

一言でいえば、APIはプログラミングやシステム開発の世界で基本的な役割を果たしています。なぜなら、APIによって、異なるアプリケーションやシステム同士は効率的かつ柔軟に通信できるからです。RESTアーキテクチャに基づくRestAPIは、SOAPのような古いプロトコルに比べて、よりシンプルで汎用性が高いため、人気のある選択肢となっています。拡張性、統合性、メンテナンス性に優れたシステムを構築できるため、金融をはじめとするさまざまな分野で広く利用されています。

APIは、異なるアプリケーション間の通信を容易にし、根本的な複雑さを抽象化し、開発者が第三者リソースを活用できるようにするために必要です。Web API、ローカルAPI、プログラムAPI、RESTful API、SOAP API、GraphQL APIなどの種類があり、それぞれに特徴や用途があります。

REST APIは、柔軟で適応性があり、理解しやすいアーキテクチャ原則に従っています。REST APIは特にWeb通信に適しており、HTTPプロトコルを使用してリソースに対する操作を実行し、多くの場合、JSONまたはXML形式でデータを返します。

APIとREST APIを比較すると、REST APIはより厳格な構造を持ち、クライアントとサーバーを分離し、主にWebのコンテキストで動作することがわかります。どちらも単一のインターフェイスに準拠し、マルチレベル構造によってスケーラビリティを促進します。

最後に、これらの概念をMQL5を使用した実践的な例に適用することで、基本的なCRUD操作からCoinbase APIを使用した金融データの取得まで、APIが実世界でどのように使用されているかを理解することができます。

さて、API、REST、MQL5、その他もろもろについてのこの話は終わりにしましょう。ここで述べられていることはすべて、私のプロフェッショナルとしてのビジョンの結果です。常に細部に注意を払ってください。バグがいつ突然現れるかわからないからです。 

テクノロジーの世界では、物事が急速に変化する可能性があることを忘れてはなりません。そのため、常に最新のトレンドや更新情報を把握しておくことをお勧めします。そしてもちろん、すべてが正常に機能しているかどうかを確認することは決して損にはなりません。

この会話があなたにとって有益であり、勉強になったことを願っています。テクノロジーが発達していても、プログラミングの世界では好奇心が大切なのです。

APIのパワーを探求し、独自の統合を生み出し、素晴らしいシステムを開発してください。計画通りにいかなくても、心配することはありません。私たちはそうやって経験を積むのです。 

ご質問やサポートが必要な場合は、お気軽にご連絡ください。できる限りサポートします。

ではまたお会いしましょう。

MetaQuotes Ltdによりポルトガル語から翻訳されました。
元の記事: https://www.mql5.com/pt/articles/13661

添付されたファイル |
Parte_01.zip (431.78 KB)
RestAPIを統合したMQL5強化学習エージェントの開発(第2回):三目並べゲームREST APIとのHTTPインタラクションのためのMQL5関数 RestAPIを統合したMQL5強化学習エージェントの開発(第2回):三目並べゲームREST APIとのHTTPインタラクションのためのMQL5関数
この記事では、MQL5がPythonやFastAPIとどのように相互作用できるか、MQL5のHTTP呼び出しを使用してPythonの三目並べゲームと相互作用する方法について説明します。この記事では、この統合のためのFastAPIを使用したAPIの作成について説明し、MQL5でのテストスクリプトを提供することで、MQL5の多用途性、Pythonのシンプルさ、そして革新的なソルーションを生み出すために異なるテクノロジーを接続するFastAPIの有効性を強調しています。
リプレイシステムの開発(第37回):道を切り開く(I) リプレイシステムの開発(第37回):道を切り開く(I)
今回は、もっと前にやりたかったことをようやく始めます。確固たる地盤がないため、この部分を公に発表する自信がありませんでした。今、私にはその根拠があります。この記事の内容を理解することにできるだけ集中することをお勧めします。単に読むだけではなくて、という意味です。ここで強調しておきたいのは、この記事を理解できなければ、それに続く記事の内容を理解することはできないということです。
ニューラルネットワークが簡単に(第68回):オフライン選好誘導方策最適化 ニューラルネットワークが簡単に(第68回):オフライン選好誘導方策最適化
最初の記事で強化学習を扱って以来、何らかの形で、環境の探索と報酬関数の決定という2つの問題に触れてきました。最近の記事は、オフライン学習における探索の問題に費やされています。今回は、作者が報酬関数を完全に排除したアルゴリズムを紹介したいと思います。
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.