実践的API連携入門：メリットから具体的な実装方法紹介

## 初めに
APIがどんどん広く使われる現在、API連携はサービスの機能拡張の主な手段として利用されています。それでは、API連携とは何ですか？API連携を実装するにはどうしたらいいですか？本文では、これらの質問を解説するために、API連携の基本情報、主な事例及び実装方法を皆さんに紹介します。


## API連携の基本情報
それでは、API連携を理解するために、まずはAPI連携の基本情報を皆さんに紹介します。

## API連携とは
API連携とは、異なるシステムやサービス間でAPIを介してデータや機能を共有・連携することを指しています。API連携により、自社のアプリに他のアプリの機能をAPI介して、簡単に導入する事ができます。API連携はアプリケーション間の柔軟な連携を可能にし、既存サービスの機能拡張や新規サービスの迅速な構築を実現できます。

## API連携のメリット
APIを連携すると、たくさんのメリットが得られます。次は、API連携の主なメリットを紹介します。

### 開発コストの削減
新機能を開発する場合、既存のAPIを利用することで新規開発コストを大幅に減らすことができるので、開発コストを大幅に削減できます。

### サービス連携の容易化
APIを介することで、複数サービス間のデータ連携や処理連携がしやすくなるので、異なるサービス間の連携でも非常に容易に行えます。

### サービスの拡張性向上
他サービスのAPIを活用することで、そのサービスを自社サービスに導入する事ができるので、サービスの機能拡張が容易になります。

### 利用者の利便性が向上
API連携によって、連携されたサービス感を意識する事なく、シームレスに利用できるため手間が軽減されるし、連携によりデータの再利用が進むことで、入力作業なども軽減されるので、利用者にとって、サービスの利便性が向上します。

### 自社のコアコンピタンスの強化
自社サービスの強みとなるデータや機能をAPIとして積極的に公開することで、ブランド力が高められるし、公開したAPIの利用データを分析することで、自社サービスの改善点を発見することもできるので、自社のコアコンプタンスの強化を図ることも期待されるのでしょう。

## API連携のデメリット
また、その一方で、API連携にデメリットもあります。API連携の主なデメリットは以下の通り：

### 依存度の高まり
他社が提供するAPIを自社サービスで利用することになると、そのAPI提供企業に一定の依存関係が生まれます。例えば、自社サービスの重要な機能を決済会社の決済APIに依存させている場合、決済APIが突然利用できなくなると、自社サービスに重大な影響が及びます。

### 仕様変更への対応コスト
API提供側がサービス改善やビジネス戦略の変更により、APIの仕様を変更することがあります。その場合、APIを利用している側もその変更に対応する必要があります。

### パフォーマンスの不安定さ
自社のアプリケーションから他社が提供するAPIを呼び出す場合、そのAPIのレスポンス時間や稼働率は自社のコントロールが及びにくくなります。例えば、通常は高速にレスポンスしていたAPIが、提供側のインフラ負荷やネットワーク障害などで突然レスポンスが遅くなることがあります。

### セキュリティリスクの増大
自社のシステムと外部のAPIを連携することにより、その接点がセキュリティの脅威に晒される可能性があります。例えば、API連携時の認証情報の管理が不十分だと、不正アクセスによる情報漏洩やサービス妨害が発生する可能性があります。

また、APIを通じてやり取りされるデータに対する暗号化が不十分な場合、通信経路上でのデータ盗聴の危険性もあります。

### 監視・運用コストの発生
API連携後、自社のサービスが正確に動作することを確保するために、いつも利用する外部APIの稼働状況をモニタリングする必要があります。例えば、突発的なトラフィック増加に対応するために、APIの利用状況をモニタリングし、利用条件を超えないように調整する必要があります。

このようなデメリットが存在するので、API連携によって得られるメリットに比較して、慎重に検討する必要があるのでしょう。

## API連携の仕組みと実例
簡単に説明すると、API連携の仕組みは、必要なタイミングでAPIを呼び出してレスポンスを取得することで、情報のやり取りや処理を実行する仕組みになっています。

例えば、ECサイトの注文システムと宅配サービスに連携する場合を考えてみましょう。

- ユーザーがECサイトから商品を注文すると、ECサイトの注文システムは宅配サービスの「配送予定時間算出API」を呼び出す
- 配送予定時間算出APIは、注文データや利用者住所から配送時間を推定し、レスポンスでECサイトの注文システムに返す
- ECサイトの注文システムは予定時間を取得し、ユーザーへ配送予定時刻を表示するw
- 実際の配送が完了したら、配送システムが「配送完了報告API」を呼び出してECサイトの注文システムに報告する
- 注文システムは報告内容を受け取り、注文済みに更新する


上記のように、必要なタイミングで適切なAPIを呼び出すことで、システム間での情報共有や処理連携を実現できます。

## API連携の実例
上記でAPI連携の仕組みを理解した上、次は、実世界でAPI連携の代表的な実例をいくつか紹介します。

### TwitterとFacebookの連携
Twitterの投稿をFacebookなどに同時に流すことを実現する仕組みは、以下のようになっています。

