質問: **この質問の回答はすでにあります**: restfulなAPIのイメージを掴みたい [クローズ済み] 11ヶ月前 にクローズされました。 **自分がRestfulなAPIを作成経験があるかどうかを確認する方法としてどのような方法・ポイントがあるでしょうか?** 実務でAPI自体は作ったことがありますが、それが「Restfulかどうか」確認する方法が知りたいです。 RestfulでないAPIに対して、Restfulかどうかを確認する方法です。細かい観点ではなく、ざっくりとした観点で構いません。 仮説の一つとして、「GET,POST,PUT,DELETEといったHTTPメソッドで操作するAPIの作成経験」はRestfulなAPIの作成経験として、判断指標の一つといえるのではないか。と思っています。
回答: > > 実務でAPI自体は作ったことがありますが、それが「Restfulかどうか」確認する方法が知りたいです。 > > > おそらくないでしょう(そもそも自分で作ったものがどのようなものかどうかは細かい仕様を提示していただかないと自分以外はだれも判断がつきません、でも実務で作ったものをそう簡単に細かな仕様を公開することはできないでしょうから、判断基準が知りたいというのもわかります)。 おそらくないと書きましたが、もしかしたらあるかもしれません。 つまり、答えは"ない"かもしれないし"ある"かもしれません。 判断する方法がある場合として考えられるのは、お使いのフレームワークのマニュアルかなにかでそのフレームワーク自身がRESTfulですといっていた場合です。(もしくは自分自身がREST原則に従ったAPIを作ったというのでれば経験があると言えそうですが、このような質問をしているので、そうは言えないということになります) Rails のルーティング - Railsガイド 上記RailsガイドにはRESTfulでの作り方が載っています。 この場合、ご自身がRailsの作法に乗っかって開発をしていたらRESTfulになっているでしょう(ただし世の中のすべてのエンジニアがRailsのAPI作成をRESTfulであると認めているのかどうか私は知りません。おそらくREST原則に従っているはずですが、もしかしたら誰かが抜け漏れに気づくかもしれませんし、議論しだすかもしれません)。作法に乗っからなかった場合はRESTfulにならない可能性があります。 > > 仮説の一つとして、「GET,POST,PUT,DELETEといったHTTPメソッドで操作するAPIの作成経験」はRestfulなAPIの作成経験として、判断指標の一つといえるのではないか。と思っています。 > > > GET,POST,PUT,DELETE を使えばRESTfulと言ってしまう人もいるかもしれないですが、おそらく駄目です。 そもそも RESTfulというのはREST原則に従うものだそうです。Representational State Transfer - Wikipedia の情報になってしまいますが、 * ステートレスなクライアント/サーバプロトコル * すべての情報(リソース)に適用できる「よく定義された操作」のセット * リソースを一意に識別する「汎用的な構文」 * アプリケーションの情報と状態遷移の両方を扱うことができる「ハイパーメディアの使用」 上記、原則に従うものが RESTful だそうです。 HTTPメソッドに該当するのは上記原則のうちの"すべての情報(リソース)に適用できる「よく定義された操作」のセット" のところです。 なにもHTTPメソッドに限定してはいなさそうですし、HTTPメソッドに限ったとしても、原則の一部でしかありません。 Railsガイドにたくさん`リソース`という単語が記述してあるとおり、RESTfulを名乗るのであれば、`リソース`という考え方が重要です。 しかし `リソース操作` というものについて議論があるようです。 Representational State Transfer - Wikipedia にも > > しかし実際のところこうしたリソース操作は議論の対象となっている。一部の人々には「リソース」と「表現」とを区別することは観念的すぎるとの意見がある。ただし RDFコミュニティでは、リソースと表現の区別は、一般的に行われている。 > > > と少々ややこしいことが書かれています。 (この段落は余談ですが)さらにいくら `GET,POST,PUT,DELETE` でやろうと頑張ったところで、ブラウザーで使用できるHTMLがいつまでたってもPUTとDELETEをサポートしない状況が続いています。このため、RailsやSpringではちょっとしたハック(?)でPUTやDELETE送信したようなFormを作り出しています。とはいえSpringは最近のバージョンアップでPUTとDELETEを諦めたんじゃないかと私は考えています。諦めたと考える理由はこちらやこちらにある通りバージョンアップしたら デフォルトでは、PUTとDELETEを使えなくなったからです。 HTMLではなくて直にAPIを叩く等であればこの問題はないのですけれども、やはりWebの多くを占めるブラウザーは無視できないでしょう。 さてやはり、RESTfulで重要なのは`リソース`です(議論の対象になってしまっているようですが)。 `GET,POST,PUT,DELETE`といったHTTPメソッドはサブ的な位置づけと考えたほうがおそらく良いです(まあこの論法でいくと`リソース`も原則の一部です)。`リソース`を操作するためにHTTPメソッドを使っているので、`リソース`という考え方がなければ成り立たない考え方がRESTfulだと思います。 さいごになりますが、本質問は "GET,POST,PUT,DELETEといったHTTPメソッドで操作するAPI はRESTfulですか?" であれば、YESかNO(今回であればNO)として答えが決めれらるのでスタックオーバーフローに適した質問になると思います(とはいえ、他の情報によってはRESTfulといえてしまうかもしれないので、まだ適切な質問になりきれていない可能性もあります)。私はHTTPメソッドについてを主に取り上げ、HTTPメソッド**だけ**では、RESTfulとはいえませんと回答した形になります。