Edited at

【知らなくて】僕がRuby on railsを使ってRESTfulなAPIを作ろうとしたら【m9(^Д^)プギャーされた】

More than 3 years have passed since last update.


概要

どうもお疲れ様です。

RailsでAPIを作ることになったので、

とりあえずガチャっと作ってみました。

その後に RESTの制約 というものを友達に教えてもらいました。

シラナカッタ/(^o^)\ナンテコッタイ(゚д゚)情弱ジョウジャクゥ!

なんかAPIを作る時にRESTという制約に沿ってRESTfulなAPIを作るほうが

ある程度ルール化されているので、

今後の拡張方針に迷わず

「get post put delete」を使い分けできる。というもの?

らしいです。よくわからんな。

RESTfulなAPIじゃなきゃAPIじゃない!

というわけではないです。RESTfulなAPIが必ずしも

絶対的に良いAPIというわけではないんだ....(苦笑)

というわけで、絶対的に良いわけではないですが

RESTfulをひとまず勉強してみたいと思います。


なぜRESTfulを目指すのか。

この辺を読んどけばまるっと解決。

参考:RESTfulなAPIの設計を学ぼう @IT

参考:RESTとRailsスタイル @SlideShere

参考:RESTful Web サービスの基本 @IBMdeveloperWorks

今北産業ってかたは

httpのステータスコードを有効に活用する方が

シンプルに作れるルールがきちんと決まってるんだから、

それを利用しようじゃないか!

というような感じです。

補足するなら、


RESTfulにするために抑えておくポイント

図1 顧客APIコントローラ・クラスが定義するAPI @IT

基本的にはこういう風に設定する。ということっぽいですね。

HTTPメソッドとして、

何かデータを取得するAPIならGET

APIを通じてデータの更新をするときはPUT

[追記 : Yahagi様のコメントより]

Railsでは更新にはPATCHを扱うようです。勉強不足でした...!

データの追加はPOST

削除はDELETEのようにすることを心がけてAPIを作る事が

RESTfulにする方法です。

こうしてみるとすごく簡単ですね。


僕が作ったAPI(悪い例)

しかし、そんな簡単な事も知らないでAPIを初心者が作るとどうなるか。

凄いGET天国になります☆(というかGetとPostしか無い。)

...まぁ思いましたよ。

postとかputもあるのにgetだけで動かして果たして良いのかと。

でもGETにしとけば全部動くからいいかなって思って...(´;ω;`)(猛省)

というのも僕のような初心者が前提知識なしにAPI等に取り組むと下記のような症状が出ます。


  • ステータスコード?なにそれ!

残念ながら僕は数カ月前までは知りませんでした...。

知らぬは一時の恥なのでバンバン晒していきますよー。


  • HTTPメソッド?何が違うの?

ステータスコードを知らないので優位性が分からないのです('A`)


  • getで適当にtrue,false返しておけば判断できるでしょう!

ステータスコードで可否が判断できないからそういうことをしてしまうのです('A`)

別にそれが絶対悪(例えば、複雑な判定結果をどうしても渡したい時とか)ってわけじゃないんですが

ただ単純に可否だけ見たいならステータスコードを返すだけで、無駄な通信を発生させずに

済むわけです。


RESTfulなAPIにする。

RESTfulなAPIにする。ということは

言い換えればAPI一つ一つにきちんとした役割を設定するということです。

所謂、「状態」で挙動が変化しないAPIを作るため必要です。(ステートレスなAPI)

明示的にhttpメソッドを使うことで

httpの本来持つステータス・コードを有効に活用することができるし、

利用法が明示的になるので、メソッドの種類でおおよその動きがわかります。

さらにコンテンツタイプもしっかり明示できたら、これほど明示的なAPIはないですね!

だから、皆RESTfulなAPIづくりを頑張るんですね。

稚魚エンジニアがまた一歩成長しました。

自分から見つける技術ってかなり幅が狭いです。

やはり人との繋がりは大事ですね!

ここまで調べると逆にRESTfulだとあまり良くない(不適切)例。というのが気になりますね。

ちょっと調べてみますか....このへんの話はまた機会を見て(僕も勉強が足りないので)

[追記 : miyabisun様より]

少しずつですが『Web を支える技術』を読んでいます @Programming log - Shindo200

このかたの解説が参考になるらしいです。僕もすぐ読んで勉強してきます(`・ω・´)

それはであであ。