脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

Web APIとは(REST, SOAP, XML-RPC)

なんか年末大掃除でPC内を掃除してたら新人の頃に作ったドキュメントが出てきたので。。

概要

  • HTTPを利用してネットワーク越しに処理を実行して結果を受け取る仕組み
  • 例)
    • 例えばGoogleYahoo!が公開する検索APIは、検索キーワードを送ることで、検索結果を受け取ることができる
    • Amazonは販売されている商品情報を検索したり、ショッピングカートを利用できる仕組みを公開している
    • f:id:portaltan:20151224104907p:plain
    • Web APIではHTTPを利用している点がもうひとつの特徴となっており、通常のWebページなどへのアクセスと同様にURLでアクセス先を指定してデータを送信し、結果を受け取る
    • HTTPでのデータのやり取りさえ可能なら、アクセスもできる!

クライアントからサーバへのアクセス方法

REST(REpresentational State Transfer)

  • RESTは仕様ではなく、WebAPIの仕様を決める上での基本的な考え方(アーキテクチャスタイル)を表す
  • GET/POSTとURL文でAPIの内容(メソッドの名前、引数、オプション)を指定
  • AmazonECSのRESTに基づく通信では、パラメータをURLに含めてGETメソッドを用いることにより、サーバからXMLデータを取得する
  • RESTは「リソース」を扱うための考え方であり、「リソース」とはブログの記事であったり、アップロードした写真であったり、もしくはWebページ全体のコンテンツであったりといった、ひとかたまりの情報を指す
    • リソースはURIで識別される情報
    • ブラウザにURIを入力するとブラウザはURIに示されたWebサーバに対してHTTPのGETメソッドを発行する
    • Webサーバは結果をブラウザに返す
  • その際の操作はHTTPのメソッドを「正しく」選択することで行う
    • Blogの場合で考えると、GETで記事表示、POSTで新規投稿。PUTで記事更新、DELETEで記事削除

メソッド 役割
GET リソースの取得(GETでのアクセスはリソースの内容に影響を与えない)
POST リソースの新規作成
PUT 既存のリソースのアップデート
DELETE リソースの削除

SOAP(Simple Object Access Protocol)

HTTPとHTTPS)上で送信される

  • SOAPではアプリケーションが受信するメッセージが、そのアプリケーションと同じ言語で書かれている必要がない
  • リスクエストを生成するOSと同じOSで実行する必要もなく、プラットフォームに関係なく実行することが出来る
  • SOAPメッセージは通常以下の三つの要素から構成される
    • envelope要素
    • header要素
    • body要素

XML-RPC(XML Remote Procedure Call)

  • XML
  • データとしてXMLを利用するWebAPIの仕様(XMLを利用してネットワーク越しにプロシージャ、つまり何らかの処理を呼び出すもの)
  • アクセスするためのエントリポイントとなるURLが用意されている
  • 1つのエントリポイントを使って複数メソッドを提供できます
  • アクセスの際にはメソッド名とパラメータを渡す
    • パラメータは文字列や数値、配列などプログラムにおける通常のサブルーチン呼び出しと同じようなものが利用できる
  • 処理の結果を戻り値として取得できる
    • 戻り値を配列にすることで、複数の値(例えばブログのエントリのURLとタイトル、コンテンツなど)を返すこともできる
  • クライアントからサーバへのアクセスには、HTTPのPOSTメソッドを利用する
    • 送受信する情報はXMLで、リスエストとレスポンスにおけるボディとして送受信される

AtomPP(Atom Publishing Protocol)

  • 情報配信フォーマットであるAtom Feed, Atom Feedを自動的に発見するたmの仕様でさるAtom Auto Discovery,そしてAtomPPの三つの仕様で構成されている
  • AtomPPにおけるリソース

リソース 意味 ブログでいうと
Collection Memberをまとめたもの ブログそのもの
ブログにエントリを追加するときは、ブログ(Collection)のURIに対してPOSTメソッドでエントリのデータを送信することになる
Member 個々の情報 個々のブログのエントリ
Introspection Document アクセス可能なCollectionの一覧 アクセス可能なブログ一覧