簡単に言うと「RESTとは、Representational State Transferの略でソフトウェアアーキテクチャのスタイルのひとつ」しかしこれがまたややこしくしている。
なぜかというとよくセットで語られるSOAPは仕様。それに対してRestはアーキテクチャ。なのでRESTは細かいところを定めているわけじゃなくて
多種多様なものがRESTと呼ばれてしまっている。
RESTは、初めはアーキテクチャの原則と制約の集まり(後述)を指していたが、次第に、XMLやHTTPを使った簡易なウェブベースのインターフェイスのうち、WebサービスのSOAPプロトコルのような MEP(Message Exchange Pattern; SOAPノード相互のメッセージ交換のパターンを確立するための雛型)ベースの特別な抽象化をしないもののことを、大まかに意味する用語として使われるようになった
REST - Wikipedia
なのでRESTといわれたら相手がどのようなRESTをイメージしているのか確認するといい。
RESTの定義には色々あるがマーチンファウラーが定義しているRESTful成熟度の3レベルモデルが相手の理解を知るにはよい指標となるとおもう。
martinfowler.com
- Level 0 Plain Old XML(昔ながらの単純にXMLを返すやり方)
- Level 1 URLでリソースを表すようにする(リソースを動詞でなく名詞で表す)
- Level 2 HTTPメソッドGET, POST, PUT, DELETE等を正しく使い分ける
- Level 3 レスポンスの中に関連するリンクを含める
Level3はNetflixのAPIとか、API自体がハイパーメディアとして動作するようなもの。ほぼ見かけない。
今世界で言われている大半のAPIはLevel2。Level1だとWebで公開するとハテブとかでちょっとけちつけられる可能性がある。
でも上記にあってなくても使いやすければLevel1でも悪くないとおもうよ。だってちゃんとしたRestで考えると色々使いにくいから。。。
そんな使いにくさもありDropBoxがRestのサポートをやめたり、*1
GoogleAPIもHTTP2ではgRPCを主軸においてたり、今後Restから次のステージが模索されている。
とはいえ本家RESTも大事なのでちゃん仕様を統一しようてことでOpen API Initiative*2がSwaggerベースで仕様統一を検討し始めている。
RESTが誕生して16年。これからも目が離せませんね