フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

SOAPとRESTを一から調べてみた

https

インフラ屋には馴染みが薄いかもしれませんが、界隈でよく耳にするバズワード(もう古いですが)です。 きになるので調べてみました。

正直調べる過程でわからないことが多く、かつ技術的に広がりが大きすぎるため、調べきることができませんでした。

情報としては不完全ですが、とりあえず技術的な記事をポストすることを大事にしていきたいと思いますので、今回はこのままあげさせていただきます。

APIとは

APIはApplication Programming Interfaceの略で、ソフトウェアが互いに通信するときのインターフェースの仕様です。

広い意味で使われるため、一概にAPIと言っても文脈で様々な意味を持ちます。 OS上で使うAPIもあれば、Javaで使うものもありますし、WebAPIと呼ばれるインターネット上で公開されているAPIも存在します。

今回とりあげるAPIは、Webで使用されるWeb APIを指します。

WebAPIには色々な種類がある

WebAPIをさらに細かく見ていくと下記のようなワードが出てきます。

  • RPC(Remote Procedure Call)
  • SOAP(Simple Object Access Protocol)
  • REST(REpresentational State Transfer)

まず大きく分けて、RPCと呼ばれるものとRESTと呼ばれるものがありますのでここからはじめます。

RPCとは

RPCとは、広い意味ではあるプログラムから別のネットワーク常に存在する関数の実行を可能にする技術です。remote=遠隔の意味の通りですね。 RPCの中でもとくに有名なのがSOAPでXMLを使用してプログラム間の通信を行います。

現在(2020/04)はgRPCの方が有名になってきました。こちらの記事で解説しています。

blog.framinal.life

SOAPとは

SOAPはXMLを使ったプロトコルです。HTTPリクエストとレスポンスにXMLを使用しデータのやり取りを行います。

XMLとは

XMLはコンピューターが読み取りやすいように作成されたデータフォーマットの一種でタグで括ることによってデータを示します。

HTTP通信においては、HTTPリクエストのヘッダ内にXMLを格納し対向に通信を送ります、 受け取る際にはHTTPレスポンスのヘッダ内に格納されたXMLを取り出します。

REST

REpresentational State Transferの頭文字をとってRESTです。直訳すると「現在の状態の転送」でしょうか。RESTは通信プロトコルではなくWebAPIの仕様を決める上での考え方です。(プロトコルではない)

RESTはあるコンテンツ(リソース)に対して常に一意のURLを持つことが前提です。例えばhttps://xxxx/aticle/20161014_01といったように本日の日付の01番の記事を示すURLがこれに当たります。

一方であるサイトにログインすると、どのユーザーも一律https://xxxx/user_areaに飛ばされる場合のuser_areaは常に一意のURLとは言いません。これはセッション情報やクッキー情報によって都度違うページが生成されるため一意ではないからです。 ※taroユーザーとjiroユーザーでは同一URLでもコンテンツが異なる

あるURLに対してRESTはHTTPリクエストのメソッドを利用したものです。 リソースタイプを指定し、POST/GET/PUT/DELETEなどのHTTPプロトコルのメソッドを組み合わせて意味を示します。

結局SOAPとRESTは何が違うのか?

比較軸 SOAP REST
ジャンル プロトコル 概念・考え方
扱うデータフォーマット XML json
考え方 ステートフル ステートレス

参考

ご指摘等多々あるかと思います。コメントでいただければ大変助かります。