APIとは何ですか?英語でお願いします。

フィリップ・ブラクロウによるアートワーク。スペイン語翻訳。ポルトガル語の翻訳。

ソフトウェア開発を学ぶ前は、APIは一種のビールのように聞こえました。

今日、この用語を頻繁に使用しているため、最近バーでAPIを注文しようとしました。

バーテンダーの応答は、404:リソースが見つかりませんでした。

このかなり一般的な用語が何を意味するかについて、漠然とした、または不正確な考えを持っている技術者や他の場所で働いている多くの人々に会います。

技術的には、APIはApplication Programming Interfaceの略です。いくつかの点で、ほとんどの大企業は顧客向けまたは内部使用向けのAPIを構築しています。

しかし、APIをわかりやすい英語でどのように説明しますか?また、開発やビジネスで使用される意味よりも広い意味がありますか?まず、ウェブ自体がどのように機能するかを振り返って見てみましょう。

WWWおよびリモートサーバー

Webについて考えるとき、接続されたサーバーの大規模なネットワークを想像します。

インターネット上のすべてのページは、リモートサーバーのどこかに保存されます。結局のところ、リモートサーバーはそれほど神秘的ではありません。リクエストを処理するために最適化された、リモートにあるコンピューターの一部にすぎません。

物事を把握するために、Webサイト全体をWebに提供できるラップトップ上のサーバーを起動できます(実際、ローカルサーバーは、エンジニアがWebサイトを公開する前にWebサイトを開発するために使用します)。

ブラウザにwww.facebook.comと入力すると、Facebookのリモートサーバーにリクエストが送信されます。ブラウザーが応答を受信すると、コードを解釈してページを表示します。

ブラウザー(クライアントとも呼ばれる)にとって、FacebookのサーバーはAPIです。つまり、ウェブ上のページにアクセスするたびに、リモートサーバーのAPIを操作します。

APIはリモートサーバーとは異なります。むしろ、リクエストを受信して​​レスポンスを送信するサーバーの一部です。

顧客にサービスを提供する方法としてのAPI

APIを製品としてパッケージ化する企業のことを聞いたことがあるでしょう。たとえば、Weather Undergroundは天気データAPIへのアクセスを販売しています。

シナリオ例:小規模ビジネスのWebサイトには、クライアントを予定にサインアップするために使用するフォームがあります。クライアントに、その予定の詳細を含むGoogleカレンダーイベントを自動的に作成する機能を提供する必要があります。

APIの使用:アイデアは、ウェブサイトのサーバーがGoogleのサーバーと直接通信して、指定された詳細でイベントを作成するリクエストを送信することです。サーバーはGoogleの応答を受信して​​処理し、ユーザーへの確認メッセージなどの関連情報をブラウザーに送り返します。

または、ブラウザは、サーバーをバイパスしてAPIリクエストをGoogleのサーバーに直接送信できます。

このGoogleカレンダーのAPIは、他のリモートサーバーのAPIとどう違うのですか?

技術的には、違いはリクエストとレスポンスの形式です。

Webページ全体をレンダリングするために、ブラウザーはプレゼンテーションコードを含むHTMLでの応答を期待しますが、GoogleカレンダーのAPI呼び出しは、おそらくJSONのような形式でデータを返します。

ウェブサイトのサーバーがAPIリクエストを行っている場合、ウェブサイトのサーバーがクライアントになります(ブラウザを使用してウェブサイトに移動するときのブラウザに似ています)。

ユーザーの観点から見ると、APIを使用すると、Webサイトを離れることなくアクションを完了することができます。

最近のほとんどのWebサイトは、少なくともいくつかのサードパーティAPIを使用しています。

ライブラリまたはサービスの形式であっても、多くの問題にはすでにサードパーティのソリューションがあります。多くの場合、既存のソリューションを使用する方が簡単で信頼性が高いです。

開発チームがAPIを介して互いに通信する複数のサーバーにアプリケーションを分割することは珍しくありません。メインアプリケーションサーバーのヘルパー機能を実行するサーバーは、一般にマイクロサービスと呼ばれます。

