「API」とは何ですか?そして、どのように使用しますか?
"API" は、2つのアプリケーションの間に位置するミドルウェアであり、事前に定義されたルールを使用して通信を可能にします。実際には、APIは通常、クライアント側のアプリケーションが保護されたデータベースにアクセスできるようにするために使用されます。
APIは何をするのか?
高いレベルで言えば、APIは単に2つのアプリケーション間の通信を確立します。彼らは互いのコードにアクセスできないため、直接通信することはできず、間にワイヤーを引いて信号を送る必要があります。APIは、これらの信号がどのように送信されるべきかを定義します。コンピュータ上で実行されているほぼすべてのアプリケーションは、何千もの他のものと通信するために何らかのAPIを使用しています。
実際には、「API」という用語は、サーバーとクライアント、またはサーバーとバックエンドサービスの間の接続を形成するウェブベースのAPIを指すために一般的に使用されます。これらのAPIは、それらの背後にあるサービスへのアクセスポイントとして機能します。
例えば、クライアント側のアプリケーションがデータベースを持つサーバーと通信する必要があるとしましょう。クライアントにデータベースへの完全なアクセスを与えることは明らかにできません。なぜなら、これはいくつかの問題を引き起こすからです。まず第一に、それはおそらくあなたが犯すことのできる最悪のセキュリティミスですが、それだけでなく、クライアントサーバーモデル全体を破壊します。クライアントはデータベースと話したりデータを保存したりすることを心配する必要はなく、サーバーと通信してサーバーに重い作業を任せるべきです。
クライアントに完全なアクセスを許可する代わりに、クライアントの代理としてデータベースと通信する別のサービスを作成できます。これがAPIアプリケーションであり、データベース(またはその背後にある他のサービス)のすぐ前に位置しています。
クライアントは通常、HTTPを介してGETおよびPOSTリクエストを使用してAPIアプリケーションにリクエストを送信します。これは、例えば「
api.yoursite.comクライアントが特定のクエリでデータベースを検索したい場合、APIはデータベースに検索を実行するよう要求し、結果を返します。通常、APIはJSONを通じて通信し、結果を厳密に定義された型のオブジェクトとして返します。たとえば、:
{
"name": "MyAPI",
"search_results": [...]
}
これはAPIの別の利点です---データの構造を標準化することです。あなたのAPIは毎回同じ形式とタイプのデータを返すべきであり、これにより異なるアプリケーションで利用しやすくなります。ほとんどの主要なテクノロジー企業は公開されているAPIを持ち、そのAPIの構造と使用方法についての詳細なドキュメントがあります。
APIの使い方は?
APIはかなり標準化されています。ほとんどの場合、HTTPを通じてアクセス可能であり、通常はJSONデータを返します。つまり、HTTPリクエストを行い、JSONをデコードできる任意のプログラミング言語がAPIと通信し、データを取得することができます。ウェブベースのコンテンツをダウンロードできるcurlやwgetのようなシンプルなものでもAPIにアクセスできます。
あなたは、利用可能な公開APIを好きなアプリケーションで利用できますが、悪用を防ぐために制限があることがあります。例えば、KeyCDNはAPIアドレスから位置情報を取得するためのAPIを運営していますが、1秒間に3回のリクエストに制限されています。このAPIは、IPアドレスをURLパラメータとして渡すことで、APIエンドポイントにHTTP GET リクエストを送ることによって、任意のアプリケーションで使用できます。例えば:
https://tools.keycdn.com/geo.json?host={IP_ADDRESS}
何かのようなものを返すでしょう:
{
"status": "success",
"description": "Data successfully received.",
"data": {
"geo": {
"host": "173.79.254.254",
"ip": "173.79.254.254",
"rdns": "pool-173-79-254-254.washdc.fios.verizon.net",
"asn": 701,
"isp": "MCI Communications Services, Inc. d/b/a Verizon Business",
"country_name": "United States",
"country_code": "US",
"region_name": "Virginia",
"region_code": "VA",
"city": "Alexandria",
"postal_code": "22309",
"continent_name": "North America",
"continent_code": "NA",
"latitude": 38.719,
"longitude": -77.1067,
"metro_code": 511,
"timezone": "America/New_York",
"datetime": "2019-08-22 17:30:48"
}
}
}
この結果を response という名前の変数に保存できます。次に、住所のZIPコードを知りたい場合は、response.data.geo.postal_code を使ってアクセスできます。
ほとんどの言語にはこのプロセスを簡単にするためのライブラリがあり、さらに多くの言語には組み込みのツールもあります。いくつかの一般的なものを示しますが、「___ HTTPリクエスト」でクイック検索をすれば、あなたが作業している言語の結果が表示されるはずです。
JavaScript
JavaScriptは、XMLHttpRequest()オブジェクトを使用して、初めからHTTPリクエストを作成できます。
const Http = new XMLHttpRequest();
const url='https://api.github.com/';
Http.open("GET", url);
Http.send();
Http.onreadystatechange = (e) => {
console.log(Http.responseText)
}
しかし、この構文はかなり不格好なので、バニラJSが厳密に必要な場合を除いて、他のライブラリを使用して処理されることが一般的です。例えば、jQueryにはこれを処理するためのajaxメソッドがあります:
$.ajax('https://api.github.com/', {
dataType: 'json',
success: function (data, status, xhr) { ... }
});
そして、プロミスを使用してそれを処理するaxiosライブラリがあります:
axios.get('https://api.github.com/')
.then((data) => {
console.log(data);
}
)
いずれにせよ、JSONオブジェクトはJSON.parse()を使用してJavaScriptオブジェクトに直接デシリアライズでき、結果を他の場所で使用するために保存できます。
PHP
PHPは、file_get_contents 関数を使用してネイティブにGETリクエストを行うことができ、この関数は、APIの結果を変数に読み込むためにjson_decodeとともに使用することができます:
$json = file_get_contents('https://api.github.com/');
$obj = json_decode($json);
もし POST リクエストを作成したい、または追加の設定が必要な場合は、stream_context_create を使用して file_get_contents のための特別なコンテキストを作成できます:
$url ='https://api.github.com/';
$data = 'something';
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencodedrn",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { //error }
パイソン
Pythonにはこれをネイティブに行うための良い方法がないので、pipからrequestsライブラリをインストールする必要があります。その後、このようにリクエストを行うことができます:
import requests
r = requests.get("https://api.github.com/")
これにより、全体のHTTPトランザクションを表すオブジェクトが返されますので、実際のコンテンツを取得するにはr.contentを使用する必要があります。また、応答をPythonが読み取れるオブジェクトにデコードするために、JSONライブラリも必要になるでしょう。
import json
import requests
r = requests.get("https://api.github.com/")
decoded = json.loads(r.content)
自分のウェブAPIを作る方法は?
利用可能なデータがある場合は、それに対してAPIを設置してインターネット経由でアクセスできるようにすることができます。
これを行うには、APIサーバーを作成する必要があります。唯一の要件は、HTTP経由でリスニングでき、リクエストに応答できることですので、お好きなプログラミング言語を使用できます。また、その言語から選択したデータベースに接続するためのライブラリも必要になるでしょうし、ユーザーやその権限を追跡するためにOAuth 2.0のような認証を実装したいと思うかもしれません。
Expressは、JavaScriptを使用してシンプルなWeb APIを作成するためによく使用されるNode.JSライブラリです。ExpressサーバーはHTTP経由でリッスンし、異なるルートをハンドラ関数に転送することができます。これをNode MySQLクライアント(または他のデータベース)と組み合わせてデータ豊富なAPIを作成することができます。Pythonの場合も、リクエストをリッスンして応答できるFlaskのようなWebフレームワークが必要です。

