ご質問・お見積り等お気軽にご相談ください
お問い合わせ

WEB API=RESTは正しい選択か?

WEB API=RESTは正しい選択か?

プログラマーのSGKです。最近転職したばかりの新人ですが、宜しくお願いいたします。

 

ちなみに前職ではZend Frameworkを中心に担当しておりました。またその前の職場では今の開発メンバーと同じ職場で働いていたので、初めて入る会社でも勝手が分かる職場って良いですね!

 

さて、昨今WEB APIの利用や開発をする上でRESTが幅を利かせるようになってきました。REST、RESTful APIとは主に、「REST」という原則に基づいて設計された WEB用の API のことを指します。

 

とりわけRESTの説明でよく取り上げられる事として、HTTPメソッドをデータの入出力=CRUDの機能にどう割り当てるのか、という内容を目にします。

 

ただしこれはHTTPの実装と反する仕様があるため、RESTが本当にAPIを設計する手段として最適なものなのか疑問に思っていたのでその事を書きます。

RESTはHTTPメソッドに対してCRUD機能を割り当てる

GET

データの取得。
SQLのSELECT

POST

データの追加もしくは更新。
SQLのINSERT、UPDATE
(PATCHを更新=UPDATE、PUTを追加=INSERTとしている場合がある)

DELETE

データの削除。
SQLのDELETE

これには以下の問題がある

  • リクエストする際のGETの文字列長がサーバーで制限されている場合がある
  • DELETEメソッドを制限しているサーバーがある
  • INSERTした後に新規追加したレコードのIDを取得するような処理がある場合、どのメソッドに割り当てるのか不明。APIにCRUDでは無い設計をしたい場合もある。

 

という事で入出力の処理形態をHTTPメソッドに割り当てることに何の意味があるのか分かりません。

 

じゃあどうしよう?

使用するHTTPメソッドはPOSTだけに統一するのは一つの解ではないかと思います。

またURLを処理別で用意する必要は無いですし、関数名と引数をJSONでパックしてPOSTで渡せば良いです。
で、関数名のプリフィックスで機能を表すようにすれば良いのでは? なんならHTTPメソッド風のプリフィックスを付けて設計すれば・・・などなど。

まとめ

この記事ではRESTのHTTPメソッドに機能を割り当てる点にフォーカスを当て否定しましたが、この他のRESTの原則にある、
「URLにパラメータを表現する」という点は一般的なWEBサイトのSEO技術に繋がる点があり有用ですし、
「セッションやクッキーを使用せずステートレスに処理する」という点はWEB上でデータをやりとりする上で押さえていた方が良いポイントだと気づかされます。

 

WEB APIを設計する方は「WEB API!そうだREST!」という固定観念を捨てて一度RESTをよく勉強してから、検討してみてはどうでしょうか?

この記事を書いた人
SGK
SGK
プログラムを担当しています。 古墳が好きです。猫が好きです。お祭りが好きです。普通の人です。 休日はイオンか大須に行きます。大須にも古墳があります。古墳はコンビニの数より多いです。