要約すると、企業が顧客にAPIを提供する場合、純粋なデータレスポンスを返す専用URLのセットを構築したことを意味します。つまり、レスポンスには、 Webサイトのようなグラフィカルユーザーインターフェイス。

ブラウザでこれらのリクエストを行うことはできますか?多くの場合、はい。実際のHTTP転送はテキストで行われるため、ブラウザーは応答を表示するために常に最善を尽くします。

たとえば、アクセストークンを必要とせずに、ブラウザでGitHubのAPIに直接アクセスできます。ブラウザでGitHubユーザーのAPIルート(https://api.github.com/users/petrgazarov)にアクセスすると、JSONレスポンスが返されます。

{
  「ログイン」:「petrgazarov」、
  「id」:5581195、
  「avatar_url」:「https://avatars.githubusercontent.com/u/5581195?v=3」、
  "gravatar_id": ""、
  「url」:「https://api.github.com/users/petrgazarov」、
  「html_url」:「https://github.com/petrgazarov」、
  "followers_url": "https://api.github.com/users/petrgazarov/followers"、
  "following_url": "https://api.github.com/users/petrgazarov/following{/other_user}"、
  "gists_url": "https://api.github.com/users/petrgazarov/gists{/gist_id}"、
  "starred_url": "https://api.github.com/users/petrgazarov/starred{/owner}{/repo}"、
  「subscriptions_url」:「https://api.github.com/users/petrgazarov/subscriptions」、
  「organizations_url」:「https://api.github.com/users/petrgazarov/orgs」、
  「repos_url」:「https://api.github.com/users/petrgazarov/repos」、
  「events_url」:「https://api.github.com/users/petrgazarov/events{/privacy}」、
  「received_events_url」:「https://api.github.com/users/petrgazarov/received_events」、
  「タイプ」:「ユーザー」、
  「site_admin」:false、
  「名前」:「ペトロ・ガザロフ」、
  「会社」:「PolicyGenius」、
  「ブログ」:「http://petrgazarov.com/」、
  「場所」:「NYC」、
  「メール」:「petrgazarov@gmail.com」、
  「レンタル可能」:null、
  「bio」:null、
  「public_repos」:23、
  「public_gists」:0、
  「フォロワー」:7、
  「フォロー」:14、
  「created_at」:「2013-10-01T00:33:23Z」、
  「updated_at」:「2016-08-02T05:44:01Z」
}

ブラウザは、JSON応答を正常に表示したようです。このようなJSONレスポンスは、コードで使用する準備ができています。このテキストからデータを抽出するのは簡単です。その後、データを使って何でもできます。

Aは「アプリケーション」用です

締めくくりに、APIの例をさらに2つ紹介します。

「アプリケーション」とは、多くのものを指します。 APIのコンテキストにおけるそれらの一部を以下に示します。

  1. 明確な機能を備えたソフトウェア。
  2. サーバー全体、アプリ全体、またはアプリのほんの一部。

基本的に、その環境から明確に分離できるソフトウェアのすべての部分は、APIの「A」になることができ、おそらく何らかのAPIも持つでしょう。

コードでサードパーティのライブラリを使用しているとしましょう。コードに組み込まれると、ライブラリはアプリ全体の一部になります。別個のソフトウェアであるため、ライブラリにはおそらく、残りのコードとやり取りできるAPIがあります。

もう1つの例を次に示します。オブジェクト指向設計では、コードはオブジェクトに編成されます。アプリケーションには、相互にやり取りできる数百のオブジェクトが定義されている場合があります。

各オブジェクトには、アプリケーション内の他のオブジェクトと対話するために使用する一連のパブリックメソッドとプロパティであるAPIがあります。

オブジェクトには、プライベートな内部ロジックが含まれている場合があります。つまり、APIではなく、外部スコープからは隠されています。

これまで説明してきた内容から、APIのより広い意味と、今日の用語のより一般的な使用法を取り除いていただければ幸いです。

興味深いリソース(私が省略したものの、まだ非常にクールなもの):

DNS(ドメインネームシステム)に関する優れたYouTubeビデオ

HTTPプロトコルの基本

オブジェクト指向設計の原理に関する素晴らしいカーンアカデミーのビデオ