APIとは一体どんなもの?


前提
プログラミング初学者(1〜2ヶ月)の私が学習内容をまとめたものです。
実際の現場では通用しないことや、間違いなど含まれている可能性があります。
お気づきの際はコメントにて指摘していただければ幸いです。

今回はAPIという初めて聞くワードについて私が学習した範囲でまとめました。

APIとはなにか

Application Programming Interfaceの略
アプリケーション同士がデータをやりとりする場合に使用する一定のルール、仕組みのことです。
APIは抽象的で広い解釈を持っており、以下2つのような意味でも使われることがあります。
1つ目、「このようにリクエストが来たらこのようにデータを返す」という仕様全体を表す意味
2つ目、「呼び出したら実行されるメソッド」そのものを表す意味
link_toやrenderなどRailsが独自に定義し、用意してくれているメソッドはRailsのAPIなどと呼びます。

実際に使う時で言うと、わざわざプログラムを1から作らずとも、先人が作ったプログラムがAPIとしてあれば、それを借りてきて自分が開発するwebサービスの一部に利用し、効率的に開発を進めるために使われているようです。
具体例でいうと、レストランのwebページのアクセス方法にgoogle mapsが使われているような感じです。

よく使われるAPI

webAPI

HTTP/HTTPS通信を使用して利用するAPIのことを指します。
例えば、Google Mapsという地図のwebサービスが別のwebサービスに組み込まれているといったことです。
これはGoogleが提供している「Google Maps Platform」というWebAPIを利用して実現されています。
Google Maps Platformは位置情報や経路などの情報をやり取りすることができ、これを使えば、Map部分をゼロから開発する必要がなくなります。

さらにAPIにはオープンAPIと内部APIが存在しています。
2つの違いは単純に公開範囲の違いで公開されているAPIか非公開で使っているAPIかという違いで、概念・内容は同じようなものです。

オープンAPI

外部に公開されているAPIのことをオープンAPI(公開API)という。
先程出てきたGoogle Maps Platformがまさにこれにあたります。

内部API

自社や個人が開発したアプリケーションの内部で取り扱うAPIのこと。
自社内のアプリのみに使っていて公開していないAPIです。
#サーバーサイドとフロントエンドの分離
API作成時には常にデータを返却しますが、ビューファイルがないと閲覧しやすい画面を届けることはできません。
そこで、APIとは別にフロントエンド専用のアプリケーションを作成する必要があります。
このようにしてサーバーサイドとフロントエンドでの作業の役割を分離して開発が行われているようです。

分離のメリット

・チームなどの担当を分けやすい
・扱う言語が異なるため、効率的に作業ができる
フロント:HTMLなどのマークアップスキルとJavaScriptなどのイベント駆動を扱うスキル
サーバー:計算処理などのパフォーマンス改善を扱うスキル
・データ形式を統一しておけば、使用言語の変更があっても片方だけの変更でOK

ネイティブアプリケーションへの展開

ネイティブアプリケーション

スマホ、タブレットをしようしてApp StoreやGoogle Play Storeでダウンロードできるアプリのこと。
基本的にはiOSとandroidでは開発言語が異なります。
iOS:Objective-C,Swift
android:Java,Kotlin

クラスプラットフォーム

iOSやandroidのどちらにも互換性のある開発フレームワーク
開発言語には、FlutterやReact Nativeが有名のようです。

ネイティブアプリケーション開発におけるAPIのメリット

ネイティブアプリケーションにAPIの利用は最適です。
その理由は、例えば
webアプリケーション、iOSのネイティブアプリケーション、androidのネイティブアプリケーションの3つを作るとした時
サーバーサイドのAPIアプリケーションは1つ作ればOKになります。
それぞれのアプリに適切なデータ返却し(API)、それに対する処理をフロントエンド(iOSとandroid)で実装すれば完成となり、サーバーサイドの開発が1つで済むことが大きなメリットです。

まとめ

APIはアプリケーション同士がデータをやりとする場合に使用するルールや仕組みのこと
APIはサーバーサイドのデータのやりとりをするプログラム
APIを使うことで開発がすごく楽になる
APIでサーバーサイドを作ってしまえばiOSとandroidの2つどちらにも適用できる