投稿日: | 最終更新日:
RESTfulAPIを使ってみたいけどAPIって何?
Djangoなどのパッケージを駆使し、RESTfulなWebAPIを作ってみたいと思います。
そもそもAPIとは?
APIとは、Application Programming Interfaceの略称です。あるサービス提供者が、そのサービスを利用するために提供するインタフェースを意味します。代表的なものとして、ウェブサイトに埋め込まれたtwitterのタイムラインがあります。
APIのメリット
アプリケーション開発者(API利用者)がAPIを利用すれば、WEB上のどこでも同じ機能が利用でいます。同じ機能を持ったサービスを開発する必要がないため、開発効率の向上や開発費用の低減が期待できます。
使用例
例えば、銀行口座に対して入金するときを想像します。API提供者が入金サービスをAPI(以下、入金API)で提供しており、そのサービスには以下の機能があります。
- 銀行口座へのアクセスを許可する機能
- 預金残高の確認機能
- 入金額と預金残高を合算する機能
- 合算後の残高を表示する機能
API利用者は入金APIに対して必要なパラメーターを与えます。
すると上記の機能全てが実現し、自分で作る必要がないので煩雑な機能の設計や実装といった作業から解放されます。
Web APIとは?
先に述べた入金APIのようなAPI提供者とAPI利用者とのやりとりを「HTTP/HTTPS」ベースで実現する仕組みです。
APIとWebAPIの違い
「Web」ではないAPIは通常、API利用者が用いるプログラミング言語と、API側が同じ言語で提供されることが多いです。
それじゃあWeb APIは?
Web APIは「HTTP/HTTPS」ベースのAPIです。そのため、異なるプログラミング言語で開発されたアプリケーション間を連携させることができます。また、Webブラウザでも利用できるため、通常のAPIよりも汎用(はんよう)的に利用できます。
Web APIの代表的な実装方式として、RESTとSOAPがあります。
RESTとは?
RESTとはRepresentational State Transferの略称です。RESTful API(またはREST API)と呼びますが、以下のように定義されています。
RESTful API(REST API)とは、Webシステムを外部から利用するためのプログラムの呼び出し規約(API)の種類の一つで、RESTと呼ばれる設計原則に従って策定されたもの。RESTそのものは適用範囲の広い抽象的なモデルだが、一般的にはRESTの考え方をWeb APIに適用したものをRESTful APIと呼んでいる。
RESTful APIでは、URL/URIですべてのリソースを一意に識別し、セッション管理や状態管理などを行わない(ステートレス)。同じURLに対する呼び出しには常に同じ結果が返されることが期待される。
また、リソースの操作はHTTPメソッドによって指定(取得ならGETメソッド、書き込みならPOSTメソッド)され、結果はXMLやHTML、JSONなどで返される。また、処理結果はHTTPステータスコードで通知するという原則が含まれることもある。
RESTの4つの設計原則
RESTは、以下の4原則に従った上で開発します。
- セッションなどの状態管理を行わない(やり取りされる情報はそれ自体で完結して解釈することができる)
- 情報を操作する命令の体系が予め定義・共有されている(HTTPのGETやPOSTメソッドなど)
- すべての情報は汎用的な構文で一意に識別される(URLやURIなど)
- 情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる
APIにおけるリソースとは、APIを介して操作するDBやテーブルなどの情報資源です。リソースに対してURLが対応づけられます。(そのため、URLが名詞的になることが多いです。)
セッションなどの状態管理を行わない
ステートレス(システムが現在の状態を表すデータなどを保持しないよう)にします。
例)
前回のAPIコール結果にかかわらず同じ値を戻します。
①合計1000件のデータが存在し、1回目のAPIコールで100件まで取得します。
②①の状態は考慮せず、2回目のAPIコールでも同じ100件を戻します。
情報を操作する命令の体系が予め定義・共有されている
HTTPのメソッド(命令)でデータ操作種別(CRUD Create、Reference、Update、Delete)を実行します。
- POSTメソッド→作成(Create)
- GETメソッド→参照(Reference)
- PUT/PATCHメソッド→更新(Update)
- GETメソッド→参照(Reference)
- DELETEメソッド→参照(Delete)
すべての情報は汎用的な構文で一意に識別される
URIで操作対象のリソースを識別可能にします。
例)
①「ユーザー」というリソース(操作する対象のデータ)を表すために「users」というリソース名を付与します。
②ユーザIDが「1000」のユーザー情報を取得したい場合、下記のようなURIフォーマットでURIを生成して操作可能状態にします。
URIフォーマット:https://example.com/users/:user_id
生成されたURI:https//example.com/users/1000
情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができる
レスポンスとしてXMLもしくはJSONで操作結果を戻します。
例)
①データ操作を実行します。
②適切にデータ操作できました。その操作結果をXMLもしくはJSONで記述します。
③HTTPのレスポンスボディーに含め、APIコール元に戻します。
SOAPとは?
SOAPは、XMLを利用したWebサービス連携プロトコルです。
XMLで記述された「SOAPメッセージ」と呼ばれるデータをやりとりします。SOAPメッセージは、WSDL(Web Services Description Language)というWebサービスインタフェース記述言語で構造を定義します。
代表的なSOAPサーバーソフトウェアとして、JAVAの「AXIS2」があります。
このWSDLによる定義ファイルをAPI利用者、API提供者双方で保持します。すると、独自に定義した構造のSOAPメッセージをやりとりすることが可能となります。
SOAPとRESTの違い
どちらも「クライアント–サーバ間」でファイルをやり取りすることには違いありません。設計思想としては、REST=非同期・SOAP=同期のような感じです。
まとめ
- APIとは、外部からサービスを提供してくれるインターフェース。
- RestfulAPIは、POSTメソッドを使ってJSONを受け取ったりすること。
- RestfulとRestはほぼ同じと考えてOK。
- SOAPとは、XMLで記述された「SOAPメッセージ」をやりとりするもの。
- Python 114
- 制作 54
- RaspberryPi 41
- Django 40
- WordPress 40
- Linux 27
- VPS 22
- JavaScript 21
- PHP 20
- HTML・CSS 19
- AWS 16
- 仮想環境 15
- レスポンシブデザイン 13
- マイコン 11
- WEB全般 11
- 動画製作 9
- Webサービス 8
- 統合開発環境 8
- 機械学習 8
- PyCharm 7
- jQuery 7
- AfterEffects 7
- 起業・設立 7
- Django REST framework 6
- C# 6
- デザイン 6
- SEO 6
- pydata 6
- Visual Studio 5
- 数学 5
- 携帯サイト 5
- heroku 5
- Mac 5
- illustrator 5
- node.js 5
- Anaconda 5
- Nginx 4
- Jupyter Notebook 4
- インフラ 4
- Google Colaboratory 4
- symfony 4
- Webスクレイピング 3
- photoshop 3
- Go言語 3
- PC 3
- ツール 3
- Docker 3
- facebook 3
- 作業効率化 3
- データベース 3
- Cloud9 3
- コマンド 2
- micro:bit 2
- Kali Linux 2
- Webサーバー 2
- MariaDB 2
- ドローン 2
- コンテナ 2
- DaVinci Resolve 2
- ネットワーク 2
- Java 2
- movie 2
- PCDJ 2
- 音楽 2
- XSERVER 2
- Ansible 1
- Vue.js 1
- JSON 1
- Bootstrap 1
- バージョン管理システム 1
- SSL 1
- S3 1
- ムームードメイン 1
- ネットワーク 1
- アニメーション 1
- D3.js 1
- Rhino 1
- アニメ 1
- git 1
- windows 1
- アクセス解析 1
- スマートフォン 1
- アフィリエイトノウハウ 1
- 知識 1
- TypeScript 1
- 役立つ本・書籍 1
- データサイエンス 1
- ESP32 1
- AI 1
- ownCloud 1
- API 1