- ユーザーがTwitterアプリケーションからTweetを投稿する
- Twitterの投稿内容がWebhookやStreaming APIなどを通じて外部に公開される
- Facebook、LINEなどのSNSがTwitterの公開APIを利用してリアルタイムに投稿を取得
- 各SNSが取得したTweet内容を、自サービスの投稿形式に変換する
- 変換した内容を、それぞれのSNSのタイムラインに投稿する
- ユーザーはTwitterだけでなく、連携したその他のSNSでも同じ投稿を見ることができる


### ウェブサイトとStripe決済サービスの連携
ウェブサイトとStripe決済サービスをAPI連携する仕組みは以下のようになっています。

- ウェブサイトがStripeの決済APIを導入する。
- ユーザーが商品を購入すると、ウェブサイトはStripe APIに決済をリクエスト。
- Stripe APIがクレジットカード情報を取得して決済を実行。
- 決済結果をウェブサイトにレスポンスで返し、成功か失敗かを通知。
- ウェブサイトはレスポンス結果を取得して、注文処理を完了。
- Stripe側で決済金額等の管理や売上の振込みが自動で実行される。
- ウェブサイト管理画面からStripe上の売上データ等を確認可能。

このようにStripeは、決済機能をAPIとして提供することで、ウェブサイトの導入を簡単にしている。ウェブサイト側では決済ロジックを構築せずとも、Stripe APIを呼び出すだけで決済機能を実現できる。

### Slackと他サービスの連携
SlackとTrelloやGitHubなどのアプリを連携して情報共有する仕組みは以下のようになっています。

- SlackがTrelloやGitHub等のサービスとの連携用APIを公開
- Trelloなど各サービスも、Slackとの連携用APIを実装
- ユーザーがSlackと連携する各サービスのアカウントを紐付ける
- Trello上でカードの更新があると、TrelloはSlack APIを呼び出して通知
- Slackは通知内容を受け取り、該当チャンネルにTrelloからの更新を投稿
- 同様にGitHubのプルリク更新などもSlackチャンネルに投稿
- SlackユーザーはTrelloやGitHubの更新をリアルタイムにSlack上で確認できる


このように、Slackと各サービスが連携APIを提供しあい、連携処理を実装することで、サービス間での情報共有が実現しています。

## API連携の実装方法
それでは、API連携を実装したい場合は、どうやって実現すればいいですか？次は、API連携を行う場合の基本的な流れを皆さんに紹介します。

## 利用するAPIの選定
まずは、API連携によって実現したい機能は何かを明確にする必要があります。そして、この目的を達成できるAPIがあるかどうかを調査し、利用するAPIを選定する。

## APIの仕様確認
APIを選定すると、当該APIのエンドポイント、データ構造、認証方法、利用可能な機能等のAPI仕様書で角煮する必要があります。

http://apidog.com/jp/blog/differeces-between-api-and-api-document/

## アクセス許可（APIキーなど）の取得
多くの場合、APIを利用するには、APIキーやシークレットキーの取得や利用登録が必要になるため、APIの利用を開始する前に、そのプロセスを経てアクセス許可を取得する必要もあります。

## APIの動作確認
API仕様書で提供された情報を踏まえて、実際にAPIにアクセスして、リクエストを送信して取得されたレスポンスが期待通りになっているかどうかを確認する必要があります。

## 自社アプリへの実装
APIが正しく動作している場合は、それを自社のアプリやサービスに導入する事ができます。

## API連携を実装するにはApidogを使うのが簡単
API連携を実装する場合、API管理ツールは決して欠けてはいけない存在になります。使いやすいAPI管理ツールの[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)は、さまざまな方面からAPI連携の実現を支援しています。

![apidog-クライアント-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/d63dc2b7-7ece-4169-1724-2edf23f4e7da.png)

## サードパーティAPIを発見して直ちに利用可能
Apidogには、API Hubというサービスが利用できます。[API Hub](https://apidog.com/apihub/)は利用可能なサードパーティのAPIをまとめるWebサイトです。このサイトでは、なんと1800個強のAPIが掲載されています（2023年5月現在）。それだけではなく、API Hubで掲載されているサードパーティのAPIを１クリックだけで、直ちに[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)にクローンして直接利用できます。

![api-hub-apis-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/856e4dfb-902e-4c70-36c6-e57a7746c4f0.png)

## APIの単体テストを手軽に実行
API連携を実装する前に、APIの正確動作を確保するには、APIテストツールの[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)を使用するのは一番簡単です。Apidogは、GET、POSTやPUTなどの全ての[HTTPメソッド](http://apidog.com/jp/blog/introduction-to-http-method/)にも対応しており、直感的なUIでただの1クリックだけで、APIの単体テストを行う事ができます。また、Apidogで、受信データや送信データを保存して、継続的に単体テストを行うのも簡単になりますし、自動テスト機能を使って、単体テストを繰り返したりすることも簡単に実現されるので、非常に便利です。

![apidog-single-test-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/fc152d00-0f4f-6976-43e4-713cd13107f0.png)

## 業務プロセスにピッタリするAPIの自動テスト
また、API連携を行なって、業務プロセスに影響を出す場合、[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)の自動テスト機能を使って、業務プロセスに従って、テストシナリオを作成することで、業務プロセスにピッタリするAPIの自動テストを簡単に行うこともできます。

![apidog-single-test-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/5369efc3-c68d-431f-cbd5-7cc5f5b1a924.png)

## 終わりに

**最後まで見ていただきありがとうございました！
この記事を読んで少しでも理解を深めていただければ幸いです！**