APIとは何ですか?アプリケーションプログラミングインターフェイスの説明

APIは、アプリケーションプログラミングインターフェイスの略で、コマンドラインツールからエンタープライズJavaコード、Ruby on RailsWebアプリまであらゆる場所に適用される概念です。APIは、個別のソフトウェアコンポーネントまたはリソースとプログラムで対話する方法です。

コードのすべての行を最初から作成しない限り、それぞれが独自のAPIを持つ外部ソフトウェアコンポーネントと対話することになります。完全にゼロから何かを作成する場合でも、適切に設計されたソフトウェアアプリケーションには、コードを整理してコンポーネントをより再利用しやすくするための内部APIがあります。また、Web上の他の場所で開発された機能を利用できるようにする多数のパブリックAPIがあります。

APIとは何ですか?

APIは、ソフトウェアコンポーネントとの可能な相互作用の仕様として定義されます。正確にはどういう意味ですか?さて、車がソフトウェアコンポーネントだったと想像してみてください。そのAPIには、加速、ブレーキ、ラジオのオンなど、ができるについての情報が含まれます。また、それらのことを実行させる方法についての情報も含まれます。たとえば、加速するには、アクセルペダルに足を乗せて押します。

APIは、アクセラレータに足を置いたときにエンジン内で何が起こるかを説明する必要はありません。そのため、内燃エンジンを搭載した車の運転を学んだ場合は、まったく新しいスキルを習得しなくても、電気自動車のハンドルを握ることができます。どのような情報は、APIで一緒に来るの定義抽象および車自体から分離されています、。

覚えておくべきことの1つは、一部のAPIの名前は、対話の仕様と対話する実際のソフトウェアコンポーネントの両方を指すためによく使用されることです。たとえば、「Twitter API」というフレーズは、プログラムでTwitterを操作するための一連のルールを指すだけでなく、「取得したツイートの分析を行っている」のように、操作するものを意味すると一般的に理解されています。 TwitterAPI。」

抽象化レイヤーとしてのAPI

ソフトウェアに関して言えば、APIは文字通りどこにでもあります。 APIは、コンピューターサイエンスの最も基本的な概念の1つである抽象化と密接に関連しています。抽象化は、システムの複雑さを整理して、複雑なアクションを簡単な方法で処理できるようにする方法にすぎません。この抽象化は、Amazonにステープルを注文するために使用できるバッテリー駆動のプッシュボタン回路基板であるAmazon DashButtonsのように考えてください。これは彼らがどのように見えるかです:

Amazonにダッシュボタンを注文し、スマートフォンのアプリを使用して、Wi-Fiネットワーク、Amazonアカウント、およびお気に入りのブランドのペーパータオルなどの製品に関連付けます。その後、ペーパータオルをさらに注文したいときは、ボタンを押すだけです。ダッシュボタンはインターネットに接続し、アカウントに注文するためのメッセージを送信します。数日後、ペーパータオルが玄関先に届きます。

APIのように、ダッシュボタンは、あらゆる種類の複雑さを舞台裏で隠す、至福のシンプルなインターフェイスです。注文した製品のIDは、データベースから取得する必要があります。配送先住所はアカウントから取得する必要があります。ペーパータオルを保管している最寄りの配送センターを決定し、利用可能な在庫からアイテムを削除して梱包するように通知する必要があります。最後に、パッケージは、すべてのパッケージが目的地に効率的に到着するように、飛行機、トラック、バンを他のパッケージと一緒に組み合わせてルーティングする必要があります。

ここで、これらすべてを顧客として調整する必要があると想像してください。ペーパータオルは複雑すぎて時間がかかり、やるべきことがあるので、決して注文することはありません。幸いなことに、試練全体があなたから抽象化されています。コンピュータシステムと人間のプロセスの長い相互接続されたチェーンがあり、それらのペーパータオルが玄関先に現れるようにしますが、あなたが考える必要があるのはボタンを押すことだけです。

これは、プログラマーにとってAPIがどのようなものかです。それらは圧倒的な量の複雑さを取り、すべてを自分で行う代わりに利用できる比較的単純な一連の相互作用を定義します。どのソフトウェアプロジェクトでも、数百ではないにしても数十のAPIを直接使用している可能性があり、それらのAPIはそれぞれ他のAPIなどに依存しています。

