APIとは?APIの種類と活用
エンジニアをしていると必ず出てくる単語として「API」というものがあります。
今回はそのAPIの種類とそれぞれの活用のされ方をまとめてみたいと思います。
APIとは
Application Programming Interface(アプリケーション・プログラミング・インターフェイス)
インターフェイスは直訳すると接点や境界線といった意味があります。ITの世界では接点的な意味を用いて、何かと何かを繋ぐものという意味で使われています。
APIという単語としては、ざっくり言うならアプリケーションの機能と今実行しているプログラムを繋ぐものといった意味になります。
ひとまとめにAPIといっても種類はいくつか存在しますが、基本的な考え方・構造としては リクエスト⇔レスポンス 成り立っています。
機能を用意してAPIとして公開しておくことで、決められた情報を渡せば、新たに必要な情報を得たり、与えた情報を加工して返してもらうことができます。
したがってAPIとして公開していい機能であれば、一度作ってしまえば今後はその接続部分の開発だけで、その機能を自分で新たにプログラムする必要がなくなります。
そういった観点から自身で作ることの難しい機能は、他社などが作成したAPIを利用することで簡単にプログラムの中で利用出来る様になるため普及が進んでいます。
身近な利用例としては郵便番号から住所が自動入力される会員登録画面があるかと思います。
住所との対応一覧はネットにあるけどコピペだけでは難しいので、公開されているAPIを利用し、入力された郵便番号を渡すことで住所情報を得る形で利用されます。
なんとなくAPIを知ってる人は「HTTPで接続するあれね」みたいな感じで間違ってないけど勘違いしている方も少なくないかと思いますが、インターフェイスなので単にHTTPで接続するそれだけではないので、その種類を少しづつ解説してみたいと思います。
APIの種類と活用
WebAPI
その名の通りWeb上に公開されたAPIのことで、APIと呼ばれるものの代表例です。基本的には2つのサーバー間で情報をやり取りするのにつかわれ、HTTPが利用されます。
実装の方法としては、SOAP API(ソープAPI) と REST API(レストAPI) といった2書類の方法があります。
SOAP:Simple Object Access Protocol・・・XML(※1)で情報のやり取りを行います。処理の速度は遅くなりがちですが、セッション管理トランザクション管理など提要されるため、セキュリティ面には優れていること、また規模の大きい処理に向いています。
SOAPはセキュリティ面に優れるため、情報の秘匿性の重要視されるタイミングで使われがちです。例えば証券会社と銀行とか、保険会社と医療機関など個人情報の取り扱いをしたり、企業間の業務的連携で使われます。
REST:Representational State Transfer・・・Json(※1)やXMLで情報のやり取りを行います。主流はJsonです。そのため簡単で軽いデータのやり取りに向いています。REST規格(※2)を原則として利用します。
SOAPよりも通信方式が簡単であったり、Jsonを利用しているためデータ構造が簡単なため、情報の取得や検索で主に使われます。例えば先に紹介した郵便番号による住所の取得であったり、X(旧Twitter)ではツイートの検索等のAPIを公開しています。
用語
※1 Josn・XML:データ構造、本記事の要点ではない為超スーパーざっくり説明しておくと、Jsonはかなり柔軟な形をしたデータ構造で、XMLはかなり複雑ですが形式がしっかりしているので意図がわかりやすい形をしています。
※2 REST規格:簡単に言うとGETやPOSTといったメソッド(命令の仕方)が定義されているクライアントとサーバーの分離した接続規格
ネイティブAPI
OSが提供しているAPIで、システムコールとも呼ばれます。外部との通信をするわけではないのでHTTPを利用するなどはせず、プログラムから命令文で実行をします。
例えばプログラムの実行後に再起動をするようにしたり、ダイアログを開いたり、プログラムから印刷作業を行ったりすることができます。「プリンターに接続して印刷する」までを機能としてOSが準備していて、どのファイルかを一緒に命令すればプリンター情報を取得~などといった処理をプログラミングするひつようがなくなる訳ですね。
したがって組み込み系のアプリケーションに使われるので、WindowsはCやC++で利用できるようになっています。
またLinux環境では広くはコマンドやシステムコールと呼ばれて普及していますが、これはLinux提供のAPIです。
Windows APIドキュメント
MacOS(Cocoa)ドキュメント 公式で日本語はなさそう
Ubuntuドキュメント
ランタイムAPI
こちらもネイティブAPIの一種ともとらえれられます。
プログラム実行そのものの情報を得るために使われます。そのプログラムの一覧の処理として実行時間を取得したり、読み込まれているクラスやメソッドを取得したり、メモリ利用などを取得したりします。
プログラムの実行中に動的な操作ができるので、Windowsでプログラムの実行中にメモリ使用率が高くなったからアラートを出そうとか。そういった運用をするために使われます。
データベースAPI
代表例はODBCですかね。DBとプログラムを繋ぐインターフェイスでSQLはもちろんDBへの設定やログの取得等をプログラムからより簡単に利用できるように用意されたものです。
用途も上記の説明通りですが、検索したいテーブルと条件だけを渡せばSQLそのものを書く必要が無かったり、DBにオートコミットを設定したり、インデックスを貼ったりなどで利用します。
まとめ
APIとして意識していないものも意外とAPIと呼ぶものの一種であったりします。とは言いつつもAPIとして意識する必要は全くないと思います。コマンドはコマンドでしょ(笑)
特にWebAPIは便利なもがたくさんあるので、ぜひ開発に役立ててみてください。