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

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

今日、私はこの用語を頻繁に使用するので、実際、最近、バーでAPIを注文しようとしました。

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

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

技術的には、APIはApplication ProgrammingInterfaceの略です。ある時点で、ほとんどの大企業は、顧客用または内部使用用のAPIを構築しています。

しかし、APIを平易な英語でどのように説明しますか?そして、開発やビジネスで使用されるものよりも広い意味がありますか?まず、引き戻して、Web自体がどのように機能するかを見てみましょう。

WWWとリモートサーバー

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

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

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

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

クライアントとしても知られるブラウザにとって、FacebookのサーバーはAPIです。これは、Web上のページにアクセスするたびに、リモートサーバーのAPIと対話することを意味します。

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

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

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

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

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

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

このGoogleカレンダーのAPIは、他のリモートサーバーのAPIとどのように異なりますか?

技術的には、違いはリクエストとレスポンスのフォーマットです。

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

WebサイトのサーバーがAPI要求を行っている場合、Webサイトのサーバーがクライアントです(Webサイトに移動するためにブラウザーを使用する場合のクライアントと同様です)。

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

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

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

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

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

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

たとえば、アクセストークンを必要とせずに、ブラウザを使用してGitHubのAPIに直接アクセスできます。ブラウザ(//api.github.com/users/petrgazarov)でGitHubユーザーのAPIルートにアクセスしたときに取得するJSON応答は次のとおりです。

{ "login": "petrgazarov", "id": 5581195, "avatar_url": "//avatars.githubusercontent.com/u/5581195?v=3", "gravatar_id": "", "url": "//api.github.com/users/petrgazarov", "html_url": "//github.com/petrgazarov", "followers_url": "//api.github.com/users/petrgazarov/followers", "following_url": "//api.github.com/users/petrgazarov/following{/other_user}", "gists_url": "//api.github.com/users/petrgazarov/gists{/gist_id}", "starred_url": "//api.github.com/users/petrgazarov/starred{/owner}{/repo}", "subscriptions_url": "//api.github.com/users/petrgazarov/subscriptions", "organizations_url": "//api.github.com/users/petrgazarov/orgs", "repos_url": "//api.github.com/users/petrgazarov/repos", "events_url": "//api.github.com/users/petrgazarov/events{/privacy}", "received_events_url": "//api.github.com/users/petrgazarov/received_events", "type": "User", "site_admin": false, "name": "Petr Gazarov", "company": "PolicyGenius", "blog": "//petrgazarov.com/", "location": "NYC", "email": "[email protected]", "hireable": null, "bio": null, "public_repos": 23, "public_gists": 0, "followers": 7, "following": 14, "created_at": "2013-10-01T00:33:23Z", "updated_at": "2016-08-02T05:44:01Z"}

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

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

最後に、APIの例をさらにいくつか紹介しましょう。

「アプリケーション」は多くのことを指します。APIのコンテキストでのそれらのいくつかを次に示します。

  1. 独自の機能を備えたソフトウェア。
  2. サーバー全体、アプリ全体、またはアプリのごく一部。

Basically any piece of software that can be distinctively separated from its environment, can be an “A” in API, and will probably also have some sort of API.

Let’s say you’re using a third-party library in your code. Once incorporated into your code, a library becomes part of your overall app. Being a distinct piece of software, the library would likely have an API which allows it to interact with the rest of your code.

Here’s another example: In Object Oriented Design, code is organized into objects. Your application may have hundreds of objects defined that can interact with one another.

Each object has an API — a set of public methods and properties that it uses to interact with other objects in your application.

An object may also have inner logic that is private, meaning that it’shiddenfrom the outside scope (and not an API).

From what we have covered, I hope you take away the broader meaning of API as well as the more common uses of the term today.

Interesting Resources (stuff that I left out but is still very cool):

A great youtube video on DNS (Domain Name System)

HTTP protocol basics

An Awesome Khan Academy video on Object Oriented Design Principles