パブリックAPIとAPI統合

APIは、コンピュータープログラミングにおける長年の概念であり、何年もの間、開発者のツールセットの一部でした。従来、APIは、同じマシンで実行されているコードコンポーネントを接続するために使用されていました。ユビキタスネットワーキングの台頭により、オープンAPIと呼ばれることもあるパブリックAPIがますます利用できるようになりました。パブリックAPIは外向きであり、インターネット経由でアクセスできるため、他のベンダーのコードとオンラインでやり取りするコードを記述できます。このプロセスはAPI統合として知られています。

これらの種類のコードマッシュアップにより、ユーザーは独自のシステムでさまざまなベンダーの機能を組み合わせることができます。たとえば、マーケティングオートメーションソフトウェアMarketoを使用している場合は、そこでデータをSalesforceCRM機能と同期できます。

「公開」または「公開」は、この文脈で「無料」を意味すると解釈されるべきではありません。これを機能させるには、MarketoとSalesforceの顧客である必要があります。ただし、これらのAPIを利用できるため、統合プロセスは他の方法よりもはるかに簡単になります。(( 知っておくべきパブリックAPIの素晴らしいリストがあります。)

WebサービスとAPI

00年代初頭のウェブサービスという用語を思い出して、オープンAPIのアイデアはかなり似ていると思うかもしれません。実際、Webサービスは特定の種類のオープンAPIであり、XMLバリアントであるWebサービス記述言語(WSDL)で指定されることを含め、かなり厳格な一連の仕様を満たしています。

Webサービスは、サービス指向アーキテクチャー(SOA)の一部として使用されることを目的としていました。Nordic APIのブログで説明されているように、SOAがその潜在能力を十分に発揮できなかったため、Webサービスに悪い名前が付けられました。サービス間通信に使用される技術の進歩(特に軽量で柔軟性の高いREST)も、パブリックAPIの世界でWebサービスをやや遅れさせています。

REST API

Webサービスは元々、HTTPを介してXMLドキュメントを送信するメッセージングプロトコルであるSOAP(Simple Object Access Protocol)を使用して通信するように設計されていました。ただし、現在、ほとんどのWebベースのAPIは、アーキテクチャスタイルとしてREST(Representational State Transfer)を使用しています。

RESTは、2000年にロイフィールディングの博士論文で正式に紹介されました。これは、あらゆる種類のメディア(テキスト、ビデオなど)を含む分散システムの構築に使用されるアーキテクチャコンポーネント、設計原則、および相互作用のセットです。中核となるRESTは、汎用コンポーネントを簡単に構築するために必要な構造を提供しながら、Web全体で柔軟な通信と情報の表示を可能にするシステム構築のスタイルです。

REST APIでは、リソースはほとんど何でもかまいませんが、例には、ユーザー、ツイートのリスト、ツイートの検索の現在の結果が含まれます。これらの各リソースは、リソース識別子でアドレス指定できます。これは、WebベースのREST APIの場合、通常、// api.twitter.com/1.1/users/show?screen_name=twitterdevなどのURLです。アプリケーションが識別子を使用してリソースを要求すると、APIは、JPEG画像、HTMLページ、JSONなど、アプリケーションが使用できる形式でそのリソースの現在の表現をアプリケーションに配信します。

RESTの大きな差別化要因の1つは、要求元のアプリケーションにデータを送信することです。これは優れた柔軟性を提供し、アプリケーションがデータに対してやりたいことを何でもできるようにしますが、効率が犠牲になります。処理のためにWeb経由でデータを送信することは、データが存在する場所で処理を実行してから結果を送信することに比べて非常に低速です。

もちろん、「効率的な」アプローチの問題は、データをホストするシステムが、アプリケーションがデータをどのように処理したいかを事前に知る必要があることです。したがって、汎用の使いやすさと柔軟性を備えたAPIを構築するには、RESTが最適です。

APIの例

業界の巨人からの多くの、あなたが対話するためのパブリックAPIがたくさんあります。APIを介してプログラムでプラットフォーム会社のコードにアクセスする機能は、本質的に、それらをプラットフォームにするものです。いくつかの著名なAPIの例は次のとおりです。

  • Google API。これにより、マップから翻訳まで、コードをGoogleサービスの全範囲に接続できます。APIはGoogleにとって非常に重要であるため、主要なAPI管理プラットフォームであるApigeeを買収しました。
  • Facebook API。これにより、Facebookのソーシャルグラフおよびマーケティングツールにプログラムでアクセスできます。(同社は、Cambridge Analyticaやその他のスキャンダルからのフォールアウトで、これらのAPIを介してアクセスできるユーザーデータを制限してきました。)

APIがどのように機能するかを実際に理解するために、Java開発者がJavaプラットフォームと対話するために使用するJava APIと、ソーシャルと対話するために使用するパブリックAPIであるTwitterAPIの2つについて詳しく見ていきましょう。ネットワーキングサービス。

Java API

Java APIは、Java DevelopmentKitをインストールしたすべての人が「箱から出して」利用できるソフトウェアコンポーネントのライブラリです。これらのコンポーネントは一般的なタスクを実装し、プログラマーが毎回ゼロから始める必要がないため、一般的に生産性を向上させます。ソフトウェアで使用される基本的なコンポーネントの1つは、リストと呼ばれるものです。これは、ご想像のとおり、アイテムのリストを追跡します。Java APIは、リストで実行できることを定義ます。アイテムの追加、リストの並べ替え、アイテムがリストにあるかどうかの判別などです。また、これらのアクションの実行方法も指定します。リストを並べ替えるには、リストの並べ替え方法を指定する必要があります。アルファベット順、数値の降順、最も明るい色から最も鈍い色などです。

Twitter API

Twitter APIは、開発者がプロ​​グラムでTwitterデータを操作できるようにするWebベースのJSONAPIです。Java DevelopmentKitに含まれているJavaAPIとは異なり、TwitterAPIはWebベースのAPIです。Twitterがホストするサービスにインターネット経由でリクエストを送信してアクセスする必要があります。

TwitterなどのWebベースのAPIを使用すると、アプリケーションはWebブラウザと同じようにHTTPリクエストを送信します。ただし、応答はWebページとして配信されるのではなく、人間が理解できるように、アプリケーションが簡単に解析できる形式で返されます。この目的のためにさまざまな形式が存在し、TwitterはJSONと呼ばれる一般的で使いやすい形式を使用しています。(JSONに慣れていない場合は、ここで数分間読んでみてください。)

Twitterの基本的な要素の1つはツイートです。Twitter APIは、ツイートでができるかを示します。ツイートの検索、ツイートの作成、ツイートのお気に入り化などです。また、これらのアクションを実行する方法について説明します。ツイートを検索するには、検索条件(検索する用語またはハッシュタグ、地理的位置、言語など)を指定する必要があります。

APIデザイン

API設計は、APIの「何」と「どのように」を定式化するプロセスです。作成できる他のすべてのものと同様に、さまざまなレベルの思考と注意がAPI設計に組み込まれ、さまざまなレベルのAPI品質がもたらされます。適切に設計されたAPIは一貫した動作をし、コンテキストを考慮に入れ、ユーザーのニーズを念頭に置いています。

API内の一貫した動作は、APIを学習できる速度と、プログラマーがAPIを使用するときに間違いを犯す可能性に大きく影響します。一般に、同様のアクションを実行するAPIは、技術的な違いに関係なく、同様に動作する必要があります。一貫性のないAPIの例として、Javaでリストにアイテムを追加する2つの方法を見てみましょう。

リストに項目を追加する2つの方法は同じことをしますが、それらの戻り値の型(booleanとvoid)は異なります。このAPIを使用する開発者は、どのメソッドがどのタイプを返すかを追跡する必要があり、APIの学習が難しくなり、その使用法でエラーが発生しやすくなります。また、要素を追加する方法を切り替える場合は変更する必要があるため、これらのメソッドを使用するコードの柔軟性が低下することも意味します。

コンテキストを考慮に入れることは、APIの外部の要因と関係がありますが、一貫性の別の形式です。ソフトウェア以外の優れた例は、道路の規則(右側通行または左側通行)がさまざまな国の自動車設計にどのように影響するかです。車の設計者は、運転席を車の右側または左側に配置するときに、その環境要因を考慮に入れます。