いきさつ
Web系やスマホアプリにおいて,サーバサイドならAPIを作成,フロントならAPIを呼び出す操作が必要になるかと思います.
しかし,大学の授業等でAPIに関する解説がなく,自分で調べることになりました.
後輩が同じような苦労をせずに済むように記事にまとめます.
用語説明
詳細については,もっと詳しくわかりやすい記事がたくさんありますので調べましょう.
API とは
APIとは、あるコンピュータプログラム(ソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。
実際には,他のプログラムを呼び出すための呼び出し口(=境界面)を指してAPIという言葉が用いられる場合が多いように感じます.
(例:××のAPIを呼ぶ,など)
また,APIにもいろいろあるでしょう.
外部のプログラムを呼び出すと言っても,
- 何を呼び出すのか(ライブラリ,外部サーバ上のアプリケーション,etc)
- どのようなルール(プロトコル)で呼び出すのか
などの点で様々な種類があります.
例えば,Python向けの機械学習ライブラリscikit-learnを呼びだすAPIや,
API Reference — scikit-learn 0.21.3 documentation
Twitterに投稿されたデータにアクセスするためのAPI,
TwitterのAPIについて - Twitter Help Center
Qiita上のデータを参照するためのAPIだって存在します.
Qiita API v2ドキュメント - Qiita:Developer
WebAPI とは
APIのうち,サーバ上のデータやプログラムを,HTTP(今時はHTTPS)プロトコルを用いて呼び出すものを指します.
(このプロトコルは,Webサーバとやりとりするためのプロトコルですね)
返るデータは,JSON形式である場合が多いように思います.
WebAPIの使い方・作り方
話を簡単にするため,ここではWebAPIに対象を絞って用い方を記します.
使い方(呼び出し方)
例として,Qiita APIのうち認証なしで利用できるものを使います.
例えばユーザデータを取得する場合,上記のドキュメントには,ホストqiita.com
でGET /api/v2/users/:user_id
せよとあります.:user_id
の部分はQiitaのIDで置き換えます.
具体的には,私のユーザデータを取得する場合,次のようにします.
- curlコマンド
$ curl -L qiita.com/api/v2/users/ryhoh
{"description":"学部4年生.求職中.\r\n何でも屋さん.表向き,専門は機械学習ってことになってる.","facebook_id":"","followees_count":1,"followers_count":5,"github_login_name":"ryhoh","id":"ryhoh","items_count":6,"linkedin_id":"","location":"","name":"","organization":"関西大学 総合情報学部 総合情報学科","permanent_id":286106,"profile_image_url":"https://avatars3.githubusercontent.com/u/16788328?v=4","team_only":false,"twitter_screen_name":null,"website_url":""}
- JavaScript
<script>
fetch('https://qiita.com/api/v2/users/ryhoh')
.then(function(response) {
return response.json();
})
.then(function(myJson) {
console.log(JSON.stringify(myJson));
});
</script>
(JavaScriptはほとんどわからないので Fetch を使う - Web API | MDN を参考に作成)
正直,確認するだけならブラウザで開いでも見える(HTTPSだし).
また,データの送信を目的にPOSTメソッドを用いる場合もありますが,その場合も似たような形で行えるため省略します.
作り方
アクセスされたらcontentsとしてHello world!を返すだけのAPIです.
- PHP
<?php
header('Content-Type: text/html; charset=UTF-8');
$res = [
'contents' => 'Hello world!',
];
print json_encode($res, JSON_PRETTY_PRINT);
ターミナルでphp -S IPアドレス:ポート番号
として実行し,そこにブラウザでアクセスするか,上記の方法で呼び出してあげれば,返ってきたデータを見ることができるかと思います.