この記事でわかること
「RESTとSOAPの違い」と「広義のRESTがなぜ現場で広まったか」
背景 🖼️
以下の本で広義のREST
について述べられていました。
改めて整理したいと思います。
RESTとは 📚
本書でもwikipediaを紹介していました。
まずRESTは以下二つの定義がされています。
FieldingのRESTアーキテクチャスタイルの原則に合わせたWebサービスシステム
RPCスタイルに合わせた簡易なXML(やJSON)+HTTPインターフェイスを採用したシステム(SOAPは使わない)
ちなみこちらがFieldingさんのRESTについて定義されたものです。
広義のRESTとは 💡
広義のRESTとは2つ目のRPCスタイルに合わせた簡易なXML(やJSON)+HTTPインターフェイスを採用したシステム(SOAPは使わない)
を意味しています。
1つ目のFieldingのRESTの定義にも従いますが全てにおいてその定義に沿うわけではない為と本書には記載されていました。
例えばsearchという動詞をURIに含めることはFieldingのRESTの定義では推奨されていませんが、わかりやすさの為にsearchを使うケースがあります。
RPC(Remote Procedure Call,遠隔手続き呼び出し)とは
「関数呼び出し」をローカルではなく 別の環境に接続して代わりに実行すること
この記事ではクライアント側のAPI呼び出しの関数名とそのエンドポイントでイベントハンドラーとなるバックエンド側のDB操作の関数名が同じことを例として挙げていました。
SOAPとは
サーバーに対する処理要求や結果をXMLで表現し、それらをHTTPでやりとりすることでRPCを実現することを目指したもの
SOAPは簡単なRPCコールでも以下の理由で情報が多くなりました。
- 冗長さ:単純なリクエストでも必ずEnvelope, Header, Bodyといった入れ子構造を持つ必要がある
- 複雑さ:WS-Securityなど多数の拡張仕様をサポートしようとした結果、開発者の学習コストが高騰した
SOAP:標準化や相互運用性は強力だが重い
広義のREST:標準に厳密には従わなくても「HTTP + JSON」でシンプルに始められるので現場で普及
よってSOAPは広義のRESTよりも導入ハードルが高いとわかります。
参考
- https://www.oreilly.co.jp/books/9784873116860/
- https://gihyo.jp/book/2024/978-4-297-14571-2
- https://qiita.com/tsudaryo1715/items/3ebb0c5233e480ee5407
- https://qiita.com/il-m-yamagishi/items/8709de06be33e7051fd2
- https://e-words.jp/w/SOAP.html
最後に
- 広義のRESTについて概要を掴めました
- APIの歴史について理解が足りてないので勉強したいと思います
- CORBAについても理解したいと思います
- API設計のノウハウについて勉強したいです